Esta es una estrategia de negociación que combina el impulso y la tendencia, utilizando múltiples promedios móviles exponenciales (EMA), índice de fuerza relativa (RSI) y oscilador estocástico para identificar las tendencias y el impulso del mercado.
La estrategia emplea 5 EMA con diferentes períodos (8, 13, 21, 34, 55) para determinar la dirección de la tendencia. Una tendencia alcista se identifica cuando las EMA de período más corto están por encima de las EMA de período más largo, y viceversa para las tendencias bajistas. El RSI confirma el impulso con diferentes umbrales de entrada y salida. El oscilador estocástico sirve como un tercer filtro para evitar condiciones de sobrecompra y sobreventa.
La estrategia proporciona una solución comercial integral mediante la combinación de múltiples indicadores técnicos con un sistema de gestión de riesgos robusto. Sus principales fortalezas se encuentran en su mecanismo de filtrado de múltiples capas y gestión de riesgos dinámicos, pero todavía requiere optimización basada en características específicas del mercado. La implementación exitosa requiere un monitoreo y ajuste continuos, especialmente la adaptabilidad de parámetros en diferentes entornos de mercado. A través de las direcciones de optimización propuestas, la estrategia tiene el potencial de mejorar aún más su estabilidad y rentabilidad.
/*backtest start: 2024-11-04 00:00:00 end: 2024-12-04 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Combined Strategy (Modernized)", overlay = true) //----------// // MOMENTUM // //----------// ema8 = ta.ema(close, 8) ema13 = ta.ema(close, 13) ema21 = ta.ema(close, 21) ema34 = ta.ema(close, 34) ema55 = ta.ema(close, 55) // Plotting EMAs for visualization plot(ema8, color=color.red, title="EMA 8", linewidth=1) plot(ema13, color=color.orange, title="EMA 13", linewidth=1) plot(ema21, color=color.yellow, title="EMA 21", linewidth=1) plot(ema34, color=color.aqua, title="EMA 34", linewidth=1) plot(ema55, color=color.lime, title="EMA 55", linewidth=1) longEmaCondition = ema8 > ema13 and ema13 > ema21 and ema21 > ema34 and ema34 > ema55 exitLongEmaCondition = ema13 < ema55 shortEmaCondition = ema8 < ema13 and ema13 < ema21 and ema21 < ema34 and ema34 < ema55 exitShortEmaCondition = ema13 > ema55 // ---------- // // OSCILLATORS // // ----------- // rsi = ta.rsi(close, 14) longRsiCondition = rsi < 70 and rsi > 40 exitLongRsiCondition = rsi > 70 shortRsiCondition = rsi > 30 and rsi < 60 exitShortRsiCondition = rsi < 30 // Stochastic k = ta.stoch(close, high, low, 14) d = ta.sma(k, 3) longStochasticCondition = k < 80 exitLongStochasticCondition = k > 95 shortStochasticCondition = k > 20 exitShortStochasticCondition = k < 5 //----------// // STRATEGY // //----------// // ATR for dynamic stop loss and take profit atr = ta.atr(14) stopLossMultiplier = 2 takeProfitMultiplier = 4 stopLoss = atr * stopLossMultiplier takeProfit = atr * takeProfitMultiplier // Trailing stop settings trailStopMultiplier = 1.5 trailOffset = atr * trailStopMultiplier // Risk management: dynamic position sizing riskPerTrade = 0.01 // 1% risk per trade positionSize = strategy.equity * riskPerTrade / stopLoss longCondition = longEmaCondition and longRsiCondition and longStochasticCondition and strategy.position_size == 0 exitLongCondition = (exitLongEmaCondition or exitLongRsiCondition or exitLongStochasticCondition) and strategy.position_size > 0 if (longCondition) strategy.entry("LONG", strategy.long, qty=positionSize) strategy.exit("Take Profit Long", "LONG", stop=close - stopLoss, limit=close + takeProfit, trail_offset=trailOffset) if (exitLongCondition) strategy.close("LONG") shortCondition = shortEmaCondition and shortRsiCondition and shortStochasticCondition and strategy.position_size == 0 exitShortCondition = (exitShortEmaCondition or exitShortRsiCondition or exitShortStochasticCondition) and strategy.position_size < 0 if (shortCondition) strategy.entry("SHORT", strategy.short, qty=positionSize) strategy.exit("Take Profit Short", "SHORT", stop=close + stopLoss, limit=close - takeProfit, trail_offset=trailOffset) if (exitShortCondition) strategy.close("SHORT")