
La estrategia es un sistema de comercio de seguimiento de tendencias que combina análisis de múltiples marcos de tiempo para operar en un marco de tiempo de 15 minutos mediante la integración de indicadores técnicos como el índice de movimiento medio (EMA), el índice de tendencia promedio (ADX) y el índice de fuerza relativa (RSI). La estrategia utiliza un método conservador de gestión de posiciones, controlando el riesgo de cada operación dentro del 2% del total de la cuenta para obtener ganancias estables a largo plazo.
La estrategia utiliza el cruce de los EMA rápidos (de 50 ciclos) y los EMA lentos (de 200 ciclos) para identificar la dirección de la tendencia y, en combinación con el indicador ADX, para confirmar la fuerza de la tendencia. Cuando el valor de ADX es mayor que 25, el mercado está en un estado de fuerte tendencia. El indicador RSI se utiliza para identificar el estado de sobreventa y sobreventa, y el RSI alcanza los 70 puntos de la posición baja y los 30 puntos de la posición baja.
La estrategia muestra un buen potencial de negociación a través de un método de análisis técnico multidimensional y un estricto control de riesgos. Si bien es estable en la retrospectiva, aún necesita ser plenamente verificada en el entorno real. El diseño modular de la estrategia le da una gran adaptabilidad y espacio para la optimización, que se puede ajustar de manera flexible según los cambios en el mercado.
/*backtest
start: 2024-02-20 00:00:00
end: 2025-02-18 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"DOGE_USDT"}]
*/
//@version=5
strategy("DOGE Enhanced Trend Following Strategy",
overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=5,
commission_value=0.1,
slippage=2)
// === INPUT PARAMETERS ===
emaFastLength = input(50, title="Fast EMA Length")
emaSlowLength = input(200, title="Slow EMA Length")
adxLength = input.int(14, title="ADX Length")
adxSmoothing = input.int(14, title="ADX Smoothing Factor")
adxThreshold = input.float(25, title="ADX Trend Strength Threshold")
rsiLength = input.int(14, title="RSI Length")
rsiOverbought = input.float(70, title="RSI Overbought Level")
rsiOversold = input.float(30, title="RSI Oversold Level")
takeProfitMultiplier = input.float(1.03, title="Take Profit Multiplier", tooltip="Set a dynamic take profit level, e.g., 1.03 = 3% profit")
stopLossMultiplier = input.float(0.97, title="Stop Loss Multiplier", tooltip="Set stop loss level, e.g., 0.97 = 3% below entry price")
// === INDICATOR CALCULATIONS ===
emaFast = ta.ema(close, emaFastLength)
emaSlow = ta.ema(close, emaSlowLength)
[dip, dim, adxValue] = ta.dmi(adxLength, adxSmoothing)
rsiValue = ta.rsi(close, rsiLength)
// === MULTI-TIMEFRAME CONFIRMATION ===
emaFastHTF = request.security(syminfo.tickerid, "240", ta.ema(close, emaFastLength))
emaSlowHTF = request.security(syminfo.tickerid, "240", ta.ema(close, emaSlowLength))
// === CONDITIONS FOR TRADE ENTRY ===
bullishTrend = ta.crossover(emaFast, emaSlow) and adxValue > adxThreshold and rsiValue > rsiOversold
bearishTrend = ta.crossunder(emaFast, emaSlow) and adxValue > adxThreshold and rsiValue < rsiOverbought
// === TRADE EXECUTION ===
if (bullishTrend)
strategy.entry("Long", strategy.long)
strategy.exit("TakeProfit_Long", from_entry="Long", limit=close * takeProfitMultiplier, stop=close * stopLossMultiplier)
if (bearishTrend)
strategy.entry("Short", strategy.short)
strategy.exit("TakeProfit_Short", from_entry="Short", limit=close * (2 - takeProfitMultiplier), stop=close * (2 - stopLossMultiplier))
// === VISUAL INDICATORS AND PLOTTING ===
plot(emaFast, color=color.blue, linewidth=2, title="Fast EMA")
plot(emaSlow, color=color.red, linewidth=2, title="Slow EMA")
hline(adxThreshold, "ADX Threshold", color=color.gray, linestyle=hline.style_dotted)
bgcolor(bullishTrend ? color.new(color.green, 85) : bearishTrend ? color.new(color.red, 85) : na)
// === ALERTS ===
alertcondition(bullishTrend, title="Buy Signal", message="Bullish trend detected. Consider entering a long position.")
alertcondition(bearishTrend, title="Sell Signal", message="Bearish trend detected. Consider entering a short position.")
// === STRATEGY SETTINGS FOR REALISTIC TESTING ===
strategy.close("Long", when=rsiValue > rsiOverbought, comment="Exit Long on RSI Overbought")
strategy.close("Short", when=rsiValue < rsiOversold, comment="Exit Short on RSI Oversold")