Strategi Dagangan Crossover Purata Bergerak Berganda adalah strategi perdagangan kuantitatif yang menggunakan crossover purata bergerak untuk menentukan isyarat kemasukan dan keluar.
Logik teras strategi ini adalah untuk mengesan 2 purata bergerak (10 hari dan 200 hari) merentasi 3 bingkai masa (180 minit, 60 minit, 120 minit). Apabila purata bergerak yang lebih cepat melintasi di atas purata bergerak yang lebih perlahan, crossover emas dihasilkan, yang menunjukkan instrumen berada dalam trend menaik. Apabila purata bergerak yang lebih cepat melintasi di bawah yang lebih perlahan, crossover kematian dihasilkan, yang menunjukkan trend menurun.
Pertama, purata bergerak 10 hari dan 200 hari dikira secara berasingan untuk jangka masa 180 minit dan 60 minit. Apabila MA 10 hari pada jangka masa 180 minit melintasi di atas MA 200 hari, isyarat persilangan emas dihasilkan. Apabila melintasi di bawah, isyarat persilangan kematian dihasilkan. Ini memberikan isyarat perdagangan kitaran pantas.
Seterusnya, strategi memperkenalkan MA 200 hari pada jangka masa 120 minit sebagai purata bergerak
Sebagai contoh, apabila penyeberangan emas berlaku pada kitaran 180 minit, hanya jika MA 60 minit 200 hari berada di atas MA 120 minit 200 hari, strategi akan menjadi panjang. Posisi panjang hanya akan dibuka apabila syarat ini dipenuhi. Sebaliknya, jika MA 60 minit 200 hari berada di bawah satu 120 minit, tiada kedudukan panjang akan diambil.
Ringkasnya, dengan membandingkan hubungan purata bergerak dalam jangka masa yang berbeza, strategi ini mewujudkan pelbagai lapisan penapisan untuk meningkatkan kebolehpercayaan isyarat, menjadikannya jenis strategi perdagangan berasaskan penapisan yang biasa.
Penambahbaikan ketepatan melalui pengesahan pelbagai jangka masa. Berbanding dengan isyarat jangka masa tunggal, menggunakan MAs dari 180/60/120 minit secara drastik mengurangkan isyarat palsu dan meningkatkan kualiti isyarat perdagangan.
Frekuensi operasi yang munasabah. Tidak seperti strategi frekuensi tinggi, strategi ini berdagang kurang kerap, mengelakkan keperluan untuk memantau pasaran secara berterusan. Lebih sesuai untuk perdagangan manual.
Mudah dan mudah difahami. Dengan hanya menggunakan purata bergerak asas tanpa logik yang kompleks, strategi ini mempunyai halangan yang rendah untuk masuk dan mudah difahami untuk pemula.
Dioptimumkan merentasi tempoh dan parameter. Jenis MA dan tempoh yang digunakan boleh diselaraskan. Set parameter yang berbeza boleh diuji untuk produk dan rejimen pasaran yang berbeza.
Tanda ketinggalan dan tindak balas yang perlahan. purata bergerak teras mempunyai ketinggalan oleh reka bentuk dan sering gagal menangkap pembalikan trend yang cepat.
Frekuensi whipsaw yang tinggi dalam pasaran yang berkisar. Apabila pasaran berkisar, hubungan MA boleh bersilang dengan kerap, menyebabkan kemasukan yang berlebihan dan memicu kerugian berhenti, meningkatkan kos dan risiko kerugian.
bahaya overfitting dari optimasi parameter. alpha terutamanya berasal dari penyesuaian parameter berdasarkan set data yang terhad. ini mungkin membawa kepada masalah over-optimization dan overfitting.
Penyelesaian:
Masih ada ruang untuk pengoptimuman lanjut:
Cuba kombinasi jangka masa yang berbeza dan menyesuaikan tempoh MA untuk mencari parameter yang lebih baik, melalui pengoptimuman kekuatan kasar dan teknik pembelajaran mesin.
Menggabungkan analisis trend jumlah dan jangka masa yang lebih tinggi untuk pengesahan isyarat tambahan, contohnya mengelakkan entri semasa jumlah dagangan yang rendah.
Ramalan corak lengkung lebih awal menggunakan model pembelajaran mendalam seperti RNN untuk membantu pengambilan keputusan.
Memperkenalkan purata bergerak adaptif untuk meningkatkan logik penapisan. Sesuaikan tempoh MA secara dinamik untuk mengurangkan entri semasa ketidakpastian pasaran.
Strategi Dagangan Crossover Purata Bergerak Berganda membandingkan hubungan purata bergerak merentasi pelbagai bingkai masa untuk menapis isyarat palsu, meningkatkan kebolehpercayaan isyarat.
/*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")