Стратегия Stop Loss по среднему истинному диапазону, следующая за трендом

ATR TS
Дата создания: 2024-05-24 18:12:01 Последнее изменение: 2024-05-24 18:12:01
Копировать: 8 Количество просмотров: 521
1
Подписаться
1617
Подписчики

Стратегия Stop Loss по среднему истинному диапазону, следующая за трендом

Обзор

Стратегия использует среднюю реальную волну (ATR) в качестве основы для отслеживания остановок (TS), чтобы достичь цели отслеживания тренда путем динамического регулирования стоп-позиции. Когда цена движется в благоприятную сторону, стоп-позиция также корректируется, таким образом, блокируя полученную прибыль; когда цена движется в неблагоприятную сторону, стоп-позиция остается неизменной, и, как только цена касается стоп-позиции, стоп-позиция сглаживается. Ключевой момент стратегии заключается в динамическом регулировании стоп-позиции, которое может защитить полученную прибыль, но также позволить прибыль продолжаться и расширяться с тенденцией.

Стратегический принцип

  1. ATR отражает рыночную волатильность и используется для измерения средней величины изменения цен.
  2. Стоп-дистанция nLoss вычисляется на основе ATR и параметров KeyValue. KeyValue - это множитель пользователя, nLoss - это умножение KeyValue на ATR, что означает, что стоп-дистанция является кратной ATR.
  3. Вычислить динамическую трассировку стоп-позиции xATRTrailingStop. При многоголовом держании позиции, установить его как “наивысшая цена на предыдущей K-линии и наименьшая цена на предыдущей K-линии и наименьшая цена на предыдущей K-линии и наименьшая цена на предыдущей K-линии и наименьшая цена на предыдущей K-линии”
  4. Позиция открывается. Когда цена закрытия превышает xATRTrailingStop, вы делаете больше; когда цена закрытия превышает xATRTrailingStop, вы делаете пустоту.

Анализ преимуществ

  1. Стоп-позиции динамически корректируются в зависимости от колебаний цены, закрепляя прибыль, а также позволяя прибыли расширяться в зависимости от продолжающегося тренда.
  2. Стоп-позиции, основанные на расчете ATR, могут объективно отражать волатильность рынка и быть более гибкими и эффективными по сравнению с фиксированными стоп-позициями, установленными субъективно.
  3. Увеличивая ATR с помощью параметров KeyValue, можно установить подходящее расстояние для остановки в соответствии с собственными предпочтениями в отношении риска. Большее значение KeyValue приводит к более широкому пространству для остановки и меньшей частоте остановки.

Анализ рисков

  1. Трендовые стратегии плохо работают в нестабильных рынках, часто приводят к убыткам, когда односторонние тенденции не заметны, что приводит к быстрому течению средств.
  2. Время входа зависит от перекрестного сигнала закрытия цены и динамической линии остановки, в шокирующих ситуациях могут возникать последовательные небольшие остановки.
  3. Стоп-стратегия не может избежать пробелов, вызванных гигантскими заработками или лидо, а скорость корректировки стоп-позиции не может идти в ногу со скоростью изменения цены, что приводит к фактическим потерям, намного большим, чем ожидаемые контролируемые потери.

Направление оптимизации

  1. Можно на основе стратегии добавить индикаторы, определяющие тенденцию, такие как система равнолинейных, динамические индикаторы и т. д., и войти в игру только тогда, когда тенденция ясна, чтобы избежать частых торгов на колеблющихся рынках.
  2. Можно рассмотреть возможность внедрения стратегий сдерживания, таких как вычисление позиций в соответствии с формулой Келли, установка сдерживания снятия с фиксированного преимущества и т. д., чтобы снизить вероятность возврата потенциальной прибыли в конце тренда.
  3. В случае, если вы хотите установить максимальный предел убытков, например, фиксированную сумму или фиксированный процент, то при достижении этого предела, независимо от того, где находится динамическая стоп-стоп цена, убытки прекращаются.

Подвести итог

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')