Стратегия ATR moving stop loss на основе индикатора UT Bot


Дата создания: 2024-03-11 11:17:33 Последнее изменение: 2024-03-11 11:17:33
Копировать: 0 Количество просмотров: 2014
1
Подписаться
1617
Подписчики

Стратегия ATR moving stop loss на основе индикатора UT Bot

Обзор

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

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

Основные принципы этой стратегии:

  1. Если цена закрытия превышает 50-летнюю простую скользящую среднюю, то совершается многоторговля.
  2. Для многоосновных позиций устанавливается движущаяся стоп-цена. Движущаяся стоп-цена составляет 80% от текущей цены закрытия (от 1 до 20%). Движущаяся стоп-цена движется вверх по мере роста цены, но не движется вниз, что защищает прибыль.
  3. Для свободных позиций также устанавливается движущаяся стоп-цена. Движущаяся стоп-цена составляет 120% от текущей закрывающей цены. Движущая стоп-цена движется вниз по мере падения цены, но не движется вверх.
  4. Используйте ATR (Average True Range) в качестве отсчета для движущегося стоп-цены. ATR (Average True Range) для движущегося стоп-цены рассчитывается следующим образом: при движении вверх, возьмите предыдущую ATR (Average True Range) для движущегося стоп-цены и текущую закрывающую цену - ATR*Ключевая стоимость (Key Value) - наибольшая из двух; при движении вниз, принимается предыдущая ATR, движущаяся по цене стоп-лосса, и (Current Closing Price + ATR)*Key Value) - меньшее из двух значений. Key Value - это параметр, который устанавливается пользователем для регулирования чувствительности мобильного стоп-лоста.
  5. В зависимости от прорыва цены перемещения ATR, определяется направление текущей позиции. При перерыве цены перемещения ATR вверх, держите позицию с несколькими позициями; при перерыве цены перемещения ATR вниз, держите позицию с несколькими позициями; в остальных случаях сохраняйте текущую позицию без изменений.

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

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