
Ini adalah strategi perdagangan berdasarkan purata bergerak sederhana. Strategi ini menggunakan purata bergerak dengan panjang 17 untuk membandingkan dengan harga penutupan, melakukan lebih banyak ketika melintasi purata bergerak pada harga penutupan, dan melakukan kosong ketika melintasi.
Strategi ini menggunakan parameter berikut untuk mengira purata bergerak:
Berdasarkan parameter ini, fungsi getMAType (()) akan dikesan untuk mengira harga penutupan SMA 17 kitaran.
Kemudian bandingkan harga penutupan dengan purata bergerak:
Apabila harga penutupan melintasi purata bergerak dari bawah, ia menghasilkan isyarat melakukan lebih; apabila melintasi dari atas ke bawah, ia menghasilkan isyarat melakukan lebih.
Dalam kitaran pengkajian semula, apabila terdapat isyarat melakukan lebih, maka akan dibuka lebih, dan apabila terdapat isyarat melakukan kurang maka akan dibuka kosong.
Kelebihan terbesar strategi ini adalah bahawa pemikiran sangat mudah dan jelas. Hanya satu petunjuk untuk menilai perubahan trend dengan perubahan arahnya. Strategi ini mudah difahami, mudah dilaksanakan, sesuai untuk pelajar pemula.
Tambahan pula, purata bergerak adalah penunjuk jenis trend-following, yang dapat mengesan perubahan trend dengan berkesan dan mengelakkan gangguan oleh bunyi jangka pendek di pasaran.
Dengan penyesuaian parameter, ia boleh disesuaikan dengan pelbagai kitaran dan pelbagai jenis.
Pertama, strategi ini hanya berdasarkan satu indikator, dan penghakiman yang lebih sederhana mungkin akan menghasilkan lebih banyak isyarat yang salah.
Selain itu, strategi ini adalah sistem untuk mengesan trend dan tidak boleh berfungsi dengan baik dalam pasaran yang stabil dan bergolak.
Tambahan pula, tiada set stop loss, dan terdapat risiko peningkatan kerugian.
Penyelesaiannya adalah menggabungkan indikator lain, mengoptimumkan kombinasi parameter, mengurangkan isyarat salah. Tetapkan hentian hentian, mengawal risiko, dan mengoptimumkan penarikan balik.
Berikut adalah beberapa aspek yang boleh digunakan untuk mengoptimumkan strategi:
Menyesuaikan parameter purata bergerak, mengoptimumkan bilangan kitaran. Sebagai contoh, berubah menjadi 30 kitaran atau 50 kitaran dan sebagainya.
Cuba pelbagai jenis purata bergerak, seperti EMA, VIDA, dan lain-lain. Mereka mempunyai sensitiviti yang berbeza terhadap perubahan harga.
Menambah gabungan indikator lain. Sebagai contoh, gabungan dengan MACD, dapat menilai kekuatan. Atau gabungan dengan RSI, mengurangkan isyarat yang salah.
Peningkatan mekanisme penangguhan. Tetapkan peratusan tetap atau penangguhan bergerak ATR. Kawalan kerugian tunggal.
Menambah mekanisme penangguhan. Menetapkan peratusan keuntungan sasaran. Memaksimumkan keuntungan
Pengoptimuman ini dapat menstabilkan prestasi strategi dan mengelakkan penarikan balik yang berlebihan.
Artikel ini menganalisis strategi perdagangan mudah berdasarkan purata bergerak 17 kitaran. Sumber isyarat strategi mudah, mudah difahami dan dilaksanakan, termasuk dalam sistem pengesanan trend yang tipikal. Dengan menafsirkan strategi secara mendalam, analisis kelebihan dan risikonya, dan memberikan pemikiran pengoptimuman pelbagai dimensi.
/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Simple 17 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
///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)
///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) =>
res = sma(close, 1)
if maType == "ema"
res := ema(sourceType, maLen)
if maType == "sma"
res := sma(sourceType, maLen)
if maType == "swma"
res := swma(sourceType)
if maType == "wma"
res := wma(sourceType, maLen)
if maType == "vwma"
res := vwma(sourceType, maLen)
if maType == "rma"
res := rma(sourceType, maLen)
res
MA = getMAType(maType, source, length)
/////////////// Strategy ///////////////
long = close > MA
short = close < MA
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("L", strategy.long, when=long_signal)
strategy.entry("S", strategy.short, when=short_signal)
/////////////// Plotting ///////////////
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)