Strategi ini menggunakan purata gelombang sebenar (ATR) untuk menangkap trend harga, dan menggunakan ATR untuk menetapkan stop loss, untuk mengikuti trend.
Hitung nilai ATR.
Stop loss ditentukan berdasarkan nilai ATR.
Apabila harga melepasi garis stop loss, buat lebih banyak longkang.
Mengunci keuntungan dengan menyesuaikan Stop Loss secara dinamik.
Strategi ini menggunakan ATR untuk menangkap trend dengan berkesan dan menyesuaikan stop loss secara dinamik untuk mencapai penguncian keuntungan. Tetapan parameter pengoptimuman dapat meningkatkan prestasi strategi. Tetapi masalah ATR yang ketinggalan tidak dapat dielakkan sepenuhnya. Secara keseluruhan, strategi ini adalah penyelesaian trend yang mudah dan praktikal.
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
strategy(title="ATR Strategy", overlay = true, commission_type=strategy.commission.percent,commission_value=0.075)
//credits to HPotter for the orginal code
nATRPeriod = input(5)
nATRMultip = input(3.5)
xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), math.max(nz(xATRTrailingStop[1]), close - nLoss),
iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), math.min(nz(xATRTrailingStop[1]), close + nLoss),
iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos = iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")
barbuy = close > xATRTrailingStop
barsell = close < xATRTrailingStop
strategy.entry("Long", strategy.long, when = barbuy)
strategy.entry("Short", strategy.short, when = barsell)
barcolor(barbuy? color.green:color.red)