Количественная стратегия торговли по каналу ATR

Автор:Чао Чжан, Дата: 2023-12-11 15:38:25
Тэги:

img

Обзор

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

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

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

В частности, ключевая логика включает:

  1. Расчет ATR и среднего диапазона (EMA)
  2. Определите временные фильтры
  3. Определить длинный сигнал при цене < нижний диапазон ATR
  4. Входите долго в следующий бар.
  5. Рекордная входная цена
  6. Расчет цены стоп-лосса
  7. Приобрести прибыль при цене > средний диапазон (EMA) или верхний диапазон ATR
  8. Стоп-аут, когда цена < стоп-лосс

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

Преимущества этой стратегии:

  1. Использует канал ATR для надежных сигналов входа и выхода
  2. Только после аномалии падение избегает преследования максимумов
  3. Строгое управление риском стоп-лосса
  4. Подходит для быстрых краткосрочных сделок
  5. Простая логика, легкая в реализации и оптимизации

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

Есть некоторые риски:

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

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

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

Стратегия может быть улучшена путем:

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

Заключение

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


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bcullen175

//@version=5
strategy("ATR Mean Reversion", overlay=true, initial_capital=100000,default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=6E-5) // Brokers rate (ICmarkets = 6E-5)
SLx = input(1.5, "SL Multiplier", tooltip = "Multiplies ATR to widen stop on volatile assests, Higher values reduce risk:reward but increase winrate, Values below 1.2 are not reccomended")
src = input(close, title="Source")
period = input.int(10, "ATR & MA PERIOD")
plot(open+ta.atr(period))
plot(open-ta.atr(period))
plot((ta.ema(src, period)), title = "Mean", color=color.white)

i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Check filter(s)
f_dateFilter = true

atr = ta.atr(period)

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = low < (open-ta.atr(period)) and strategy.position_size == 0 and f_dateFilter
sellCondition   = (high > (ta.ema(close, period)) and strategy.position_size > 0 and close < low[1]) or high > (open+ta.atr(period))
stopDistance    = strategy.position_size > 0 ? ((buyPrice - atr)/buyPrice) : na
stopPrice       = strategy.position_size > 0 ? (buyPrice - SLx*atr): na
stopCondition   = strategy.position_size > 0 and low < stopPrice

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)


Больше