Стратегия ATR-основанного отслеживания для ES

Автор:Чао Чжан, Дата: 2024-01-12 14:52:23
Тэги:

img

Обзор

Эта стратегия - это стратегия последнего остановки, применяемая к фьючерсам E-mini S&P500 (ES). Она использует 10-дневный ATR в качестве отсчета и устанавливает диапазон стоп-лосса до 3 раз ATR для определения длинных и коротких стоп-линий. Стратегия оценивает тренд по изменению направления линий ATR и генерирует сигналы входа в поворотных точках тренда. После ввода она будет регулировать линии стоп-лосса в режиме реального времени для отслеживания движения цен, защищая прибыль.

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

Стратегия использует hl2 в качестве источника цены. Сначала она рассчитывает 10-дневный ATR и позволяет пользователю выбирать между использованием метода SMA или встроенной функции ATR для расчета ATR. После получения ATR она добавляет 3 раза ATR вверх и вниз, чтобы сформировать диапазон. Две линии диапазона являются линиями стоп-лосса.

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

После входа длинная линия стоп-лосса устанавливается на верхнюю границу минус 1 тик, а короткая линия стоп-лосса устанавливается на нижнюю границу плюс 1 тик, отставая для защиты прибыли.

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

  1. Использование ATR может автоматически адаптироваться к изменениям волатильности рынка и снизить вероятность того, что будет инициирована остановка потерь.
  2. Метод отслеживания тренда прост и эффективен, чтобы избежать рисков преследования вершин и дно.
  3. Задержки задерживают прибыль и не возвращают прибыльные сделки.

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

  1. Неправильное установление параметров ATR может привести к тому, что диапазон стоп-потери будет слишком большим или слишком маленьким.
  2. При резких изменениях волатильности базового актива может возникнуть аномальное действие стоп-лосса.
  3. ПРЕДСТОЯЩИЕ остановки могут быть слишком консервативными, чтобы следовать за трендом.

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

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

Заключение

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


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

//@version=4
strategy("ATR Based Trailing Stop Strategy on ES! [v4]", overlay=true)

// Given ATR study
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? 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

// Entry logic based on trend change
longCondition = trend == 1 and trend[1] == -1
shortCondition = trend == -1 and trend[1] == 1

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

// Trailing stop loss logic
// For long positions, trail 1 point below the up plot
longStopPrice = up - 1

// For short positions, trail 1 point above the dn plot
shortStopPrice = dn + 1

strategy.exit("Trailing Stop Long", "Long", trail_offset=longStopPrice)
strategy.exit("Trailing Stop Short", "Short", trail_offset=shortStopPrice)


Больше