Ehlers MESA Adaptive Moving Average Strategi Perdagangan

Penulis:ChaoZhang, Tanggal: 2023-09-28 15:37:13
Tag:

Gambaran umum

Strategi ini didasarkan pada Ehlers MESA Adaptive Moving Average dan dirancang strategi perdagangan tren yang melacak persilangan antara dua rata-rata bergerak.

Logika Strategi

Inti dari strategi ini adalah untuk menghitung dua rata-rata bergerak adaptif: garis MAMA dan garis FAMA.

alpha = fl / dphase
alpha = iff(alpha < sl, sl, iff(alpha > fl, fl, alpha))  
mama = alpha*src + (1 - alpha)*nz(mama[1])

Di mana fl adalah batas cepat, sl adalah batas lambat, dan dphase adalah perbedaan fase.

Garis FAMA dihitung sebagai berikut:

fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])

FAMA line adalah low pass filter smoothing dari MAMA line.

Strategi ini membandingkan hubungan magnitudo antara garis MAMA dan FAMA untuk menentukan apakah pasar saat ini berada dalam tren naik atau turun, dan menghasilkan sinyal perdagangan berdasarkan ini.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Menggunakan rata-rata bergerak adaptif di mana parameter menyesuaikan secara otomatis berdasarkan perubahan pasar, tanpa perlu parameter yang ditetapkan secara manual.

  2. Filter low pass FAMA line dapat menyaring keluar palsu.

  3. Menggunakan desain rata-rata bergerak ganda dapat melacak tren jangka menengah hingga panjang.

  4. Logika strategi yang sederhana dan jelas yang mudah dipahami dan dimodifikasi.

  5. Indikator visual yang jelas menunjukkan sinyal perdagangan.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Strategi crossover garis ganda dapat menghasilkan sinyal perdagangan yang berlebihan, penarikan yang tepat dan kontrol interval dianjurkan.

  2. Perhitungan MAMA dan FAMA yang kompleks, pengaturan parameter yang tidak tepat dapat menyebabkan distorsi kurva.

  3. Parameter adaptasi dapat menyebabkan overfitting, perlu verifikasi dengan indikator teknis lainnya.

  4. Crossover garis ganda memiliki keterlambatan waktu, mungkin melewatkan titik perubahan tren.

  5. Perlu berhati-hati terhadap risiko stop loss dari breakout palsu.

Arahan Optimasi

Strategi dapat dioptimalkan di bidang berikut:

  1. Optimalkan pengaturan parameter untuk menemukan kombinasi batas cepat dan batas lambat terbaik.

  2. Tambahkan strategi stop loss untuk mengontrol secara ketat stop loss per perdagangan.

  3. Tambahkan indikator lain untuk menyaring sinyal, seperti MACD, RSI dll untuk menghindari pecah palsu.

  4. Tambahkan indikator penilaian tren untuk menghindari perdagangan kontra-tren.

  5. Mengoptimalkan laju masuk dengan menyesuaikan persyaratan crossover untuk mengurangi perdagangan yang terlalu sering.

  6. Mengoptimalkan strategi mengambil keuntungan sesuai dengan kekuatan tren.

  7. Uji perbedaan parameter antara berbagai produk untuk menemukan kombinasi parameter yang optimal.

Ringkasan

Secara keseluruhan ini adalah tren yang khas mengikuti strategi, menggunakan Ehlers MESA rata-rata bergerak adaptif untuk membangun indikator yang divisualisasikan dan menghasilkan sinyal perdagangan melalui penyeberangan garis ganda. Strategi ini memiliki keuntungan seperti parameter adaptif, penyaringan breakout palsu dan visualisasi, tetapi juga risiko seperti keterlambatan waktu dan perdagangan yang berlebihan.


/*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)	


Lebih banyak