Strategi perdagangan lintas rata-rata bergerak ganda

Penulis:ChaoZhangTanggal: 2024-01-29 15:11:58
Tag:

img

Gambaran umum

Strategi Trading Dual Moving Average Crossover adalah strategi perdagangan kuantitatif yang menggunakan crossover rata-rata bergerak untuk menentukan sinyal masuk dan keluar.

Logika Strategi

Logika inti dari strategi ini adalah untuk melacak 2 rata-rata bergerak (10 hari dan 200 hari) di 3 kerangka waktu (180 menit, 60 menit, 120 menit). Ketika rata-rata bergerak yang lebih cepat melintasi di atas rata-rata bergerak yang lebih lambat, crossover emas dihasilkan, yang menunjukkan instrumen berada dalam tren naik. Ketika rata-rata bergerak yang lebih cepat melintasi di bawah yang lebih lambat, crossover kematian dihasilkan, yang menunjukkan downtrend.

Pertama, rata-rata bergerak 10 hari dan 200 hari dihitung secara terpisah untuk jangka waktu 180 menit dan 60 menit. Ketika MA 10 hari pada jangka waktu 180 menit melintasi di atas MA 200 hari, sinyal crossover emas dihasilkan. Ketika melintasi di bawah, sinyal crossover kematian dihasilkan. Ini memberikan sinyal perdagangan siklus cepat.

Selanjutnya, strategi memperkenalkan MA 200 hari pada jangka waktu 120 menit sebagai mengontrol moving average. Hanya ketika crossover terjadi pada siklus 180/60 menit, dengan memeriksa apakah MA 200 hari 60 menit di atas atau di bawah MA 200 hari 120 menit, akan memutuskan apakah perdagangan harus ditempatkan untuk menyaring sinyal palsu.

Sebagai contoh, ketika golden crossover terjadi pada siklus 180 menit, hanya jika 60-menit 200 hari MA di atas 120-menit 200 hari MA, strategi akan pergi panjang. Posisi panjang hanya akan dibuka ketika kondisi ini terpenuhi. Sebaliknya, jika 60-menit 200 hari MA di bawah 120-menit satu, tidak ada posisi panjang akan diambil.

Singkatnya, dengan membandingkan hubungan rata-rata bergerak di berbagai kerangka waktu, strategi ini menciptakan beberapa lapisan penyaringan untuk meningkatkan keandalan sinyal, menjadikannya jenis umum dari strategi perdagangan berbasis filter.

Keuntungan

  • Keakuratan yang lebih baik melalui konfirmasi multi-frame. Dibandingkan dengan sinyal timeframe tunggal, menggunakan MAs dari 180/60/120 menit secara drastis mengurangi sinyal palsu dan meningkatkan kualitas sinyal perdagangan.

  • Frekuensi operasi yang wajar. Tidak seperti strategi frekuensi tinggi, strategi ini diperdagangkan lebih jarang, menghindari kebutuhan untuk memantau pasar secara terus menerus. Lebih cocok untuk perdagangan manual.

  • Dengan hanya menggunakan rata-rata bergerak dasar tanpa logika yang kompleks, strategi ini memiliki hambatan masuk yang rendah dan mudah dipahami bagi pemula.

  • Dioptimalkan di berbagai periode dan parameter. Jenis MA dan periode yang digunakan dapat disesuaikan. Set parameter yang berbeda dapat diuji untuk produk dan rezim pasar yang berbeda.

Risiko

  • Indikasi keterlambatan dan reaksi lambat. rata-rata bergerak inti memiliki keterlambatan oleh desain dan sering gagal menangkap pembalikan tren cepat.

  • Frekuensi whipsaw yang tinggi di pasar yang berkisar. Ketika pasar berkisar, hubungan MA dapat bersilang dengan sangat sering, menyebabkan entri yang berlebihan dan pemicu stop loss, meningkatkan biaya dan risiko kerugian.

  • Risiko overfitting dari optimasi parameter. alpha terutama berasal dari tuning parameter berdasarkan dataset terbatas. ini kemungkinan mengarah pada masalah over-optimization dan overfitting.

Solusi:

  • Singkatkan periode MA untuk reaksi yang lebih cepat
  • Tambahkan filter untuk menghindari entri yang berlebihan selama pasar berantakan
  • Uji ketahanan pada produk dan rentang waktu yang berbeda

Arahan Optimasi

