
Strategi ini berdasarkan kepada EMA (Indeks Moving Average) dan MAMA (MESA Adaptive Moving Average) untuk menilai trend pasaran dan menghasilkan isyarat perdagangan berdasarkan keadaan silang mereka. EMA sering digunakan untuk menentukan arah trend pasaran, manakala MAMA dapat menangkap titik-titik perubahan pasaran dengan lebih tepat, kedua-duanya digunakan bersama untuk meningkatkan prestasi strategi.
Khususnya, strategi pertama mengira EMA cepat (fl) dan EMA perlahan (sl), yang mencerminkan trend jangka pendek dan jangka panjang.
MAMA dan FAMA kemudiannya dikira mengikut formula John Ehlers:
Akhirnya, strategi menghasilkan isyarat dagangan berdasarkan EMA dan persilangan MAMA/FAMA:
Strategi ini menggabungkan kelebihan indikator EMA dan MAMA untuk meningkatkan ketepatan isyarat perdagangan.
Kelebihan EMA:
Kelebihan MAMA:
Kelebihan menggunakan kedua-dua kaedah ini:
Strategi ini mempunyai risiko utama:
Langkah-langkah yang diambil:
Strategi ini boleh dioptimumkan dengan:
Strategi ini mengintegrasikan kelebihan kedua-dua indikator EMA dan MAMA, mampu menangkap perubahan trend secara beransur-ansur dan tepat pada masanya, merupakan strategi jenis trend yang boleh dipercayai. Dengan pengoptimuman parameter dan kawalan risiko, anda dapat meningkatkan kemenangan dan keuntungan strategi.
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("EMAMA strategy", overlay=true)
//This entire strategy is courtesy of LazyBear for programming the original EMAMA system, I simply added a strategy element to everything to round things out.
src=input(hl2, title="Source")
fl=input(.5, title="Fast Limit")
sl=input(.05, title="Slow Limit")
sp = (4*src + 3*src[1] + 2*src[2] + src[3]) / 10.0
dt = (.0962*sp + .5769*nz(sp[2]) - .5769*nz(sp[4])- .0962*nz(sp[6]))*(.075*nz(p[1]) + .54)
q1 = (.0962*dt + .5769*nz(dt[2]) - .5769*nz(dt[4])- .0962*nz(dt[6]))*(.075*nz(p[1]) + .54)
i1 = nz(dt[3])
jI = (.0962*i1 + .5769*nz(i1[2]) - .5769*nz(i1[4])- .0962*nz(i1[6]))*(.075*nz(p[1]) + .54)
jq = (.0962*q1 + .5769*nz(q1[2]) - .5769*nz(q1[4])- .0962*nz(q1[6]))*(.075*nz(p[1]) + .54)
i2_ = i1 - jq
q2_ = q1 + jI
i2 = .2*i2_ + .8*nz(i2[1])
q2 = .2*q2_ + .8*nz(q2[1])
re_ = i2*nz(i2[1]) + q2*nz(q2[1])
im_ = i2*nz(q2[1]) - q2*nz(i2[1])
re = .2*re_ + .8*nz(re[1])
im = .2*im_ + .8*nz(im[1])
p1 = iff(im!=0 and re!=0, 360/atan(im/re), nz(p[1]))
p2 = iff(p1 > 1.5*nz(p1[1]), 1.5*nz(p1[1]), iff(p1 < 0.67*nz(p1[1]), 0.67*nz(p1[1]), p1))
p3 = iff(p2<6, 6, iff (p2 > 50, 50, p2))
p = .2*p3 + .8*nz(p3[1])
spp = .33*p + .67*nz(spp[1])
phase = atan(q1 / i1)
dphase_ = nz(phase[1]) - phase
dphase = iff(dphase_< 1, 1, dphase_)
alpha_ = fl / dphase
alpha = iff(alpha_ < sl, sl, iff(alpha_ > fl, fl, alpha_))
mama = alpha*src + (1 - alpha)*nz(mama[1])
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
pa=input(false, title="Mark crossover points")
plotarrow(pa?(cross(mama, fama)?mama<fama?-1:1:na):na, title="Crossover Markers")
fr=input(false, title="Fill MAMA/FAMA Region")
duml=plot(fr?(mama>fama?mama:fama):na, style=circles, color=gray, linewidth=0, title="DummyL")
mamal=plot(mama, title="MAMA", color=red, linewidth=2)
famal=plot(fama, title="FAMA", color=green, linewidth=2)
fill(duml, mamal, red, transp=70, title="NegativeFill")
fill(duml, famal, green, transp=70, title="PositiveFill")
ebc=input(false, title="Enable Bar colors")
bc=mama>fama?lime:red
barcolor(ebc?bc:na)
longCondition = crossover(mama, fama)
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = crossunder(mama, fama)
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)