Strategi perdagangan berdasarkan indikator EMA dan MAMA

Penulis:ChaoZhang, Tanggal: 2023-10-31 14:20:56
Tag:

img

Gambaran umum

Strategi ini didasarkan pada indikator EMA (Exponential Moving Average) dan MAMA (MESA Adaptive Moving Average) untuk menentukan arah tren dan menghasilkan sinyal perdagangan sesuai dengan persilangan mereka. EMA sering digunakan untuk menilai arah tren pasar, sementara MAMA dapat menangkap titik balik pasar dengan lebih akurat. Menggunakan keduanya dapat meningkatkan kinerja strategi.

Logika Strategi

  1. Menghitung EMA cepat dan EMA lambat, yang mencerminkan tren jangka pendek dan jangka panjang pasar masing-masing.

  2. Hitung garis MAMA dan FAMA, yang merupakan rata-rata bergerak adaptif.

  3. Ketika EMA cepat melintasi di atas EMA lambat, sinyal beli dihasilkan.

  4. Ketika EMA cepat melintasi di bawah EMA lambat, sinyal jual dihasilkan.

  5. Ketika MAMA melintasi di atas FAMA, sinyal beli dihasilkan.

  6. Ketika MAMA melintasi di bawah FAMA, sinyal jual dihasilkan.

  7. Crossover MAMA dan FAMA dapat digunakan untuk mengkonfirmasi sinyal EMA atau memberikan deteksi awal perubahan tren.

Secara khusus, strategi pertama menghitung EMA cepat (fl) dan EMA lambat (sl), yang mencerminkan tren jangka pendek dan jangka panjang masing-masing.

Kemudian menghitung MAMA dan FAMA berdasarkan rumus John Ehlers:

  1. Hitung Transformasi Hilbert dari harga dan ekstrak informasi fase dari sinyal.

  2. Menghitung frekuensi p instan berdasarkan informasi fase.

  3. Menghitung faktor bobot α berdasarkan nilai p.

  4. Hitung MAMA dan FAMA berdasarkan α.

Akhirnya, sinyal perdagangan dihasilkan berdasarkan silang EMA dan MAMA/FAMA:

  • Panjang ketika EMA melintasi di atas
  • Pendek ketika EMA melintasi di bawah
  • Panjang ketika MAMA melintasi di atas FAMA
  • Pendek ketika MAMA melintasi di bawah FAMA

Analisis Keuntungan

Strategi ini menggabungkan keuntungan dari indikator EMA dan MAMA untuk meningkatkan akurasi sinyal perdagangan.

Keuntungan dari EMA:

  • Data harga yang efisien dan mengurangi kebisingan
  • Melacak tren dengan baik dengan beberapa lag
  • Parameter fleksibel untuk menyesuaikan sensitivitas

Keuntungan dari MAMA:

  • Parameter adaptif, tidak perlu pengaturan periode manual
  • Tanggapan cepat untuk menangkap tren berubah lebih awal
  • Mengidentifikasi dukungan dan resistensi dengan tepat

Keuntungan dari menggabungkannya:

  • EMA menentukan tren keseluruhan
  • MAMA memverifikasi sinyal dan mendeteksi belokan lebih awal
  • Meningkatkan akurasi dan tingkat kemenangan sinyal

Analisis Risiko

Risiko utama dari strategi ini:

  • EMA dan MAMA adalah indikator yang tertinggal, sinyal masuk mungkin memiliki beberapa keterlambatan dan slippage
  • Seringnya crossover di berbagai pasar yang menyebabkan whipsaws
  • Pengaturan parameter yang tidak benar menyebabkan hilangnya tren atau sinyal palsu

Solusi:

  • Gunakan stop loss untuk mengendalikan kerugian
  • Pilih parameter yang wajar, hindari terlalu sensitif
  • Gabungkan dengan indikator lain untuk mengkonfirmasi sinyal

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  • Mengoptimalkan periode EMA berdasarkan karakteristik simbol
  • Sensitivitas MAMA alpha untuk menangkap belokan yang lebih baik
  • Tambahkan filter lain seperti MACD, RSI untuk menghindari sinyal palsu
  • Tambahkan stop loss untuk mengontrol risiko
  • Backtest untuk menemukan parameter optimal
  • Otomatis mengambil keuntungan untuk keuntungan maksimal

Ringkasan

Strategi ini mengintegrasikan kekuatan indikator EMA dan MAMA untuk mengikuti tren dan menangkap giliran tepat waktu. Dengan optimasi parameter dan pengendalian risiko, dapat mencapai tingkat kemenangan dan profitabilitas yang lebih baik.


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

Lebih banyak