Strategi Trading Dual Moving Average Crossover adalah strategi perdagangan kuantitatif yang menggunakan crossover rata-rata bergerak untuk menentukan sinyal masuk dan keluar.
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
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.
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.
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:
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.
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")