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.
Menghitung EMA cepat dan EMA lambat, yang mencerminkan tren jangka pendek dan jangka panjang pasar masing-masing.
Hitung garis MAMA dan FAMA, yang merupakan rata-rata bergerak adaptif.
Ketika EMA cepat melintasi di atas EMA lambat, sinyal beli dihasilkan.
Ketika EMA cepat melintasi di bawah EMA lambat, sinyal jual dihasilkan.
Ketika MAMA melintasi di atas FAMA, sinyal beli dihasilkan.
Ketika MAMA melintasi di bawah FAMA, sinyal jual dihasilkan.
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:
Hitung Transformasi Hilbert dari harga dan ekstrak informasi fase dari sinyal.
Menghitung frekuensi p instan berdasarkan informasi fase.
Menghitung faktor bobot α berdasarkan nilai p.
Hitung MAMA dan FAMA berdasarkan α.
Akhirnya, sinyal perdagangan dihasilkan berdasarkan silang EMA dan MAMA/FAMA:
Strategi ini menggabungkan keuntungan dari indikator EMA dan MAMA untuk meningkatkan akurasi sinyal perdagangan.
Keuntungan dari EMA:
Keuntungan dari MAMA:
Keuntungan dari menggabungkannya:
Risiko utama dari strategi ini:
Solusi:
Strategi dapat dioptimalkan dalam aspek berikut:
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)