
Strategi Moving Average Crossover adalah strategi perdagangan kuantitatif yang berdasarkan purata bergerak sederhana. Strategi ini menghasilkan isyarat beli dan jual apabila mereka bersilang dengan mengira purata bergerak sederhana dari pelbagai kitaran.
Secara khusus, strategi ini mengira purata bergerak sederhana pada garis 9 dan 45 hari. Apabila harga melintasi garis 9 dan 45 hari, ia menghasilkan isyarat beli; apabila harga melintasi garis 9 dan 45 hari, ia menghasilkan isyarat jual.
Logik teras strategi ini adalah berdasarkan pada prinsip forks dan dead forks moving averages. Moving averages dapat menyaring bunyi pasaran dengan berkesan dan menunjukkan perubahan dalam trend besar. Apabila harga di atas rata-rata jangka pendek melintasi rata-rata jangka panjang, ia menunjukkan bahawa ia mula memasuki trend naik. Apabila harga di bawah rata-rata jangka pendek melintasi rata-rata jangka panjang, ia menunjukkan bahawa harga mula memasuki trend menurun.
Khususnya, strategi ini menggunakan purata bergerak sederhana pada garis 9 dan 45 ̨ garis 9 mewakili trend jangka pendek, garis 45 mewakili trend jangka panjang ̨ apabila harga melintasi garis 9 dan 45 ̨, ini menunjukkan bahawa harga saham berada di saluran naik dalam jangka pendek dan jangka panjang, dan oleh itu menghasilkan isyarat beli; apabila harga melintasi garis 9 dan 45 ̨, ini menunjukkan bahawa kenaikan harga saham perlahan-lahan melemah, dan oleh itu menghasilkan isyarat menjual ̨
Dari sudut logik kod, strategi ini mula-mula mengira purata bergerak sederhana pada garis 9 dan 45 dan kemudian menilai garisan emas dan garisan mati pada garis rata melalui fungsi ta.crossover dan ta.crossunder. Untuk menghasilkan isyarat beli dan jual, gunakan fungsi plotshape untuk memetakan grafik isyarat segitiga dan segitiga terbalik pada peta garis K.
Selain itu, strategi ini juga menetapkan logik hentian kerugian untuk kedudukan panjang dan pendek. Khususnya, selepas membuka kedudukan, harga tertinggi dan terendah K baris akan diambil sebagai harga hentian kerugian. Ini dapat mengunci keuntungan dan mengelakkan kerugian yang terlalu besar.
Kaedah pencegahan:
Strategi ini masih boleh dioptimumkan lagi:
Menggunakan purata bergerak beradaptasi atau purata bergerak indeks dapat menangkap perubahan trend dengan lebih baik
Meningkatkan penapis isyarat seperti penunjuk kadar turun naik untuk mengelakkan isyarat yang salah dalam keadaan gegaran.
Menggunakan kaedah pengoptimuman parameter untuk mencari kombinasi parameter terbaik.
Menambah mekanisme pengesanan trend dalam logik stop loss, membolehkan garis stop loss untuk mengikuti harga secara fleksibel.
Meningkatkan penilaian terhadap sokongan dan rintangan pada tahap besar untuk mengelakkan isyarat yang salah di kawasan harga utama.
Dengan menggunakan model pembelajaran mesin, kualiti isyarat akan ditapis lebih lanjut.
Strategi persilangan garis rata adalah strategi trend-following yang mudah dan praktikal. Ia dapat menyaring kebisingan dengan berkesan, menangkap perubahan trend harga jangka menengah dan jangka panjang. Bersama dengan logik stop loss yang sesuai, ia dapat melakukan perdagangan trend berdasarkan kawalan risiko.
/*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)