Esta es una estrategia de negociación cuantitativa que combina cruces de promedio móvil exponencial (EMA) con un filtro de rango verdadero promedio (ATR). La estrategia tiene como objetivo identificar tendencias fuertes y ejecutar operaciones en condiciones de mercado de alta volatilidad, mejorando efectivamente la relación Sharpe y el rendimiento general. Utiliza EMAs de 50 períodos y 200 períodos para capturar tendencias de mediano a largo plazo, mientras que utiliza el indicador ATR para evaluar la volatilidad del mercado, operando solo cuando la volatilidad excede un umbral específico.
La lógica básica consiste en dos componentes principales: determinación de tendencia y filtrado de volatilidad. Para la determinación de tendencia, la estrategia utiliza una EMA de 50 períodos como línea rápida y una EMA de 200 períodos como línea lenta, generando señales largas cuando la línea rápida cruza por encima de la línea lenta y señales cortas cuando cruza por debajo. Para el filtrado de volatilidad, la estrategia calcula el valor ATR de 14 períodos y lo convierte en un porcentaje del precio, solo permitiendo posiciones cuando el porcentaje ATR excede un umbral preestablecido (por defecto 2%).
Esta estrategia combina indicadores técnicos clásicos con conceptos modernos de gestión de riesgos. Al utilizar cruces EMA para capturar tendencias mientras se emplea un filtro ATR para controlar el tiempo de negociación, la estrategia mantiene la simplicidad al tiempo que logra una gran practicidad. Si bien existen algunos riesgos inherentes, la estrategia aún tiene un buen valor de aplicación a través de la optimización adecuada y medidas de gestión de riesgos. Se aconseja a los operadores que ajusten los parámetros de acuerdo con las características específicas del mercado y sus propias preferencias de riesgo en aplicaciones prácticas.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-27 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover with ATR Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Inputs for Moving Averages fastLength = input.int(50, title="Fast EMA Length") slowLength = input.int(200, title="Slow EMA Length") // Inputs for ATR Filter atrLength = input.int(14, title="ATR Length") atrMultiplier = input.float(1.5, title="ATR Multiplier") atrThreshold = input.float(0.02, title="ATR Threshold (%)") // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Calculate ATR atr = ta.atr(atrLength) // Convert ATR to a percentage of price atrPct = atr / close // Define Long Condition (Cross and ATR filter) longCondition = ta.crossover(fastEMA, slowEMA) and atrPct > atrThreshold / 100 // Define Short Condition shortCondition = ta.crossunder(fastEMA, slowEMA) and atrPct > atrThreshold / 100 // Define Exit Conditions exitConditionLong = ta.crossunder(fastEMA, slowEMA) exitConditionShort = ta.crossover(fastEMA, slowEMA) // Long Entry if (longCondition) strategy.entry("Long", strategy.long) // Short Entry if (shortCondition) strategy.entry("Short", strategy.short) // Long Exit if (exitConditionLong) strategy.close("Long") // Short Exit if (exitConditionShort) strategy.close("Short") // Plot EMAs for visual reference plot(fastEMA, title="50 EMA", color=color.blue) plot(slowEMA, title="200 EMA", color=color.red) // Plot ATR for reference plot(atrPct, title="ATR Percentage", color=color.orange, style=plot.style_line) hline(atrThreshold / 100, "ATR Threshold", color=color.green)