Strategi ini didasarkan pada Ehlers MESA Adaptive Moving Average, yang dirancang untuk strategi perdagangan tren yang mengikuti dua persimpangan rata-rata. Berdagang lebih banyak ketika melewati garis lambat di atas garis cepat, dan berdagang lebih sedikit ketika melewati garis lambat di bawah garis cepat, adalah strategi persimpangan rata-rata bergerak ganda yang khas.
Inti dari strategi ini adalah menghitung dua rata-rata bergerak adaptif: garis MAMA dan garis FAMA. Di antaranya, rumus untuk menghitung garis MAMA adalah sebagai berikut:
alpha = fl / dphase
alpha = iff(alpha < sl, sl, iff(alpha > fl, fl, alpha))
mama = alpha*src + (1 - alpha)*nz(mama[1])
Di antaranya fl adalah fast limit, sl adalah slow limit, dan dphase adalah phase difference. alpha secara dinamis disesuaikan dengan phase difference, untuk mencapai parameter smoothing yang dapat beradaptasi.
Rumus untuk menghitung garis FAMA adalah sebagai berikut:
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
Garis FAMA adalah garis peredam gelombang rendah dari garis MAMA.
Strategi ini menghasilkan sinyal perdagangan dengan membandingkan hubungan ukuran antara garis MAMA dan garis FAMA untuk menentukan apakah saat ini sedang dalam tren naik atau tren turun.
Strategi ini memiliki beberapa keuntungan:
Dengan menggunakan Adaptive Moving Average, parameter akan disesuaikan secara otomatis sesuai dengan perubahan pasar, tanpa perlu mengatur parameter tetap secara manual.
Menambahkan filter rendah FAMA kabel, yang dapat menyaring penembusan palsu.
Dengan desain moving average ganda, trend garis tengah pasar dapat dilacak.
Strategi logisnya sederhana dan jelas, mudah dipahami dan dimodifikasi.
Indikator visualisasi intuitif, Anda dapat melihat sinyal perdagangan dengan jelas.
Strategi ini juga memiliki beberapa risiko:
Strategi crossover dua baris mudah menghasilkan sinyal perdagangan beberapa kali, dan disarankan untuk mengontrol interval dan penarikan dengan tepat.
Perhitungan garis MAMA dan FAMA rumit, dan pengaturan parameter yang tidak tepat dapat menyebabkan kemerosotan kurva.
Adaptasi parameter dapat menyebabkan over-optimalisasi, yang perlu divalidasi bersama dengan indikator teknis lainnya.
Bilas dua baris dengan ketinggalan waktu, dan mungkin akan kehilangan titik pergeseran tren.
Perhatian harus diberikan terhadap risiko kerusakan akibat penembusan palsu.
Strategi ini dapat dioptimalkan dari beberapa arah:
Optimalkan pengaturan parameter untuk menemukan kombinasi parameter yang optimal untuk pembatasan cepat dan lambat.
Meningkatkan strategi stop loss dan kontrol ketat terhadap stop loss tunggal.
Dalam kombinasi dengan sinyal filter indikator lain, seperti MACD, RSI, dan lain-lain, untuk menghindari false breakout.
Meningkatkan indikator penilaian tren dan menghindari perdagangan berlawanan arah.
Untuk mengoptimalkan kecepatan masuk, menyesuaikan persyaratan jarak antara dua garis yang bersilang, dan mengurangi terlalu seringnya transaksi.
Optimalkan strategi stop-loss dengan menggunakan stop-loss yang berbeda berdasarkan intensitas tren.
Uji perbedaan pengaturan parameter dari berbagai varietas untuk menemukan kombinasi parameter yang optimal.
Strategi overall adalah strategi pelacakan tren yang khas, menggunakan Ehlers MESA Adaptive Moving Average untuk membangun indikator visual dan menghasilkan sinyal perdagangan dengan cara silang dua baris. Strategi ini memiliki keuntungan seperti parameter adaptasi, penembusan palsu, visualisasi, dan risiko seperti lag waktu, perdagangan berulang.
/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
// @author LazyBear
//
// List of my public indicators: http://bit.ly/1LQaPK8
// List of my app-store indicators: http://blog.tradingview.com/?p=970
//
strategy("Ehlers MESA Adaptive Moving Average [LazyBear with ekoronin fix]", shorttitle="EMAMA_LB (ekoronin fix)", overlay=false, calc_on_every_tick=true, precision=0)
src=input(close, title="Source")
fl=input(.4, title="Fast Limit")
sl=input(.04, title="Slow Limit")
pi = 3.1415926
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]))
p1 = iff(im!=0 and re!=0, 2*pi/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)
phase = 180/pi * 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)
longSpike=mama>fama? 1:0
shortSpike=mama<fama? 1:0
plot(longSpike, title = "Mama Long", style=line, linewidth=1, color=yellow)
plot(shortSpike, title = "Mama Short", style=line, linewidth=1, color=red)
//possig = iff(reverse and pos == 1, -1,
// iff(reverse and pos == -1, 1, pos))
if (longSpike)
strategy.entry("Long", strategy.long)
if (shortSpike)
strategy.entry("Short", strategy.short)