Strategi ini menggunakan Average True Range (ATR) sebagai dasar untuk Trailing Stop (TS), secara dinamis menyesuaikan posisi stop-loss untuk mengikuti tren. Ketika harga bergerak ke arah yang menguntungkan, posisi stop-loss disesuaikan untuk mengunci keuntungan; ketika harga bergerak ke arah yang merugikan, posisi stop-loss tetap tidak berubah, dan setelah harga mencapai harga stop-loss, posisi ditutup. Kunci strategi ini terletak pada penyesuaian dinamis posisi stop-loss, yang dapat melindungi keuntungan dan memungkinkan keuntungan untuk berkembang seiring tren berlanjut.
Strategi stop trailing ATR dapat secara dinamis menyesuaikan posisi stop loss berdasarkan besarnya fluktuasi harga dan dapat mencapai hasil yang baik di pasar tren. Namun, strategi ini juga memiliki risiko seperti ketidakmampuan untuk mengatasi pasar yang bergolak, frekuensi stop loss yang berlebihan, dan kesulitan menghindari celah. Untuk mengatasi kekurangan ini, strategi dapat dioptimalkan dan ditingkatkan dalam hal penilaian tren, strategi take profit, dan batas stop loss maksimum. Dengan penyesuaian ini, kemampuan beradaptasi dan profitabilitas strategi diharapkan dapat ditingkatkan.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Long TAP", overlay=true) // Constants keyValueDefault = 3.0 keyValueStep = 0.5 atrPeriodDefault = 10 // Inputs keyValue = input.float(keyValueDefault, title="Key Value") atrPeriod = input.int(atrPeriodDefault, title="ATR Period") // Calculations xATR = ta.atr(atrPeriod) nLoss = keyValue * xATR // Trailing Stop Calculation var float xATRTrailingStop = 0.0 xATRTrailingStop := ta.highest(math.max(nz(xATRTrailingStop[1], 0), close - nLoss), 1) xATRTrailingStop := ta.lowest(math.min(nz(xATRTrailingStop, 0), close + nLoss), 1) // Position Calculation var int pos = 0 pos := nz(pos[1], 0) if (close[1] < nz(xATRTrailingStop, 0) and close > nz(xATRTrailingStop, 0)) pos := 1 else if (close[1] > nz(xATRTrailingStop, 0) and close < nz(xATRTrailingStop, 0)) pos := -1 // Plotting Trailing Stop var color xcolor = na if (pos == -1) xcolor := color.red else if (pos == 1) xcolor := color.green plot(xATRTrailingStop, color=xcolor, title="Trailing Stop") // Buy/Sell Signals buySignal = ta.crossover(close, xATRTrailingStop) sellSignal = ta.crossunder(close, xATRTrailingStop) // Strategy if (buySignal) strategy.entry("Long", strategy.long) label.new(bar_index, xATRTrailingStop, text="Buy Signal", color=color.green, style=label.style_label_up, yloc=yloc.belowbar) if (sellSignal) strategy.entry("Short", strategy.short) label.new(bar_index, xATRTrailingStop, text="Sell Signal", color=color.red, style=label.style_label_down, yloc=yloc.abovebar) // Alerts alertcondition(buySignal, title='UT BOT Buy', message='UT BOT Buy') alertcondition(sellSignal, title='UT BOT Sell', message='UT BOT Sell')