Strategi ini menggunakan Julat Benar Purata (ATR) sebagai asas untuk Trailing Stop (TS), secara dinamik menyesuaikan kedudukan stop-loss untuk mengikuti trend. Apabila harga bergerak ke arah yang menguntungkan, kedudukan stop-loss diselaraskan dengan sewajarnya untuk mengunci keuntungan; apabila harga bergerak ke arah yang tidak menguntungkan, kedudukan stop-loss tetap tidak berubah, dan sebaik sahaja harga mencapai harga stop-loss, kedudukan ditutup. Kunci strategi ini terletak pada penyesuaian dinamik kedudukan stop-loss, yang dapat melindungi keuntungan dan membolehkan keuntungan berkembang ketika trend berterusan.
Strategi hentian trailing ATR dapat menyesuaikan kedudukan stop-loss secara dinamik berdasarkan besarnya turun naik harga dan dapat mencapai hasil yang baik di pasaran trend. Walau bagaimanapun, strategi ini juga mempunyai risiko seperti ketidakupayaan untuk mengatasi pasaran yang bergolak, kekerapan stop-loss yang berlebihan, dan kesukaran dalam mengelakkan pembukaan jurang. Untuk mengatasi kekurangan ini, strategi dapat dioptimumkan dan ditingkatkan dari segi penilaian trend, strategi mengambil keuntungan, dan had stop-loss maksimum. Dengan penyesuaian ini, kemampuan menyesuaikan diri dan keuntungan 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')