Strategi Perdagangan Purata Bergerak Berbilang Jangka Masa

Penulis:ChaoZhang, Tarikh: 2023-09-21 20:45:38
Tag:

Ringkasan

Strategi ini menggunakan persilangan purata bergerak antara bingkai masa yang berbeza untuk menjana isyarat perdagangan. Ia membolehkan pemerhatian MA bingkai masa yang lebih lama pada carta semasa untuk mengesan trend yang lebih besar. Ini tergolong dalam strategi trend antara bingkai masa berikut.

Logika Strategi

Strategi ini menggunakan dua purata bergerak yang dikira pada jangka masa yang berasingan.

Sebagai contoh pada carta 15min ia menggunakan 20MA dan 50MA:

  • 20MA dikira pada bar 15min semasa
  • 50MA dikira pada bar harian

Apabila 15min 20MA melintasi di atas 50MA harian, ia pergi panjang.

Ini mencapai kesan memerhatikan trend jangka masa yang lebih lama pada tempoh semasa.

Titik persimpangan boleh ditandakan untuk isyarat perdagangan yang jelas.

Kelebihan

  • Menganalisis dalam jangka masa, menemui trend yang lebih besar
  • Garis TF yang lebih tinggi lebih stabil, mengelakkan isyarat palsu
  • Garis TF bawah lebih sensitif, trend menangkap berubah dengan cepat
  • Gabungan tempoh MA yang boleh disesuaikan
  • Tanda-tanda yang jelas di carta

Risiko

  • Peningkatan kerumitan dengan pelbagai jangka masa
  • Isyarat palsu TF rendah masih mungkin
  • Secara keseluruhan ketinggalan dengan sistem MA, mungkin terlepas entri terbaik
  • Penapisan terhad dengan sistem MA murni
  • Penyesuaian tempoh yang diperlukan untuk produk yang berbeza

Risiko boleh dikurangkan dengan:

  • Mengekalkan MAs TF yang lebih tinggi untuk arah trend yang kukuh
  • Menambah penunjuk lain untuk penapisan isyarat lanjut
  • Mengoptimumkan tempoh MA untuk kombinasi terbaik
  • Menyenangkan peraturan kemasukan seperti menambah corak candlestick

Arahan Peningkatan

Strategi ini boleh ditingkatkan dengan:

  1. Ujian lebih banyak gabungan tempoh MA untuk pengoptimuman

  2. Menambah pengesahan sekunder apabila crossover berlaku

    e.g. periksa momentum MACD

  3. Mengoptimumkan hentian untuk mengelakkan keluar awal

    Pertimbangkan Post123 bukti untuk memutuskan keluar

  4. Penapis yang berbeza untuk TF pendek dan panjang

    Lebih ketat untuk TF pendek, lebih santai untuk TF panjang

  5. Pertimbangkan set parameter yang berbeza untuk sesi yang berbeza

    Keadaan pasaran berbeza-beza mengikut sesi

Ringkasan

Strategi ini mengamati persilangan antara MAs beberapa bingkai masa untuk menentukan arah trend dan mendedahkan trend yang lebih besar. Ini menapis bunyi jangka pendek dan memberi tumpuan kepada pergerakan harga yang lebih besar. Walau bagaimanapun, cabaran seperti penyesuaian bingkai masa dan isyarat yang tertinggal wujud. Peningkatan boleh dibuat melalui pengujian balik dan pengoptimuman yang ketat untuk parameter yang kukuh, menambah penapis untuk pengesahan, pengesahan langsung untuk penambahbaikan berterusan mengikut maklum balas pasaran. Pembelajaran dan pengoptimuman yang berterusan adalah kunci kepada adaptiviti.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 7d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

//Run script on a long interval gives better result for e.g. 1 Day
//Plots The Majority of Moving Averages
//Defaults to Current Chart Time Frame --- But Can Be Changed to Higher Or Lower Time Frames
//2nd MA Capability with Show Crosses Feature
//study(title="CM_Ultimate_MA_MTF", shorttitle="CM_Ultimate_MA_MTF", overlay=true)
strategy("Stratergy CM_Ultimate_MA_MTF", shorttitle = "Stratergy CM_Ultimate_MA_MTF", overlay = true) 
//,default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//inputs
src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above",  defval="D")
len = input(20, title="Moving Average Length - LookBack Period")
atype = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc = input(true,title="Change Color Based On Direction?")
smoothe = input(2, minval=1, maxval=10, title="Color Smoothing - 1 = No Smoothing")
doma2 = input(false, title="Optional 2nd Moving Average")
len2 = input(50, title="Moving Average Length - Optional 2nd MA")
atype2 = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc2 = input(true,title="Change Color Based On Direction 2nd MA?")
warn = input(false, title="***You Can Turn On The Show Dots Parameter Below Without Plotting 2nd MA to See Crosses***")
warn2 = input(false, title="***If Using Cross Feature W/O Plotting 2ndMA - Make Sure 2ndMA Parameters are Set Correctly***")
sd = input(false, title="Show Dots on Cross of Both MA's")


res = useCurrentRes ? timeframe.period : resCustom
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : tema
//2nd Ma - hull ma definition
hullma2 = wma(2*wma(src, len2/2)-wma(src, len2), round(sqrt(len2)))
//2nd MA TEMA definition
sema1 = ema(src, len2)
sema2 = ema(sema1, len2)
sema3 = ema(sema2, len2)
stema = 3 * (sema1 - sema2) + sema3

avg2 = atype2 == 1 ? sma(src,len2) : atype2 == 2 ? ema(src,len2) : atype2 == 3 ? wma(src,len2) : atype2 == 4 ? hullma2 : atype2 == 5 ? vwma(src, len2) : atype2 == 6 ? rma(src,len2) : tema

out = avg 
out_two = avg2

out1 = security(syminfo.tickerid, res, out)
out2 = security(syminfo.tickerid, res, out_two)

ma_up = out1 >= out1[smoothe]
ma_down = out1 < out1[smoothe]

col = cc ? ma_up ? lime : ma_down ? red : aqua : aqua
col2 = cc2 ? ma_up ? lime : ma_down ? red : aqua : aqua

circleYPosition = out2
chk=col==red?1:0

if (not na(chk))
    if (chk[1]==1 and chk==0)
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    else
        strategy.exit("RsiLE")

    if (chk[1]==0 and chk==1)
        strategy.entry("RsiSE", strategy.short, comment="RsiLE")
    else
        strategy.exit("RsiSE")
        
plot(out1, title="Multi-Timeframe Moving Avg", style=line, linewidth=4, color = col)
plot(doma2 and out2 ? out2 : na, title="2nd Multi-TimeFrame Moving Average", style=circles, linewidth=4, color=col2)
plot(sd and cross(out1, out2) ? circleYPosition : na,style=cross, linewidth=5, color=yellow)



Lebih lanjut