Masih ada ruang untuk optimasi lebih lanjut:

  • Cobalah kombinasi jangka waktu yang berbeda dan atur periode MA untuk menemukan parameter yang lebih baik, melalui optimasi kekuatan kasar dan teknik pembelajaran mesin.

  • Masukkan analisis tren volume dan jangka waktu yang lebih tinggi untuk konfirmasi sinyal tambahan, misalnya hindari entri selama volume perdagangan rendah.

  • Memprediksi pola kurva lebih awal menggunakan model pembelajaran mendalam seperti RNN untuk membantu pengambilan keputusan.

  • Memperkenalkan rata-rata bergerak adaptif untuk meningkatkan logika penyaringan.

Kesimpulan

Strategi Trading Dual Moving Average Crossover membandingkan hubungan rata-rata bergerak di beberapa kerangka waktu untuk menyaring sinyal palsu, meningkatkan keandalan sinyal.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "ALGO 3-1-2", title="ALGO 3h, 1h, 2h", overlay=true)

bool startLONGBOTandDEAL = false
bool stopLONGBOTandDEAL = false
bool openLONG = false
bool closeLONG = false
bool startSHORTBOTandDEAL = false
bool stopSHORTBOTandDEAL = false
bool openSHORT = false
bool closeSHORT = false

MA1Period = ema(close, 10)
MA2Period = ema(close, 200)
MA3Period = ema(close, 200)

MA1 = security(syminfo.tickerid, "180", MA1Period)
MA2 = security(syminfo.tickerid, "60", MA2Period)
MA3 = security(syminfo.tickerid, "120", MA3Period)

MA12Crossover = crossover(MA1, MA2)
MA12Crossunder = crossunder(MA1, MA2)
MA23Crossover = crossover(MA2, MA3)
MA23Crossunder = crossunder(MA2, MA3)

if MA23Crossover
    startLONGBOTandDEAL := true //stop shortBOT and DEAL code in the TV alert as well, probably stop first w/ a delay on startlong
    lblBull = label.new(bar_index, na, ' BULL Time Open LONG', color=color.blue, textcolor=color.black, style=label.style_label_up, size=size.small)
    label.set_y(lblBull, MA2)  
    strategy.close("go Short")
    strategy.entry("go Long", strategy.long, comment="go Long")
if MA23Crossunder
    //not sure if i should set alert for stop and start each bot, or just put start appropriate bot and stop its opposite in the same alert.
    startSHORTBOTandDEAL := true
    lblBull = label.new(bar_index, na, ' BEAR Time - Open SHORT', color=color.orange, textcolor=color.black, style=label.style_label_down, size=size.small)
    label.set_y(lblBull, MA2)
    strategy.close("go Long")
    strategy.entry("go Short", strategy.short, comment="go Short")
if MA12Crossover
    if MA2 >= MA3
        openLONG := true
        lup1 = label.new(bar_index, na, ' OPEN LONG ', color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.entry("go Long", strategy.long, comment="go Long")
    if MA2 <= MA3
        closeSHORT := true
        lup1 = label.new(bar_index, na, ' CLOSE SHORT ', color=color.gray, textcolor=color.black, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.close("go Short")
    
if MA12Crossunder
    if MA2 >= MA3
        closeLONG := true
        lun1 = label.new(bar_index, na, ' CLOSE LONG ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.close("go Long")
    if MA2 <= MA3
        openSHORT := true
        lun1 = label.new(bar_index, na, ' OPEN SHORT ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.entry("go Short", strategy.short, comment="go Short")


plot(MA1, color=color.green, linewidth=2, title="MA1")
plot(MA2, color=color.yellow, linewidth=3, title="MA2")
plot(MA3, color=color.red, linewidth=4, title="MA3")


alertcondition(startLONGBOTandDEAL, title="Start LONG BOT and DEAL", message="Start Long Bot and Deal")
alertcondition(stopLONGBOTandDEAL, title="Stop LONG BOT and DEAL", message="Stop Long Bot and Deal")
alertcondition(openLONG, title="Open LONG DEAL", message="Open Long Deal")
alertcondition(closeLONG, title="Close LONG DEAL", message="Close Long Deal")
alertcondition(stopSHORTBOTandDEAL, title="Stop SHORT BOT and DEAL", message="Stop Short Bot and Deal")
alertcondition(openSHORT, title="Open SHORT DEAL", message="Open Short Deal")
alertcondition(closeSHORT, title="Close SHORT DEAL", message="Close Short Deal")

Lebih banyak