Estrategia de trailing stop de ES basada en ATR


Fecha de creación: 2024-01-12 14:52:23 Última modificación: 2024-01-12 14:52:23
Copiar: 3 Número de Visitas: 673
1
Seguir
1617
Seguidores

Estrategia de trailing stop de ES basada en ATR

Descripción general

Esta estrategia es una estrategia de suspensión de seguimiento aplicada a los E-mini S&P 500 futures (ES). Utiliza el ATR de 10 días como referencia para establecer una línea de parada de múltiples cabezas y cabezas vacías con 3 veces el ATR como rango de parada. La estrategia juzga la tendencia a través de los cambios de dirección de la línea ATR y genera una señal de entrada en el punto de cambio de tendencia. Una vez en la entrada, ajusta la línea de parada en tiempo real para que la línea de parada siga el precio y proteja el beneficio.

Principio de estrategia

Esta estrategia utiliza hl2 como fuente de precios. Comienza por calcular el ATR de 10 días y le da al usuario la opción de calcular el ATR usando el método SMA o la función ATR incorporada. Después de calcular el ATR, agregue 3 veces el ATR como rango.

La forma de determinar la tendencia es que cuando el precio supera el límite superior, es de cabeza; cuando el precio cae por debajo del límite inferior, es de cabeza. Cuando el precio vuelve a entrar en el rango, se confirma el cambio de tendencia.

Después de la entrada, la línea de parada de la cabeza múltiple se ajusta para mover el límite superior 1 punto hacia abajo, y la línea de parada de la cabeza vacía se ajusta para mover el límite inferior 1 punto hacia arriba, para una protección de seguimiento más ágil.

Ventajas estratégicas

  1. El uso de ATR permite adaptarse automáticamente a los cambios en la volatilidad del mercado, reduciendo la probabilidad de que se desencadene un stop loss
  2. El método de seguimiento de las tendencias es simple y eficaz, evitando el riesgo de tope y tope
  3. La suspensión de pérdidas de seguimiento garantiza la protección de las ganancias y evita que las ganancias se vuelvan a perder

Análisis de riesgos

  1. La configuración incorrecta de los parámetros ATR puede causar un alcance de parada demasiado grande o demasiado pequeño
  2. La volatilidad del indicador puede causar pérdidas anormales
  3. TAILING stop loss puede ser demasiado conservador para seguir la tendencia

Dirección de optimización

  1. Se puede considerar la optimización de los parámetros ATR en combinación con el índice de volatilidad
  2. Se pueden probar diferentes algoritmos de parada de TAILING, como la parada de porcentaje de saldo, etc.
  3. Se puede combinar con indicadores de tendencia para filtrar las señales de entrada y evitar la entrada de tendencias no dominantes

Resumir

Esta estrategia es una estrategia de seguimiento de tendencias más general en su conjunto. Resolvió el problema de determinar el alcance de los paros, reduciendo el riesgo mediante el ajuste dinámico de ATR. Al mismo tiempo, protegió los beneficios de los paros.

Código Fuente de la Estrategia
/*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)