Эта стратегия использует средний истинный диапазон (ATR) в качестве основы для последующей остановки (TS), динамически корректируя позицию стоп-лосса, чтобы следовать тренду. Когда цена движется в благоприятном направлении, позиция стоп-лосса корректируется соответственно, чтобы закрепить прибыль; когда цена движется в неблагоприятном направлении, позиция стоп-лосса остается неизменной, и как только цена достигает цены стоп-лосса, позиция закрывается. Ключ к этой стратегии заключается в динамической корректировке позиции стоп-лосса, которая может как защитить прибыль, так и позволить прибыли расширяться по мере продолжения тренда.
Стратегия ATR Trailing Stop может динамически корректировать позицию стоп-лосса на основе величины колебаний цен и может достигать хороших результатов на трендовых рынках. Однако эта стратегия также имеет такие риски, как неспособность справляться с нестабильными рынками, чрезмерная частота стоп-лосса и трудности в избежании пробелов. Чтобы устранить эти недостатки, стратегия может быть оптимизирована и улучшена с точки зрения суждения о тренде, стратегии получения прибыли и максимальных лимитов стоп-лосса.
/*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')