Strategi pengesanan purata bergerak adalah strategi yang mengikuti trend berdasarkan purata bergerak mudah. Ia menggunakan purata bergerak mudah 200 hari untuk menentukan arah trend harga. Apabila harga melintasi di atas purata bergerak, ia pergi panjang. Apabila harga melintasi di bawah purata bergerak, ia pergi pendek. Strategi ini mengesan trend untuk keuntungan.
Strategi ini berdasarkan prinsip-prinsip berikut:
Strategi ini mengesan trend dengan bergerak arah purata dan membuat perdagangan terbalik apabila persilangan MA berlaku, untuk mendapat keuntungan daripada trend.
Strategi ini mempunyai kelebihan berikut:
Terdapat juga beberapa risiko:
Risiko boleh ditangani melalui pengoptimuman berikut:
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Mengoptimumkan parameter tempoh MA menggunakan kaedah seperti Walk Forward Analysis untuk mencari parameter yang optimum.
Tambah MA jangka pendek untuk mengesan kedua-dua trend jangka panjang dan jangka pendek.
Menggabungkan penunjuk trend seperti MACD untuk meningkatkan pengenalan pembalikan trend.
Tambah mekanisme stop loss seperti trailing stop loss untuk mengawal kerugian perdagangan tunggal.
Ujian ketahanan pada produk dan tempoh masa yang berbeza.
Gunakan pembelajaran mesin untuk pengoptimuman adaptif parameter.
Strategi pengesanan purata bergerak adalah strategi yang mudah dan praktikal mengikuti trend. Ia mempunyai logika yang jelas dan mudah dilaksanakan untuk menangkap trend. Tetapi ia juga mempunyai beberapa kelemahan seperti tidak sensitif terhadap pembetulan jangka pendek dan kawalan risiko yang lemah. Kita boleh mengoptimumkan strategi dari pelbagai aspek untuk menjadikannya lebih kukuh, lebih parameter dan dengan pengurusan risiko yang lebih kuat. Secara keseluruhan, strategi pengesanan purata bergerak mempunyai nilai aplikasi yang baik dan merupakan konsep perdagangan trend penting dalam perdagangan kuantitatif.
/*backtest start: 2023-09-19 00:00:00 end: 2023-10-19 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("MA X 200 BF", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0) /////////////// Time Frame /////////////// testStartYear = input(2012, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// MA 200 ///////////// slowMA = sma(close, input(200)) /////////////// Strategy /////////////// long = close > slowMA short = close < slowMA last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) /////////////// Execution /////////////// if testPeriod() strategy.entry("Long Entry", strategy.long, when=long_signal) strategy.entry("Short Entry", strategy.short, when=short_signal) strategy.exit("Long Ex", "Long Entry") strategy.exit("Short Ex", "Short Entry") /////////////// Plotting /////////////// plot(slowMA, color = long ? color.lime : color.red, linewidth=2) bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80) bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)