Стратегия ATR Trailing Stops

Автор:Чао Чжан, Дата: 2023-10-09 16:59:57
Тэги:

Обзор

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

Логика стратегии

Стратегия в основном реализуется в следующих шагах:

  1. Вычисляется индикатор ATR, период ATR устанавливается параметром nATRPeriod, по умолчанию на 5;

  2. Вычисляется линия остановки потери на основе значения ATR, величина остановки потери устанавливается параметром nATRMultip, по умолчанию в 3,5 раза больше ATR;

  3. При повышении цены, если она выше предыдущей линии стоп-лосса, корректировать линию стоп-лосса до цены минус величину стоп-лосса; при падении цены, если она ниже предыдущей линии стоп-лосса, корректировать линию стоп-лосса до цены плюс величину стоп-лосса;

  4. Судить, если цена проходит через линию стоп-лосса, если проходит через, отправлять сигналы покупки или продажи;

  5. Ввести длинные или короткие позиции на основе сигналов прорыва линии стоп-лосса и закрыть позиции, когда цена снова коснется линии стоп-лосса.

Когда цена повышается, линия стоп-лосса будет непрерывно подниматься вверх, чтобы блокировать прибыль. Когда цена падает, линия стоп-лосса будет непрерывно опускаться вниз, чтобы остановить потери. Индикатор ATR может более точно отражать колебания цен. Динамическое регулирование линии стоп-лосса на основе ATR может избежать чрезмерно агрессивного или чрезмерно консервативного стоп-лосса.

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

  • Динамически регулировать линию остановки потери для своевременной остановки потери, чтобы избежать расширения потери
  • Регулирование линии стоп-потери относительно плавно, чтобы избежать преждевременного стоп-потери.
  • Использование индикатора ATR для расчета более разумной величины стоп-лосса на основе последней волатильности
  • Линия траектории остановки потерь для эффективного закрепления прибыли

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

  • Установка параметра ATR должна быть осторожной, слишком короткий период ATR может вызвать чрезмерное колебание линии остановки потери, слишком длинный может не отражать изменение цены во времени
  • Величина стоп-лосса должна устанавливаться в соответствии с специфической волатильностью акций, чрезмерно большие или небольшие значения будут влиять на эффективность стратегии
  • Оставление остановки потери может уменьшить маржу прибыли, остановив прибыль до другого роста цен
  • Частые корректировки позиций могут привести к более высоким затратам на торговлю

Параметры могут быть оптимизированы путем корректировки периода ATR и величины стоп-потери, чтобы найти оптимальный баланс между остановкой потери и отставанием.

Руководство по оптимизации

  • Оптимизировать параметр периода ATR, чтобы изменения линии остановки потери более точно следили за колебаниями цен
  • Оптимизировать параметр величины стоп-потери для более разумного стоп-потери
  • Добавить другие индикаторы для фильтрации времени входа
  • Продолжайте продавать только тогда, когда появится очевидный рост.
  • Рассмотреть вопрос о добавлении механизма реинтрота для участия в акциях с остановкой потерь, но ожидания продолжения роста

Резюме

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


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@okadoke
////////////////////////////////////////////////////////////
// Based on Average True Range Trailing Stops Strategy by HPotter
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stops Strategy", shorttitle="ATRTSS", overlay = true, 
  initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0)
  
nATRPeriod      = input(5, "ATR Period")
nATRMultip      = input(3.5, "ATR Multiplier")
useShorts       = input(false, "Test w/Shorts?")
daysBackMax     = input(defval = 360, title = "Max Days Back to Test", minval = 0)
daysBackMin     = input(defval = 0, title = "Min Days Back to Test", minval = 0)
msBackMax       = 1000 * 60 * 60 * 24 * daysBackMax
msBackMin       = 1000 * 60 * 60 * 24 * daysBackMin

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = na
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 = na 
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)))
        
color = pos == -1 ? red: pos == 1 ? green : blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin)))

buy     = crossover(close, xATRTrailingStop)
sell    = crossunder(close, xATRTrailingStop)

strategy.entry("LONG", long=true, when=buy and isWithinTimeBounds)
strategy.close("LONG", when=sell and isWithinTimeBounds)
strategy.entry("SHORT", long=false, when=useShorts and sell and isWithinTimeBounds)
strategy.close("SHORT", when=useShorts and buy and isWithinTimeBounds)



Больше