
Strategi ini menggunakan moving average dua arah untuk membangun sinyal overhead dan melakukan tracking stop loss. Ide inti dari strategi ini adalah menggunakan moving average untuk menentukan arah tren, melakukan overhead di arah tren, dan menggunakan ATR untuk menghitung stop loss dan melakukan tracking stop loss.
Strategi ini menggunakan hl2 sebagai harga sumber, menghitung ATR untuk periode tertentu sebagai margin stop loss. Berdasarkan nilai ATR kalikan dengan kelipatan tertentu untuk menghitung naik dan turun.
Setelah membuka posisi, stop loss disesuaikan dengan perubahan waktu nyata ATR, untuk mencapai stop loss tracking. Secara khusus, ketika melakukan over, rel bawah terus naik sesuai dengan titik terendah terbaru, untuk mencapai stop loss tracking; Ketika setelah melakukan blanko, rel atas terus turun sesuai dengan titik tertinggi terbaru, untuk mencapai stop loss tracking.
Dengan cara ini, strategi ini memanfaatkan sepenuhnya fungsi rata-rata bergerak untuk menentukan arah tren, dan menambahkan mekanisme pelacakan stop loss berbasis ATR, yang menjamin keakuratan arah perdagangan dan mengendalikan risiko perdagangan.
Keuntungan terbesar dari strategi ini adalah pengendalian risiko. Strategi rata-rata bergerak tradisional hanya mempertimbangkan penilaian arah, mudah untuk melakukan eksposur. Strategi ini menambahkan tracking stop loss yang dihitung oleh ATR, dapat menyesuaikan stop loss secara dinamis sesuai dengan amplitudo fluktuasi pasar, dan secara efektif mengendalikan risiko perdagangan.
Selain itu, strategi ini menggabungkan perdagangan dua arah multi-halangan. Dibandingkan dengan strategi satu sisi, strategi ini dapat menyesuaikan arah posisi tepat waktu saat tren berbalik, menghindari terjebak di satu arah, dan meningkatkan keuntungan strategi.
Risiko utama dari strategi ini terletak pada pengaturan siklus dan kelipatan ATR. Jika siklus ATR terlalu pendek atau kelipatan terlalu besar, stop loss akan terlalu kecil untuk mengendalikan risiko secara efektif; Jika siklus ATR terlalu panjang atau kelipatan terlalu kecil, stop loss terlalu longgar dan sulit untuk menghasilkan keuntungan. Selain itu, risiko false breakout mungkin terjadi ketika harga menembus moving average yang memicu sinyal posisi.
Hal ini dapat dilakukan dengan mengoptimalkan siklus parameter dan kelipatan, menyeimbangkan stop loss gain; dalam kombinasi dengan indikator lain, filter false breakout, meningkatkan kualitas sinyal, dan mengurangi risiko.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Mengoptimalkan siklus moving average, mencari kombinasi parameter yang optimal
Menambahkan filter untuk indikator lain, seperti MACD, KDJ, dan lain-lain, untuk meningkatkan kualitas sinyal
Meningkatkan strategi manajemen posisi, seperti fixed share, Martingale, dan lain-lain, untuk meningkatkan keuntungan strategi
Perbedaan parameter dari varietas yang berbeda dapat dipelajari dan dioptimalkan
Optimasi parameter dapat dilatih dengan metode pembelajaran mesin seperti algoritma genetik
Strategi ini secara menyeluruh mempertimbangkan penilaian tren dan pengendalian risiko, dengan fokus pada pengurangan pengunduran diri sambil mengejar keuntungan. Dengan metode seperti pengoptimalan parameter dan kombinasi, keuntungan strategi dapat ditingkatkan lebih lanjut. Secara keseluruhan, ide strategi ini jelas, mudah diterapkan, dan merupakan strategi perdagangan kuantitatif yang stabil dan andal.
/*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)