
Artikel ini membahas tentang strategi trading yang didasarkan pada moving average sederhana. Strategi ini menggunakan moving average dengan panjang 17 untuk membandingkan dengan harga close out, melakukan over saat harga close out melewati moving average, dan melakukan over saat crossing.
Strategi ini menggunakan parameter berikut untuk menghitung moving average:
Berdasarkan parameter ini, fungsi getMAType (() akan dihubungi untuk menghitung harga penutupan SMA selama 17 siklus.
Kemudian bandingkan hubungan harga close out dengan moving average:
Ketika harga penutupan melewati moving average dari bawah, menghasilkan sinyal melakukan lebih banyak; ketika melewati dari atas ke bawah, menghasilkan sinyal melakukan lebih sedikit.
Dalam periode pengamatan ulang, jika terjadi sinyal melakukan lebih banyak, maka akan dibuka lebih banyak posisi, dan jika terjadi sinyal melakukan lebih sedikit maka akan dibuka posisi kosong.
Keuntungan terbesar dari strategi ini adalah bahwa ide sangat sederhana dan jelas. Hanya satu indikator untuk menilai perubahan tren dengan pergeseran arahnya. Strategi ini mudah dimengerti, mudah diterapkan, dan cocok untuk pemula.
Selain itu, Moving Average adalah indikator jenis trend tracker yang dapat secara efektif melacak perubahan tren dan menghindari gangguan dari kebisingan jangka pendek di pasar.
Dengan penyesuaian parameter, dapat disesuaikan dengan siklus yang berbeda dan varietas yang berbeda.
Pertama, strategi ini hanya didasarkan pada satu indikator, dan penghakiman yang lebih sederhana dapat menghasilkan lebih banyak sinyal yang salah.
Dan, strategi ini adalah sistem pelacakan tren yang tidak dapat bekerja dengan baik di pasar yang stabil dan bergejolak.
Selain itu, tidak ada stop loss yang ditetapkan, ada risiko peningkatan kerugian.
Solusinya adalah menggabungkan indikator lainnya, mengoptimalkan kombinasi parameter, mengurangi sinyal yang salah. Atur stop loss, kendalikan risiko, dan optimalkan penarikan.
Beberapa aspek yang dapat digunakan sebagai ide untuk mengoptimalkan strategi:
Menyesuaikan parameter moving average, mengoptimalkan jumlah siklus. Misalnya, mengubahnya menjadi 30 siklus atau 50 siklus dan sebagainya.
Cobalah berbagai jenis moving average, seperti EMA, VIDA, dan lain-lain. Mereka memiliki sensitivitas yang berbeda terhadap perubahan harga.
Menambahkan kombinasi dengan indikator lain. Misalnya, dengan MACD, Anda dapat menilai kekuatan. Atau dengan RSI, Anda dapat mengurangi sinyal yang salah.
Meningkatkan mekanisme stop loss. Menetapkan stop loss bergerak dengan persentase tetap atau nilai ATR. Mengontrol kerugian tunggal.
Menambahkan mekanisme penangguhan. Menetapkan target persentase keuntungan. Memaksimalkan keuntungan.
Optimisasi ini dapat membuat kinerja strategi lebih stabil dan menghindari penarikan yang berlebihan.
Artikel ini menganalisis strategi perdagangan sederhana berdasarkan rata-rata bergerak 17 periode. Sumber sinyal strategi sederhana, mudah dipahami dan diimplementasikan, termasuk dalam sistem pelacakan tren yang khas. Dengan penafsiran mendalam tentang strategi, analisis keunggulan dan risikonya, dan ide optimasi multi-dimensi diberikan.
/*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)