Strategi Dagangan Pembalikan MACD Berganda

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

img

Ringkasan

Dual MACD Reversal Trading Strategy adalah strategi perdagangan kuantitatif yang menggunakan penunjuk MACD untuk mengenal pasti isyarat pembalikan trend. Strategi ini juga menggabungkan penunjuk RVI dan penunjuk CCI untuk mengesahkan isyarat beli dan menapis beberapa pembalikan palsu. Strategi ini sesuai untuk perdagangan intraday dan jangka pendek.

Logika Strategi

Strategi ini terutamanya berdasarkan penunjuk MACD. MACD adalah purata bergerak pantas EMA ((12) dikurangkan purata bergerak perlahan EMA ((26) untuk mendapatkan garis pantas, dan kemudian menggunakan SIGNAL ((9) sebagai garis perlahan. Apabila garis pantas melintasi di atas garis perlahan untuk menjana Salib Emas, ia adalah bullish; Apabila garis pantas melintasi di bawah garis perlahan untuk menjana Salib Mati, ia adalah bearish.

Strategi ini menggunakan penunjuk MACD bingkai masa berganda untuk mengenal pasti peluang pembalikan. Strategi ini menggunakan MACD 6 jam untuk menentukan arah trend keseluruhan dan MACD 1 jam untuk mencari isyarat pembalikan. Apabila MACD 6 jam berada dalam trend menaik, jika garis cepat 1 jam melintasi di bawah garis perlahan untuk menjana isyarat salib kematian, ia menunjukkan bahawa harga mungkin berbalik ke atas. Pada ketika ini, gabungkan penunjuk RVI dan penunjuk CCI untuk mengesahkan dan menjana isyarat beli.

Indikator RVI mengukur hubungan antara harga penutupan dan harga pembukaan beberapa candlestick terbaru berbanding harga tertinggi dan terendah. RVI di bawah 0.2 dianggap terlalu banyak dijual. Indikator CCI di bawah -100 menunjukkan terlalu banyak dijual. Jadi strategi menggunakan indikator RVI di bawah 0.2 dan indikator CCI di bawah -95 untuk membantu mengesahkan isyarat beli.

Analisis Kelebihan

Strategi ini menggabungkan indikator jangka masa MACD dan RVI dan CCI berganda untuk mengenal pasti peluang pembalikan dengan tepat dan menapis beberapa isyarat pembalikan palsu untuk meningkatkan kestabilan strategi.

  1. Gunakan MACD 6 jam untuk menentukan trend utama dan mengelakkan perdagangan dalam persekitaran dengan ketidakpastian yang meningkat di pasaran yang lebih luas.

  2. MACD 1 jam mengenal pasti masa pembalikan dan menangkap penyesuaian harga kitaran yang lebih pendek.

  3. Gabungan penunjuk RVI dan penunjuk CCI dapat menentukan masa pembalikan dengan lebih tepat.

  4. Strategi ini menggabungkan stop loss untuk mengurangkan kerugian.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko, terutama tercermin dalam:

  1. MACD sendiri cenderung menghasilkan isyarat palsu, jadi walaupun penunjuk tambahan mempunyai kesan penapisan yang baik, mustahil untuk mengelakkan kerugian sepenuhnya.

  2. Penunjuk RVI dan CCI boleh mengeluarkan isyarat yang salah, sehingga kehilangan peluang pembalikan yang lebih baik atau meningkatkan kerugian yang tidak perlu.

  3. Tetapan stop loss yang tidak betul boleh mencetuskan stop loss terlalu kerap atau gagal mengawal kerugian dalam masa jika terlalu longgar.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dari aspek berikut:

  1. Pada masa ini menggunakan 1 jam dan 6 jam dua bingkai masa, lebih banyak kombinasi bingkai masa boleh diuji untuk mencari parameter yang lebih stabil.

  2. Lebih banyak penunjuk boleh diperkenalkan, seperti KDJ, WR, OBV, dan lain-lain untuk membantu menilai titik perdagangan.

  3. Parameter boleh terus dioptimumkan untuk pelbagai jenis, dan perpustakaan parameter boleh ditubuhkan.

  4. Mekanisme stop loss dinamik boleh ditetapkan untuk secara beransur-ansur memindahkan titik stop loss apabila keuntungan meningkat atau menyesuaikan besar stop loss dalam masa nyata mengikut turun naik pasaran.

Ringkasan

Strategi Dagangan Pembalikan MACD Berganda secara komprehensif mempertimbangkan penilaian trend dan isyarat pembalikan, dan dibantu oleh penunjuk RVI dan CCI untuk menapis isyarat. Strategi ini dapat dengan berkesan mengenal pasti penyesuaian jangka pendek dengan nisbah risiko-balasan yang baik, sesuai untuk perdagangan intraday dan jangka pendek, dan juga boleh digunakan sebagai sebahagian daripada portfolio pelbagai strategi untuk menyediakan kepelbagaian 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 lanjut