
Se trata de una estrategia de negociación cuantitativa que combina el cruce de las medias móviles de índices (EMA) y el filtro de la amplitud real media (ATR). La estrategia mejora efectivamente el índice de Sharpe y el rendimiento general de la estrategia al identificar tendencias fuertes y operar en un entorno de mercado con alta volatilidad. La estrategia utiliza EMA de 50 y 200 ciclos para capturar tendencias a medio y largo plazo, mientras que el indicador ATR se utiliza para evaluar la volatilidad del mercado y solo se opera cuando la volatilidad supera un umbral específico.
La lógica central de la estrategia incluye dos partes principales: el juicio de tendencia y el filtro de volatilidad. En el juicio de tendencia, la estrategia utiliza el EMA de 50 ciclos como línea rápida, el EMA de 200 ciclos como línea lenta, y genera una señal de más cuando la línea rápida atraviesa la línea lenta y una señal de vacío cuando se atraviesa. En el filtro de volatilidad, la estrategia calcula el ATR de 14 ciclos y lo convierte en un porcentaje del precio.
Esta es una estrategia que combina los indicadores técnicos clásicos con la filosofía moderna de gestión de riesgos. La estrategia mantiene su simplicidad y tiene una gran utilidad al tiempo que controla el tiempo de negociación mediante la captura de tendencias cruzadas a través de EMA y el uso de filtros ATR. Aunque existen algunos riesgos inherentes, la estrategia sigue teniendo un buen valor de aplicación a través de medidas de optimización y gestión de riesgos razonables.
/*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)