Динамическая стратегия остановки отслеживания на основе ATR и SMA

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

img

Обзор

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

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

  1. Когда цена закрытия больше 50-дневной SMA, открыть длинную позицию.
  2. Для получения диапазона остановочных потерь nLoss вычисляется индикатор ATR с периодом 10, умноженный на ключевое значение (по умолчанию 3).
  3. Вычислить динамическую цену стоп-лосса xATRTrailingStop с начальным значением 0.
    • Если цена закрытия и предыдущая цена закрытия оба превышают предыдущую цену остановки потери, новая цена остановки потери выше предыдущей цены остановки потери и (цена закрытия - nLoss).
    • Если цена закрытия и предыдущая цена закрытия оба меньше предыдущей цены остановки потери, новая цена остановки потери меньше предыдущей цены остановки потери и (цена закрытия + nLoss).
    • В других случаях новая цена остановки потери (стоп-лосс - nLoss) или (стоп-лосс + nLoss).
  4. Когда цена закрытия падает ниже динамической цены остановки потери, закрыть позицию.
  5. Точки остановки потери обозначаются разными цветами: зеленый для длинной остановки потери, красный для короткой остановки потери и синий для других случаев.

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

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

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

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

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

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

Резюме

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


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

Больше