
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.
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.
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.
/*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)