
Esta es una estrategia de seguimiento de tendencias basada en múltiples cruces de medias móviles exponenciales (EMA). Esta estrategia utiliza la relación de cruce de la EMA de corto plazo de 10 períodos, la EMA de mediano plazo de 50 períodos y la EMA de largo plazo de 200 períodos para capturar las tendencias del mercado e ingresar en operaciones largas y cortas cuando se cumplen las condiciones. La idea central de la estrategia es filtrar el ruido del mercado a través de promedios móviles de múltiples marcos de tiempo, identificar la dirección de la tendencia principal y obtener ganancias cuando la tendencia continúa.
La estrategia utiliza un sistema de cruce de triple EMA como mecanismo de generación de señales comerciales. Específicamente:
Esta estrategia es un sistema clásico de seguimiento de tendencias. Mediante el uso coordinado de múltiples EMA, no solo garantiza la comprensión de la tendencia principal, sino que también permite la detección oportuna de pérdidas y ganancias. Si bien existe un cierto desfase, mediante configuraciones razonables de parámetros y gestión de riesgos, aún se pueden obtener retornos estables en el mercado en tendencia. Hay mucho margen para optimizar la estrategia y se puede mejorar el rendimiento introduciendo otros indicadores técnicos y mejorando las reglas comerciales.
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-09 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("EMA Crossover Strategy (Enhanced Debug)", overlay=true)
// Inputs for EMA periods
shortEMA = input.int(10, title="Short EMA Period")
mediumEMA = input.int(50, title="Medium EMA Period")
longEMA = input.int(200, title="Long EMA Period")
// Calculating EMAs
emaShort = ta.ema(close, shortEMA)
emaMedium = ta.ema(close, mediumEMA)
emaLong = ta.ema(close, longEMA)
// Plot EMAs
plot(emaShort, color=color.green, title="Short EMA")
plot(emaMedium, color=color.blue, title="Medium EMA")
plot(emaLong, color=color.red, title="Long EMA")
// Conditions for entry and exit
longCondition = close > emaLong and ta.crossover(emaShort, emaMedium) and emaMedium > emaLong
shortCondition = close < emaLong and ta.crossunder(emaShort, emaMedium) and emaMedium < emaLong
closeLongCondition = ta.crossunder(emaShort, emaMedium)
closeShortCondition = ta.crossover(emaShort, emaMedium)
// Debugging labels for unexpected behavior
if (ta.crossover(emaShort, emaLong) and not ta.crossover(emaShort, emaMedium))
label.new(bar_index, high, "Short > Long", style=label.style_circle, color=color.red, textcolor=color.white)
// Debugging EMA relationships
if (emaMedium <= emaLong)
label.new(bar_index, high, "Medium < Long", style=label.style_cross, color=color.orange, textcolor=color.white)
// Entry logic
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
// Exit logic
if (closeLongCondition)
strategy.close("Long")
if (closeShortCondition)
strategy.close("Short")
// Display labels for signals
plotshape(series=longCondition, style=shape.labelup, color=color.green, location=location.belowbar, title="Buy Signal")
plotshape(series=shortCondition, style=shape.labeldown, color=color.red, location=location.abovebar, title="Sell Signal")