Стратегия ATR Trailing Stop на основе UT Bot Indicator

Автор:Чао Чжан, Дата: 2024-03-11 11:17:33
Тэги:

img

Обзор

Эта стратегия основана на индикаторе UT Bot, разработанном QuantNomad, и включает в себя идею последующей остановки потери. Оригинальный код был написан @Yo_adriiiiaan и изменен @HPotter. Стратегия будет использоваться совместно с концепциями Smart Money LuxAlgo. В настоящее время стратегия находится на стадии тестирования.

Принцип стратегии

Основными принципами этой стратегии являются следующие:

  1. Когда цена закрытия выше, чем 50-периодная простая скользящая средняя, вводится длинная сделка.
  2. Для длинных позиций устанавливается цена последнего стоп-лосса. Цена последнего стоп-лосса составляет 80% (1-20%) от текущей цены закрытия.
  3. Для коротких позиций также устанавливается цена последнего стоп-лосса. Цена последнего стоп-лосса составляет 120% (1+20%) от текущей цены закрытия.
  4. ATR (средний истинный диапазон) используется в качестве отсчета для остановки. Метод расчета цены остановки ATR заключается в следующем: при движении вверх, возьмите большую из предыдущей цены остановки ATR и (текущая цена закрытия - ATR * Ключевое значение); при движении вниз, возьмите меньшую из предыдущей цены остановки ATR и (текущая цена закрытия + ATR * Ключевое значение).
  5. На основе прорыва цены ATR trailing stop определяется направление текущей позиции. Когда цена превышает цену ATR trailing stop, удерживается длинная позиция; когда цена превышает цену ATR trailing stop, удерживается короткая позиция; в других случаях статус текущей позиции остается неизменным.

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

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

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

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

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

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

Резюме

Основанная на индикаторе UT Bot, эта стратегия включает в себя логику остановки, которая может защитить прибыль на трендовых рынках. В то же время стратегия устанавливает остановки потерь отдельно для длинных и коротких позиций, что делает ее очень адаптивной. Использование ATR в качестве ориентира для остановки остановки позволяет динамически регулировать позицию остановки, улучшая гибкость. Однако эта стратегия может столкнуться с риском высоких затрат на транзакции из-за частых остановок на неуравновешенных рынках, и ей не хватает задания целевой прибыли, которая может упустить возможности получения прибыли. Кроме того, выбор параметров оказывает значительное влияние на производительность стратегии.

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


/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Trailingstop", overlay=true)

if close > sma(close, 50)
    strategy.entry("long", strategy.long)

// Trailing stop loss for long positions
Trailperc = 0.20
price_stop_long = 0.0

if (strategy.position_size > 0)
    stopValue = close * (1 - Trailperc)
    price_stop_long := max(stopValue, price_stop_long[1])
else
    price_stop_long := 0

if (strategy.position_size > 0)
    strategy.exit(id="stoploss_long", stop=price_stop_long)

// Trailing stop loss for short positions
Trailperc_short = 0.20
price_stop_short = 0.0

if (strategy.position_size < 0)
    stopValue_short = close * (1 + Trailperc_short)
    price_stop_short := min(stopValue_short, price_stop_short[1])
else
    price_stop_short := 0

if (strategy.position_size < 0)
    strategy.exit(id="stoploss_short", stop=price_stop_short)

// ATR Trailing Stop for visualization
keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5)
atrperiod = input(10, title="ATR Period")
xATR = atr(atrperiod)
nLoss = keyvalue * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
   iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

pos = 0  
pos :=   iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
   iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))

xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue

plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")

Больше