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

Автор:Чао Чжан, Дата: 2023-09-28 11:32:09
Тэги:

Обзор

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

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

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

Стратегия использует среднюю линию эма, верхнюю полосу (коэффициент эма + ATR *) и нижнюю полосу (коэффициент эма - ATR *) для определения направления тренда.

Основная логика кода:

  1. Вычислить средние цены SMA и EMA
  2. Расчет среднего диапазона ATR
  3. Расчет верхней и нижней полос
  4. Определение длинного сигнала: перерывы цены выше верхней полосы
  5. Определение короткого сигнала: перерыв цены ниже нижней полосы
  6. Установите стоп-лосс для закрытия позиций: перерывы цены ниже верхней полосы для закрытия длинных; перерывы цены выше нижней полосы для закрытия коротких.

Динамически корректируя позиции на основе ATR, он может эффективно следовать направлениям тренда.

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

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

Риски

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

Решения:

  1. Приостановить стратегию или использовать другие индикаторы с высокой волатильностью
  2. Оптимизировать параметры для сокращения частоты торговли
  3. Увеличение соотношения стоп-лосса для крупных событий с данными
  4. Настройка диапазона ATR на основе конкретных продуктов

Направления к улучшению

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

Резюме

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


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 1h
basePeriod: 15m
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/
// © Investoz

//@version=4
strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

len = input(26, type=input.integer, minval=1, title="Length")
mul = input(2.618, type=input.float, minval=0, title="Length")
mullow = input(2.386, type=input.float, minval=0, title="Length")

price = sma(close, 1)
average = ema(close, len)
diff = atr(len) * mul
difflow = atr(len) * mullow

bull_level = average + diff
bear_level = average - difflow
bull_cross = crossunder(price, bear_level)
bear_cross = crossunder(bull_level, price)

FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2008, title = "From Year", minval = 2008)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2019)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
startTimeOk()  => true

if (startTimeOk()) and ema(close,1) > ema(close,528)
    strategy.entry("KOP", strategy.long, when=bull_cross) 
    strategy.close("KOP", when=bear_cross)  
if (startTimeOk()) and ema(close,1) < ema(close,528)
   strategy.entry("SALJ", strategy.short, when=bear_cross) 
   strategy.close("SALJ", when=bull_cross)

plot(price, title="price", color=color.black, transp=50, linewidth=2)
a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1)
a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1)
a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1)
fill(a0, a1, color=color.green, transp=97)
fill(a0, a2, color=color.red, transp=97)

Больше