Strategi Dagangan Berdasarkan Indikator EMA dan MAMA

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

img

Ringkasan

Strategi ini berdasarkan kepada penunjuk EMA (Exponential Moving Average) dan MAMA (MESA Adaptive Moving Average) untuk menentukan arah trend dan menjana isyarat perdagangan mengikut persilangan mereka. EMA sering digunakan untuk menilai arah trend pasaran, sementara MAMA dapat menangkap titik perubahan pasaran dengan lebih tepat. Menggunakan kedua-duanya dapat meningkatkan prestasi strategi.

Logika Strategi

  1. Mengira EMA pantas dan EMA perlahan, yang mencerminkan trend jangka pendek dan jangka panjang pasaran masing-masing.

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

  3. Apabila EMA cepat melintasi di atas EMA perlahan, isyarat beli dihasilkan.

  4. Apabila EMA cepat melintasi di bawah EMA perlahan, isyarat jual dihasilkan.

  5. Apabila MAMA melintasi di atas FAMA, isyarat beli dihasilkan.

  6. Apabila MAMA melintasi di bawah FAMA, isyarat jual dihasilkan.

  7. Crossover MAMA dan FAMA boleh digunakan untuk mengesahkan isyarat EMA atau menyediakan pengesanan awal perubahan trend.

Secara khusus, strategi ini mula-mula mengira EMA cepat (fl) dan EMA perlahan (sl), yang mencerminkan trend jangka pendek dan jangka panjang masing-masing.

Kemudian ia mengira MAMA dan FAMA berdasarkan formula John Ehlers:

  1. Mengira Transformasi Hilbert harga dan maklumat fasa ekstrak isyarat.

  2. Mengira frekuensi sesaat p berdasarkan maklumat fasa.

  3. Mengira faktor berat α berdasarkan nilai p.

  4. Mengira MAMA dan FAMA berdasarkan α.

Akhirnya, isyarat dagangan dihasilkan berdasarkan persilangan EMA dan MAMA/FAMA:

  • Lama apabila EMA melintasi di atas
  • Pendek apabila EMA melintasi di bawah
  • Lama apabila MAMA melintasi di atas FAMA
  • Pendek apabila MAMA melintasi di bawah FAMA

Analisis Kelebihan

Strategi ini menggabungkan kelebihan penunjuk EMA dan MAMA untuk meningkatkan ketepatan isyarat perdagangan.

Kelebihan EMA:

  • Data harga yang lancar dan mengurangkan bunyi bising
  • Mengesan trend dengan baik dengan beberapa lag
  • Parameter fleksibel untuk menyesuaikan kepekaan

Kelebihan MAMA:

  • Parameter penyesuaian, tiada keperluan untuk tetapan tempoh manual
  • Tanggapan cepat untuk menangkap trend bertukar awal
  • Mengenal pasti sokongan dan rintangan

Kelebihan menggabungkan mereka:

  • EMA menentukan trend keseluruhan
  • MAMA mengesahkan isyarat dan mengesan belokan awal
  • Penambahbaikan ketepatan dan kadar kemenangan isyarat

Analisis Risiko

Risiko utama strategi ini:

  • EMA dan MAMA adalah penunjuk yang tertinggal, isyarat kemasukan mungkin mempunyai beberapa kelewatan dan slippage
  • Rintisan yang kerap di pasaran yang berbeza menyebabkan masalah
  • Tetapan parameter yang tidak betul membawa kepada trend yang hilang atau isyarat palsu

Penyelesaian:

  • Gunakan stop loss untuk mengawal kerugian
  • Pilih parameter yang munasabah, elakkan terlalu sensitif
  • Gabungkan dengan penunjuk lain untuk mengesahkan isyarat

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  • Mengoptimumkan tempoh EMA berdasarkan ciri-ciri simbol
  • Fine tune MAMA sensitiviti alpha untuk menangkap belokan yang lebih baik
  • Tambah penapis lain seperti MACD, RSI untuk mengelakkan isyarat palsu
  • Tambah stop loss untuk mengawal risiko
  • Ujian balik untuk mencari parameter optimum
  • Mengotomatiskan mengambil keuntungan untuk keuntungan maksimum

Ringkasan

Strategi ini mengintegrasikan kekuatan penunjuk EMA dan MAMA untuk mengikuti trend dan menangkap giliran tepat pada masanya. Dengan pengoptimuman parameter dan kawalan risiko, ia dapat mencapai peningkatan kadar kemenangan dan keuntungan. Tetapi pengguna masih harus berhati-hati berdasarkan keutamaan risiko peribadi.


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