Sumber daya yang dimuat... Pemuatan...

Strategi perdagangan rata-rata bergerak multi-frame

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

Gambaran umum

Strategi ini menggunakan crossover rata-rata bergerak antara kerangka waktu yang berbeda untuk menghasilkan sinyal perdagangan. Ini memungkinkan mengamati MAs kerangka waktu yang lebih lama pada grafik saat ini untuk mendeteksi tren yang lebih besar. Ini termasuk dalam strategi tren antar kerangka waktu berikut.

Logika Strategi

Strategi ini menggunakan dua rata-rata bergerak yang dihitung pada kerangka waktu yang terpisah.

Misalnya pada grafik 15 menit menggunakan 20MA dan 50MA:

  • 20MA dihitung pada bar 15min saat ini
  • 50MA dihitung pada batang harian

Ketika 15min 20MA melintasi di atas 50MA harian, itu akan panjang.

Hal ini mencapai efek mengamati tren jangka waktu yang lebih lama pada periode saat ini.

Titik persimpangan dapat ditandai untuk sinyal perdagangan yang jelas.

Keuntungan

  • Menganalisis jangka waktu, menemukan tren yang lebih besar
  • Jalur TF yang lebih tinggi lebih stabil, menghindari sinyal palsu
  • Garis TF bawah lebih sensitif, tren menangkap berubah dengan cepat
  • Kombinasi periode MA yang dapat disesuaikan
  • Sinyal yang ditandai jelas pada grafik

Risiko

  • Meningkatnya kompleksitas dengan beberapa kerangka waktu
  • Sinyal palsu TF rendah masih mungkin
  • Secara keseluruhan tertinggal dengan sistem MA, mungkin kehilangan entri terbaik
  • Penyaringan terbatas dengan sistem MA murni
  • Penyesuaian periode yang diperlukan untuk produk yang berbeda

Risiko dapat dikurangi dengan:

  • Mempertahankan TF MAs yang lebih tinggi untuk arah tren yang kuat
  • Menambahkan indikator lain untuk penyaringan sinyal lebih lanjut
  • Mengoptimalkan periode MA untuk kombinasi terbaik
  • Menyenangkan aturan masuk seperti menambahkan pola candlestick

Arah Peningkatan

Strategi dapat ditingkatkan dengan:

  1. Pengujian lebih banyak kombinasi periode MA untuk optimasi

  2. Menambahkan konfirmasi sekunder ketika crossover terjadi

    misalnya memeriksa momentum MACD

  3. Mengoptimalkan pemberhentian untuk menghindari keluarnya sebelum waktunya

    Pertimbangkan Post123 bukti untuk memutuskan keluar

  4. Filter yang berbeda untuk TF pendek dan panjang

    Lebih ketat untuk TF pendek, lebih santai untuk TF panjang

  5. Pertimbangkan set parameter yang berbeda untuk sesi yang berbeda

    Kondisi pasar bervariasi menurut sesi

Ringkasan

Strategi ini mengamati crossover antara MAs dari beberapa kerangka waktu untuk menentukan arah tren dan mengungkap tren yang lebih besar. Ini menyaring kebisingan jangka pendek dan berfokus pada pergerakan harga yang lebih besar. Namun, tantangan seperti tuning kerangka waktu dan sinyal tertinggal ada. Peningkatan dapat dilakukan melalui backtesting dan pengoptimalan yang ketat untuk parameter yang kuat, menambahkan filter untuk konfirmasi, validasi langsung untuk perbaikan berkelanjutan sesuai dengan umpan balik pasar. Pembelajaran dan pengoptimalan yang gigih adalah kunci untuk adaptivitas.


/*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 banyak