Тенденция ATR в соответствии со стратегией

Автор:Чао Чжан, Дата: 2021-09-21 15:13:47
Тэги:

Обзор

Эта стратегия использует средний истинный диапазон (ATR) для фиксации ценовых тенденций и устанавливает остановки на основе ATR для следования тренду.

Как это работает

  1. Вычислите значение ATR.

  2. Определить уровень остановки потери на основе ATR.

  3. Введите длинный/короткий, когда цена прерывает уровень остановки.

  4. Зафиксируйте прибыль, динамически регулируя остановки.

Преимущества

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

Риски

  • Плохие параметры ATR могут привести к тому, что остановки будут слишком свободными или жесткими
  • Невозможно эффективно определить конец тренда
  • Некоторое время отставание существует
  • Перемены могут снизить прибыль

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

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

Заключение

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


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

strategy(title="ATR Strategy", overlay = true,  commission_type=strategy.commission.percent,commission_value=0.075)
//credits to HPotter for the orginal code
nATRPeriod = input(5)
nATRMultip = input(3.5)
xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), math.max(nz(xATRTrailingStop[1]), close - nLoss),
                    iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), math.min(nz(xATRTrailingStop[1]), close + nLoss), 
                        iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
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 ? color.red: pos == 1 ? color.green : color.blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 

strategy.entry("Long", strategy.long, when = barbuy) 
strategy.entry("Short", strategy.short, when = barsell) 

barcolor(barbuy? color.green:color.red)



Больше