Visión general: La estrategia de stop trailing ATR es una estrategia de trading que establece dinámicamente los niveles de stop loss basados en el indicador Average True Range (ATR). Es adecuada para pares de FOREX volátiles, capturando ganancias en tendencias importantes mientras controla el riesgo mediante el seguimiento dinámico de la volatilidad del mercado.
La estrategia calcula el indicador AVERAGE (media móvil de precios) y las bandas superior/inferior DIFF/DIFFLOW basadas en los valores ATR, formando un canal de negociación.
Específicamente, primero calcula el indicador de promedio móvil simple AVERAGE y ATR. La banda superior DIFF y la banda inferior DIFFLOW se calculan luego multiplicando los valores ATR con un coeficiente. Esto forma un canal de negociación limitado por DIFF y DIFFLOW. Cuando el precio se rompe por encima de la banda superior, se toma una posición larga. Cuando el precio se rompe por debajo de la banda inferior, se toma una posición corta. Además, el nivel de stop loss se mueve dinámicamente con los valores ATR. Esto permite paradas adaptativas.
Por lo tanto, la estrategia puede ir continuamente largo / corto para capturar ganancias en las tendencias principales, mientras que utiliza ATR trailing stops para controlar el riesgo.
Las ventajas de esta estrategia incluyen:
Las paradas dinámicas basadas en ATR se ajustan a la volatilidad del mercado, evitando paradas demasiado cercanas o demasiado lejanas.
El canal de negociación tiene como objetivo capturar la reversión media dentro de las tendencias.
Seguimiento de tendencias para una mejor rentabilidad.
Parámetros y reglas simples, fáciles de entender y automatizar.
El uso elevado del capital, el comercio continuo proporcionan más oportunidades de ganancia.
Algunos riesgos a considerar:
Los coeficientes de ATR grandes conducen a paradas demasiado lejanas, sin poder controlar el riesgo.
Los whipssaws en los mercados de rango limitado desencadenan paradas frecuentes. Ajuste los coeficientes ATR para reducir las paradas no deseadas.
Pérdidas potenciales cuando el precio se invierte después de la ruptura inicial.
Los picos grandes pueden hacer que las paradas sean ineficaces.
Optimizaciones posibles:
Optimizar los parámetros de ATR para encontrar el equilibrio adecuado entre el seguimiento de la volatilidad y la prevención de paradas excesivas.
Añadir indicador de tendencia, sólo las rupturas de comercio en la dirección de la tendencia.
Los parámetros de ensayo se ensayarán individualmente para cada instrumento con el fin de determinar los valores óptimos.
Optimice la entrada, considere entrar en las breakouts de la línea media del canal.
Aumentar el tamaño de las posiciones controlando el riesgo total/retiro.
La estrategia ATR trailing stop opera continuamente en tendencias mientras gestiona el riesgo de forma dinámica. Se adapta a instrumentos volátiles y proporciona una buena utilización del capital. La optimización de parámetros y la adición de filtros pueden refinar aún más el rendimiento.
/*backtest start: 2023-09-18 00:00:00 end: 2023-09-25 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Investoz //@version=4 strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) len = input(26, type=input.integer, minval=1, title="Length") mul = input(1, type=input.float, minval=0, title="Length") mullow = input(2, type=input.float, minval=0, title="Length") price = sma(close, 1) average = ema(close, len) diff = atr(len) * mul difflow = atr(len) * mullow bull_level = average + diff bear_level = average - difflow bull_cross = crossunder(price, bear_level) bear_cross = crossunder(bull_level, price) FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 18, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2008, title = "From Year", minval = 2008) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2019) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) startTimeOk() => true if (startTimeOk()) strategy.entry("KOP", strategy.long, when=bull_cross) strategy.close("KOP", when=bear_cross) strategy.entry("SALJ", strategy.short, when=bear_cross) strategy.close("SALJ", when=bull_cross) plot(price, title="price", color=color.black, transp=50, linewidth=2) a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1) a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1) a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1) fill(a0, a1, color=color.green, transp=97) fill(a0, a2, color=color.red, transp=97)