Strategi Dagangan Crossover Dengan Purata Bergerak Berganda

Penulis:ChaoZhang, Tarikh: 2024-01-29 15:11:58
Tag:

img

Ringkasan

Strategi Dagangan Crossover Purata Bergerak Berganda adalah strategi perdagangan kuantitatif yang menggunakan crossover purata bergerak untuk menentukan isyarat kemasukan dan keluar.

Logika Strategi

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 pengendalian. Hanya apabila persilangan berlaku pada kitaran 180/60 minit, dengan memeriksa sama ada MA 200 hari 60 minit di atas atau di bawah MA 200 hari 120 minit, akan memutuskan sama ada dagangan harus diletakkan untuk menapis isyarat palsu.

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.

Kelebihan

  • 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.

Risiko

  • 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:

  • Memendekkan tempoh MA untuk tindak balas yang lebih cepat
  • Tambah penapis untuk mengelakkan kemasukan berlebihan semasa pasaran bergelora
  • Uji ketahanan untuk produk dan jangka masa yang berbeza

Arahan pengoptimuman

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.

Kesimpulan

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")

Lebih lanjut