Esta estrategia es una estrategia de trailing stop aplicada a los futuros E-mini S&P500 (ES). Utiliza ATR de 10 días como referencia y establece el rango de stop loss a 3 veces ATR para definir líneas de stop largas y cortas. La estrategia juzga la tendencia por el cambio de dirección de las líneas ATR y genera señales de entrada en los puntos de inflexión de la tendencia. Una vez ingresada, ajustará las líneas de stop loss en tiempo real para seguir el movimiento del precio, protegiendo las ganancias.
La estrategia utiliza hl2 como fuente de precio. Primero calcula el ATR de 10 días, y permite al usuario elegir entre usar el método SMA o la función ATR incorporada para calcular el ATR. Después de obtener el ATR, agrega 3 veces el ATR hacia arriba y hacia abajo para formar el rango.
El método para juzgar la tendencia es cuando el precio excede el límite superior, es largo; cuando el precio rompe el límite inferior, es corto. Cuando el precio vuelve al rango, confirma la inversión de tendencia. En este momento, si se gira de corto a largo, generará una señal de entrada larga; si se gira de largo a corto, generará una señal de entrada corta.
Después de entrar, la línea de stop loss larga se establece en el límite superior menos 1 tick, y la línea de stop loss corta se establece en el límite inferior más 1 tick, detrás para proteger las ganancias.
En general, esta es una estrategia de seguimiento de tendencia robusta. Soluciona el problema de determinar el rango de pérdida de parada y reduce los riesgos ajustando las paradas dinámicamente en función de ATR. Al mismo tiempo, las paradas de seguimiento bloquean las ganancias. Pero todavía hay espacio para optimizar parámetros como los períodos de ATR, los algoritmos de parada, etc. Con más pruebas y ajustes, esta estrategia puede convertirse en una estrategia de seguimiento de tendencia con alta robustez.
/*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)