Strategi Stop Loss Pengamatan Rata-rata Bergerak Ganda

Penulis:ChaoZhang, Tanggal: 2023-11-16 17:18:59
Tag:

img

Gambaran umum

Strategi ini menghasilkan sinyal panjang dan pendek melalui rata-rata bergerak ganda dan menerapkan pelacakan stop loss. Ide inti adalah untuk menentukan arah tren dengan rata-rata bergerak, pergi panjang atau pendek di sepanjang tren, dan menggunakan ATR untuk menghitung stop loss untuk pelacakan stop loss.

Logika Strategi

Strategi ini menggunakan hl2 sebagai harga sumber dan menghitung ATR dari periode tertentu sebagai kisaran stop loss. Band atas dan bawah dihitung berdasarkan ATR dikalikan dengan faktor tertentu. Ketika harga melanggar band atas, sinyal beli dihasilkan untuk pergi panjang. Ketika harga melanggar di bawah band bawah, sinyal jual dihasilkan untuk pergi pendek.

Setelah membuka posisi, stop loss disesuaikan secara real-time berdasarkan perubahan ATR untuk mencapai stop loss pelacakan. Secara khusus, setelah pergi panjang, band bawah meningkat secara progresif berdasarkan low terbaru untuk melacak stop loss. Setelah pergi pendek, band atas diturunkan secara progresif berdasarkan high terbaru untuk melacak stop loss.

Dengan cara ini, strategi ini memanfaatkan sepenuhnya kemampuan rata-rata bergerak untuk menentukan arah tren, dan juga menggabungkan mekanisme stop loss pelacakan berdasarkan ATR untuk memastikan arah perdagangan dan pengendalian risiko.

Keuntungan

Keuntungan terbesar dari strategi ini terletak pada pengendalian risiko. Strategi rata-rata bergerak tradisional hanya mempertimbangkan penilaian arah dan dapat dengan mudah meledakkan akun. Dengan menggabungkan ATR untuk melacak stop loss, strategi ini dapat secara dinamis menyesuaikan stop loss berdasarkan volatilitas pasar untuk mengontrol risiko perdagangan secara efektif.

Selain itu, strategi ini menggabungkan perdagangan dua arah. Dibandingkan dengan strategi satu arah, ia dapat dengan cepat menyesuaikan arah posisi ketika tren berbalik, menghindari terjebak dalam satu arah dan meningkatkan profitabilitas strategi.

Risiko

Risiko utama dari strategi ini berasal dari pengaturan parameter periode ATR dan pengganda. Jika periode ATR terlalu pendek atau pengganda terlalu besar, rentang stop loss akan terlalu kecil untuk secara efektif mengendalikan risiko. Jika periode ATR terlalu panjang atau pengganda terlalu kecil, stop loss akan terlalu longgar untuk mendapatkan keuntungan.

Risiko dapat dikelola dengan mengoptimalkan periode ATR dan pengganda untuk menyeimbangkan antara target stop loss dan laba, dan menggabungkan indikator lain untuk menyaring kegagalan palsu dan meningkatkan kualitas sinyal.

Peluang Peningkatan

Strategi ini dapat ditingkatkan dari aspek berikut:

  1. Mengoptimalkan periode rata-rata bergerak untuk menemukan kombinasi parameter terbaik.

  2. Tambahkan indikator lain seperti MACD, KDJ dll untuk menyaring sinyal dan meningkatkan kualitas.

  3. Masukkan ukuran posisi seperti pecahan tetap, Martingale dll untuk meningkatkan profitabilitas.

  4. Parameter penelitian perbedaan antara berbagai produk untuk optimasi.

  5. Terapkan pembelajaran mesin seperti algoritma genetik untuk pelatihan parameter dan optimasi.

Kesimpulan

Strategi ini sepenuhnya mempertimbangkan penilaian tren dan pengendalian risiko, mengejar keuntungan sambil menurunkan drawdown. Peningkatan lebih lanjut melalui optimasi parameter dan metode portofolio dapat membantu meningkatkan profitabilitas strategi. Singkatnya, ini adalah strategi perdagangan kuantitatif yang kuat dan stabil dengan logika yang jelas dan penerapan yang mudah.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic


//@version=4
strategy("Trenbolone Strategy", overlay = true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

Lebih banyak