Esta estrategia utiliza el indicador Average True Range (ATR) para determinar la dirección de la tendencia.
La estrategia primero calcula el promedio móvil simple (sma) y el promedio móvil exponencial (ema) del precio. Luego calcula el indicador ATR, que es el rango promedio de movimiento del precio en los últimos N días.
La estrategia utiliza la línea media de la EMA, la banda superior (coeficiente EMA + ATR *) y la banda inferior (coeficiente EMA - ATR *) para determinar la dirección de la tendencia.
La lógica principal en el código:
Al ajustar dinámicamente las posiciones basadas en ATR, puede seguir eficazmente las direcciones de tendencia.
Soluciones:
La estrategia de seguimiento de tendencias ATR tiene una lógica clara para determinar la dirección de la tendencia utilizando ATR. Es un sistema típico de seguimiento de tendencias. Las ventajas son la simplicidad y la capacidad de seguir las tendencias. Pero también tiene riesgos que requieren optimizaciones para diferentes mercados. En general, tiene un gran potencial y valor como herramienta de negociación cuantitativa.
/*backtest start: 2023-08-28 00:00:00 end: 2023-09-27 00:00:00 period: 1h basePeriod: 15m 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(2.618, type=input.float, minval=0, title="Length") mullow = input(2.386, 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()) and ema(close,1) > ema(close,528) strategy.entry("KOP", strategy.long, when=bull_cross) strategy.close("KOP", when=bear_cross) if (startTimeOk()) and ema(close,1) < ema(close,528) 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)