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