
Strategi pengesanan purata bergerak adalah strategi pengesanan trend berdasarkan purata bergerak sederhana. Strategi ini menggunakan purata bergerak sederhana dengan panjang 200 hari untuk menentukan arah trend harga, melakukan lebih banyak apabila harga melintasi purata bergerak di atas, dan melakukan kosong apabila harga melintasi purata bergerak di bawah, untuk mencapai trend pengesanan.
Strategi ini berdasarkan kepada prinsip-prinsip berikut:
Strategi ini digunakan untuk menentukan arah trend dengan menggunakan purata bergerak, dan melakukan operasi terbalik tepat pada masanya apabila garis rata bertukar, untuk mendapatkan keuntungan dari trend.
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Mengenai risiko, terdapat beberapa aspek yang boleh dioptimumkan dan diperbaiki:
Strategi ini boleh dioptimumkan dengan cara berikut:
Mengoptimumkan parameter kitaran untuk purata bergerak, mencari kombinasi parameter yang optimum. Kaedah pengoptimuman parameter seperti Analisis Walk Forward boleh digunakan.
Menambah purata bergerak jangka pendek, membentuk strategi garis rata-rata, sambil menjejaki trend jangka pendek.
Gabungan dengan penunjuk trend seperti MACD dan lain-lain, meningkatkan keupayaan untuk mengenal pasti perubahan trend.
Menyertai mekanisme penangguhan kerugian, seperti menjejaki penangguhan kerugian, penangkapan penangguhan kerugian, dan lain-lain, untuk mengawal kerugian tunggal.
Melakukan ujian replikasi, strategi ujian dalam pelbagai jenis dan tempoh yang berbeza untuk meningkatkan kestabilan.
Menggunakan kaedah pembelajaran mesin dan lain-lain untuk menyesuaikan parameter dan mengoptimumkan strategi.
Strategi pengesanan purata bergerak adalah strategi pengesanan trend yang mudah dan praktikal, idea yang jelas, mudah dilaksanakan, dan dapat menangkap peluang trend. Tetapi strategi ini juga mempunyai beberapa masalah, seperti tidak sensitif terhadap penyesuaian jangka pendek, kemampuan kawalan risiko yang lemah, dan sebagainya.
/*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)