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


Дата создания: 2024-01-12 14:52:23 Последнее изменение: 2024-01-12 14:52:23
Копировать: 3 Количество просмотров: 673
1
Подписаться
1617
Подписчики

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

Обзор

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

Стратегический принцип

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

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

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

Стратегические преимущества

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

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

  1. Неправильная настройка параметров ATR может привести к слишком большому или слишком маленькому диапазону остановки
  2. При колебаниях показателя может возникнуть аномальная остановка.
  3. TAILING может быть слишком консервативным и не отслеживать тенденцию

Направление оптимизации

  1. Можно рассмотреть оптимизацию параметров ATR в сочетании с показателем волатильности
  2. Можно тестировать различные алгоритмы TAILING, такие как остаточный стопроцентный стоп и т. д.
  3. Можно комбинировать фильтрацию входных сигналов с трендовыми индикаторами, чтобы избежать входа неглавных трендов

Подвести итог

Эта стратегия является более универсальной стратегией отслеживания тенденций. Она решает проблему определения зоны остановки, снижает риск посредством динамической корректировки 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)