Strategi Trading Reversal MACD Dual adalah strategi perdagangan kuantitatif yang menggunakan indikator MACD untuk mengidentifikasi sinyal pembalikan tren. Strategi ini juga menggabungkan indikator RVI dan indikator CCI untuk mengkonfirmasi sinyal beli dan menyaring beberapa pembalikan palsu. Strategi ini cocok untuk perdagangan intraday dan jangka pendek.
Strategi ini terutama didasarkan pada indikator MACD. MACD adalah rata-rata bergerak cepat EMA ((12) dikurangi rata-rata bergerak lambat EMA ((26) untuk mendapatkan garis cepat, dan kemudian menggunakan SIGNAL ((9) sebagai garis lambat. Ketika garis cepat melintasi di atas garis lambat untuk menghasilkan Golden Cross, itu bullish; Ketika garis cepat melintasi di bawah garis lambat untuk menghasilkan Dead Cross, itu bearish.
Strategi ini menggunakan indikator MACD jangka waktu ganda untuk mengidentifikasi peluang pembalikan. Strategi ini menggunakan MACD 6 jam untuk menentukan arah tren keseluruhan dan MACD 1 jam untuk menemukan sinyal pembalikan. Ketika MACD 6 jam berada dalam tren naik, jika garis cepat 1 jam melintasi di bawah garis lambat untuk menghasilkan sinyal silang kematian, itu menunjukkan bahwa harga mungkin berbalik ke atas. Pada titik ini, gabungkan indikator RVI dan indikator CCI untuk lebih lanjut mengkonfirmasi dan menghasilkan sinyal beli.
Indikator RVI mengukur hubungan antara harga penutupan dan harga pembukaan beberapa candlestick terbaru versus harga tertinggi dan terendah. RVI di bawah 0,2 dianggap oversold. Indikator CCI di bawah -100 menunjukkan oversold. Jadi strategi menggunakan indikator RVI di bawah 0,2 dan indikator CCI di bawah -95 untuk membantu mengkonfirmasi sinyal beli.
Strategi ini menggabungkan indikator MACD dan RVI dan CCI dua kerangka waktu untuk secara akurat mengidentifikasi peluang pembalikan dan menyaring beberapa sinyal pembalikan palsu untuk meningkatkan stabilitas strategi.
Gunakan MACD 6 jam untuk menentukan tren utama dan hindari perdagangan di lingkungan dengan peningkatan ketidakpastian di pasar yang lebih luas.
MACD 1 jam mengidentifikasi waktu pembalikan dan menangkap penyesuaian harga siklus yang lebih pendek.
Kombinasi indikator RVI dan indikator CCI dapat menentukan waktu pembalikan dengan lebih akurat.
Strategi ini menggabungkan stop loss untuk mengurangi kerugian.
Strategi ini juga memiliki beberapa risiko, terutama tercermin dalam:
MACD sendiri cenderung menghasilkan sinyal palsu, jadi meskipun indikator tambahan memiliki efek penyaringan yang baik, tidak mungkin untuk sepenuhnya menghindari kerugian.
Indikator RVI dan CCI dapat mengeluarkan sinyal yang salah, sehingga kehilangan peluang pembalikan yang lebih baik atau meningkatkan kerugian yang tidak perlu.
Pengaturan stop loss yang tidak benar dapat memicu stop loss terlalu sering atau gagal mengendalikan kerugian tepat waktu jika terlalu longgar.
Strategi dapat dioptimalkan lebih lanjut dari aspek berikut:
Saat ini menggunakan 1 jam dan 6 jam dua kerangka waktu, lebih banyak kombinasi kerangka waktu dapat diuji untuk menemukan parameter yang lebih stabil.
Lebih banyak indikator dapat diperkenalkan, seperti KDJ, WR, OBV, dll untuk membantu menilai titik perdagangan.
Parameter dapat terus dioptimalkan untuk varietas yang berbeda, dan perpustakaan parameter dapat didirikan.
Mekanisme stop loss dinamis dapat diatur untuk secara bertahap memindahkan titik stop loss saat keuntungan meningkat atau menyesuaikan besarnya stop loss secara real time sesuai dengan volatilitas pasar.
Strategi perdagangan pembalikan MACD ganda secara komprehensif mempertimbangkan penilaian tren dan sinyal pembalikan, dan dibantu oleh indikator RVI dan CCI untuk menyaring sinyal. Strategi ini dapat secara efektif mengidentifikasi penyesuaian jangka pendek dengan rasio risiko-pengembalian yang baik, cocok untuk perdagangan intraday dan jangka pendek, dan juga dapat digunakan sebagai bagian dari portofolio multi-strategi untuk memberikan keragaman strategi keseluruhan.
/*backtest start: 2023-01-05 00:00:00 end: 2024-01-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Bat MACD", overlay=true) fastLength = input(12) slowlength = input(26) MACDLength = input(9) h=1.05 MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD hmacd= aMACD>0? h*aMACD: -(1/h)*abs(MACD) MACDD= (request.security(syminfo.tickerid,'360',ema(close, fastLength)) - request.security(syminfo.tickerid,'360',ema(close,slowlength))) aMACDD = (request.security(syminfo.tickerid,'360',ema(ema(request.security(syminfo.tickerid,'360',close), fastLength)-ema(request.security(syminfo.tickerid,'360',close),slowlength), MACDLength))) deltad= MACDD-aMACDD L= input(0.95, title="SL") SL = L*ema(close,10) //MACD slow = input(26,"Short period") fast = input(12, "Long period") signal = input(9, "Smoothing period") //MACD = ema(close,fast)-ema(close,slow) dMACD= MACD<0? ema(MACD,5):0 Mcond= rising(dMACD,1) mcount=0.0 mcount := Mcond ? nz(mcount[1]) + 1 : nz(mcount[1]) counter=0 counter := (mcount-mcount[1]==0) ? nz(counter[1]) + 1 : 0 //counter := counter==3 ? 0: nz(counter[1]) pp=0.0 mc=0.0 pp:= (counter-counter[1]<0)? close[1] : nz(pp[1]) mc:= (counter-counter[1]<0)? MACD[1] : nz(mc[1]) bull = (pp-pp[1]<-close*0.005 and mc-mc[1]>0.02*abs(MACD) and MACD<0 and MACD[1]<0)? 1:0 //bgcolor(bull?green:white) //RVI p=10 CO=close-open HL=high-low value1 = (CO + 2*CO[1] + 2*CO[2] + CO[3])/6 value2 = (HL + 2*HL[1] + 2*HL[2] + HL[3])/6 num=sum(value1,p) denom=sum(value2,p) rvi=denom!=0?num/denom:0 //RVI drvi= (rvi<0.2)? ema(rvi-0.20,3):0 RVcond= rising(drvi,1) rvcount=0.0 rvcount := RVcond ? nz(rvcount[1]) + 1 : nz(rvcount[1]) rvcounter=0 rvcounter := (rvcount-rvcount[1]==0) ? nz(rvcounter[1]) + 1 : 0 //counter := counter==3 ? 0: nz(counter[1]) rvpp=0.0 rvmc=0.0 rvpp:= (rvcounter-rvcounter[1]<0)? close[1] : nz(rvpp[1]) rvmc:= (rvcounter-rvcounter[1]<0)? drvi[1] : nz(rvmc[1]) rvbull = (rvpp-rvpp[1]<-close*0.005 and rvmc-rvmc[1]>0.02 and drvi<0 and drvi[1]<0)? 1:0 //VolCCI length1 = input(10, minval=1) xMAVolPrice = ema(volume * close, length1) xMAVol = ema(volume, length1) src1 = xMAVolPrice / xMAVol map = sma(src1, length1) cci = (src1 - map) / (0.015 * dev(src1, length1)) cfi= (cci<0)? ema(cci,3) :0 CCcond= rising(cfi,1) cccount=0.0 cccount := CCcond ? nz(cccount[1]) + 1 : nz(cccount[1]) cccounter=0 cccounter := (cccount-cccount[1]==0) ? nz(cccounter[1]) + 1 : 0 //counter := counter==3 ? 0: nz(counter[1]) ccpp=0.0 ccmc=0.0 ccpp:= (cccounter-cccounter[1]<0)? close[1] : nz(ccpp[1]) ccmc:= (cccounter-cccounter[1]<0)? cci[1] : nz(ccmc[1]) ccbull = (ccpp-ccpp[1]<-close*0.003 and ccmc-ccmc[1]>20 and cci<-95 and cci[1]<-95)? 1:0 A= bull+ccbull+rvbull if ((MACD>hmacd) and deltad>0 and delta>delta[1]) strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close) if (crossunder(delta, 0) or crossunder(close,SL)) strategy.close("Long") if(crossover(low,SL) and SL-SL[1]<close*0.005 and SL-SL[1]>-close*0.005) strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close) if A strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close) plot(SL) //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)