Strategi perdagangan pembalikan MACD ganda

Penulis:ChaoZhang, Tanggal: 2024-01-12 14:49:47
Tag:

img

Gambaran umum

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.

Logika Strategi

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.

Analisis Keuntungan

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.

  1. Gunakan MACD 6 jam untuk menentukan tren utama dan hindari perdagangan di lingkungan dengan peningkatan ketidakpastian di pasar yang lebih luas.

  2. MACD 1 jam mengidentifikasi waktu pembalikan dan menangkap penyesuaian harga siklus yang lebih pendek.

  3. Kombinasi indikator RVI dan indikator CCI dapat menentukan waktu pembalikan dengan lebih akurat.

  4. Strategi ini menggabungkan stop loss untuk mengurangi kerugian.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko, terutama tercermin dalam:

  1. MACD sendiri cenderung menghasilkan sinyal palsu, jadi meskipun indikator tambahan memiliki efek penyaringan yang baik, tidak mungkin untuk sepenuhnya menghindari kerugian.

  2. Indikator RVI dan CCI dapat mengeluarkan sinyal yang salah, sehingga kehilangan peluang pembalikan yang lebih baik atau meningkatkan kerugian yang tidak perlu.

  3. Pengaturan stop loss yang tidak benar dapat memicu stop loss terlalu sering atau gagal mengendalikan kerugian tepat waktu jika terlalu longgar.

Arahan Optimasi

Strategi dapat dioptimalkan lebih lanjut dari aspek berikut:

  1. Saat ini menggunakan 1 jam dan 6 jam dua kerangka waktu, lebih banyak kombinasi kerangka waktu dapat diuji untuk menemukan parameter yang lebih stabil.

  2. Lebih banyak indikator dapat diperkenalkan, seperti KDJ, WR, OBV, dll untuk membantu menilai titik perdagangan.

  3. Parameter dapat terus dioptimalkan untuk varietas yang berbeda, dan perpustakaan parameter dapat didirikan.

  4. 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.

Ringkasan

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)

Lebih banyak