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

Автор:Чао Чжан, Дата: 2024-02-19 11:41:20
Тэги:

img

Обзор

Стратегия Super ATR Trend Following - это стратегия, основанная на индикаторе ATR. Она использует индикатор ATR для измерения волатильности рынка и устанавливает стоп-лосс на основе нескольких ATR для отслеживания тенденций.

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

Стратегия сначала рассчитывает индикатор ATR, который является скользящим средним показателем волатильности цен за последние N дней, чтобы представить рыночный риск и волатильность.

Затем верхние и нижние диапазоны рассчитываются на основе значения ATR, умноженного на коэффициент, то есть:close - Multiplier * ATRдля верхней полосы;close + Multiplier * ATRЭто формирует канал тренда на основе ATR.

Затем мы судим, проходит ли текущая цена через верхнюю или нижнюю полосу канала. Если цена проходит через верхнюю полосу, она рассматривается как входящая в нисходящий тренд; если цена проходит через нижнюю полосу, она рассматривается как входящая в восходящий тренд. Когда происходит прорыв тренда, мы совершаем соответствующую покупку и продажу.

Кроме того, стратегия установила временное окно торговли, чтобы торговать только в указанном временном диапазоне.

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

Эта стратегия, основанная на канале индикатора, имеет следующие преимущества:

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

В целом, это простая и практичная стратегия, которая позволяет эффективно контролировать риски и получать хорошую прибыль.

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

В этой стратегии также есть некоторые риски:

  1. Рынок может иметь сильные изменения, на которые ATR не реагирует своевременно, что приводит к слишком слабой стоп-лосс
  2. Цена может колебаться в канале, когда настроения расходятся, увеличивая риск торговли
  3. Фиксированный мультипликатор может не подходить для всех продуктов, необходимо соответствующее корректирование
  4. setОкно ограничивает торговые возможности, может пропустить хорошие сделки, если не установлено правильно

Чтобы контролировать эти риски, мы можем принять следующие меры:

  1. Комбинировать другие показатели для определения состояния рынка, избегать полагаться только на ATR
  2. Добавление фильтров для предотвращения недействительного выхода, вызывающего риск торговли
  3. Выберите правильный мультипликатор в соответствии с историческими характеристиками различных продуктов
  4. Оптимизировать и протестировать параметры окна для обеспечения правильной настройки

Оптимизация

Есть возможности для дальнейшей оптимизации этой стратегии:

  1. Внедрение алгоритмов машинного обучения для динамической оптимизации мультипликатора
  2. Включить индикаторы настроения и т. д. для оптимизации диапазона каналов
  3. Добавить подтверждение объема или волатильности, чтобы избежать недействительного выхода
  4. Использование расширенной стратегии на основе времени для обратного тестирования

Эти оптимизации могут еще больше улучшить стабильность и рентабельность стратегии.

Заключение

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


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

//@version=5
strategy('B厂长 @超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '做多')
shortCondition = sellSignal
if shortCondition and window()
    strategy.entry('SAL', strategy.short, comment = '做空')

buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na



Больше