Strategi crossover purata bergerak adalah strategi perdagangan kuantitatif berdasarkan purata bergerak mudah (SMA). Ia menghasilkan isyarat beli dan jual apabila crossover SMA tempoh yang berbeza berlaku.
Secara khusus, strategi ini mengira SMA 9 tempoh dan 45 tempoh. Apabila harga melintasi di atas kedua-dua garis SMA, isyarat beli dihasilkan. Apabila harga melintasi di bawah kedua-dua garis, isyarat jual dicetuskan.
Logik teras strategi ini adalah berdasarkan pada prinsip
Secara khusus, strategi ini menggunakan purata bergerak mudah 9 tempoh dan 45 tempoh. Garis 9 tempoh mewakili trend jangka pendek manakala garis 45 tempoh menangkap pergerakan jangka panjang. Apabila harga melintasi di atas kedua-dua garis SMA, ia menunjukkan harga berada di saluran menaik baik jangka pendek dan jangka panjang, oleh itu mencetuskan entri panjang. Persalinan bertentangan menunjukkan kelemahan momentum menaik dan meminta isyarat keluar.
Dari perspektif kod, strategi ini mula-mula mengira nilai SMA 9 tempoh dan 45 tempoh. Kemudian ia menggunakan fungsi ta.crossover dan ta.crossunder untuk mengesan salib emas dan salib mati antara dua garis MA. Apabila isyarat beli dan jual dicetuskan, fungsi plot bentuk menggambar segitiga dan segitiga terbalik pada carta harga.
Di samping itu, logik stop-loss dilaksanakan untuk menguruskan keluar perdagangan. Khususnya, harga tinggi dan rendah bar sebelumnya diekstrak sebagai harga stop-loss selepas membuka perdagangan baru. Ini membolehkan strategi untuk mengunci keuntungan dan mencegah kerugian besar.
Setup purata bergerak berganda menangkap perubahan trend jangka menengah hingga panjang sambil menapis bunyi jangka pendek, meningkatkan kualiti isyarat.
Mekanisme stop-loss berkesan mengawal risiko dan kunci dalam keuntungan.
Logik yang mudah dan mudah dilaksanakan, sesuai untuk pemula.
Penggunaan modal yang tinggi untuk keuntungan kompaun.
Strategi MA berganda cenderung untuk menghasilkan whipsaws dan isyarat yang tidak sah semasa pasaran yang bergolak.
Penempatan stop loss konservatif tidak dapat mengesan trend dengan berkesan.
Pemilihan parameter yang kurang optimum boleh membawa kepada perdagangan berlebihan atau kekerapan perdagangan yang tidak mencukupi.
Tidak dapat menyesuaikan diri dengan perubahan besar trend.
Penyelesaian:
Mengoptimumkan parameter MA untuk mengurangkan isyarat palsu
Melaksanakan hentian dinamik mengikut trend
Tambah penapis menggunakan penunjuk lain
Pengecualian manual di sekitar pembalikan utama
Penambahbaikan lanjut untuk strategi:
Gunakan MAs adaptif atau eksponensial untuk menangkap trend dengan lebih baik.
Tambah penapis turun naik untuk mengelakkan isyarat palsu semasa pasaran berkisar.
Melakukan pengoptimuman parameter untuk kombinasi parameter terbaik.
Menggabungkan mekanisme trend-mengikuti ke dalam logik stop-loss.
Tambah analisis sokongan-tantangan untuk mengelakkan isyarat di sekitar tahap utama.
Memanfaatkan pembelajaran mesin untuk lebih menapis kualiti isyarat.
Sistem crossover purata bergerak adalah pendekatan trend yang mudah namun berkesan. Dengan menapis bunyi bising dan mengesan trend jangka menengah, ia menghasilkan isyarat berkualiti. Dengan kerugian berhenti yang betul, ia membolehkan perdagangan trend yang dikendalikan risiko. Logik yang mudah juga menjadikannya ideal untuk pemula untuk diamalkan. Pengoptimuman lanjut dapat mengintegrasikan strategi ini sebagai komponen yang berkesan dari sistem kuantum keseluruhan.
/*backtest start: 2022-12-15 00:00:00 end: 2023-12-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("SMA Crossover Strategy", overlay=true) // Input parameters fast_length = input(9, title="Fast SMA Length") slow_length = input(45, title="Slow SMA Length") // Calculate moving averages fast_sma = ta.sma(close, fast_length) slow_sma = ta.sma(close, slow_length) // Buy condition buy_condition = ta.crossover(close, fast_sma) and ta.crossover(close, slow_sma) // Sell condition sell_condition = ta.crossunder(close, fast_sma) and ta.crossunder(close, slow_sma) // Calculate stop loss levels prev_low = request.security(syminfo.tickerid, "1D", low[1], lookahead=barmerge.lookahead_on) prev_high = request.security(syminfo.tickerid, "1D", high[1], lookahead=barmerge.lookahead_on) // Plot signals on the chart plotshape(buy_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) plotshape(sell_condition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small) // Strategy exit conditions long_stop_loss = sell_condition ? prev_low : na short_stop_loss = buy_condition ? prev_high : na strategy.exit("Long Exit", from_entry="Long", when=sell_condition, stop=long_stop_loss) strategy.exit("Short Exit", from_entry="Short", when=buy_condition, stop=short_stop_loss) strategy.entry("Long", strategy.long, when=buy_condition) strategy.entry("Short", strategy.short, when=sell_condition)