
La estrategia es un sistema de comercio de seguimiento de tendencias basado en múltiples indicadores técnicos, que combina los tres indicadores técnicos clásicos, el promedio móvil (EMA), el promedio móvil de dispersión (MACD) y el indicador relativamente débil (RSI), para operar mediante la captura de los cambios y el dinamismo de las tendencias del mercado. La estrategia utiliza configuraciones de parámetros como el ciclo rápido (EMA9) y el lento (EMA21), el MACD (MACD) (12,26,9) y el RSI (RSI) para emitir señales de negociación cuando el indicador cruza y supera los umbrales.
La lógica central de la estrategia es identificar los puntos de inflexión de las tendencias del mercado a través de la confirmación sincronizada de múltiples indicadores técnicos. Concretamente, la confirmación de señales incluye los siguientes tres aspectos:
La estrategia capta los cambios en las tendencias del mercado a través de la verificación cruzada de múltiples indicadores técnicos y tiene una mejor fiabilidad y adaptabilidad. Sin embargo, en la aplicación real, se debe tener en cuenta el retraso de la señal y los problemas de exceso de comercio. Se recomienda la optimización mediante la introducción de parámetros de adaptación, mecanismos de suspensión y identificación del entorno del mercado para mejorar la estabilidad y la rentabilidad de la estrategia.
/*backtest
start: 2024-02-20 00:00:00
end: 2025-02-17 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA + MACD + RSI Strategy with Long and Short", overlay=true)
// Input parameters for MACD, EMA, and RSI
fast_ema_length = input.int(9, title="Fast EMA Length", minval=1)
slow_ema_length = input.int(21, title="Slow EMA Length", minval=1)
macd_short_length = input.int(12, title="MACD Short Length", minval=1)
macd_long_length = input.int(26, title="MACD Long Length", minval=1)
macd_signal_length = input.int(9, title="MACD Signal Length", minval=1)
rsi_length = input.int(14, title="RSI Length", minval=1)
rsi_oversold_level = input.int(30, title="RSI Oversold Level", minval=1)
rsi_overbought_level = input.int(70, title="RSI Overbought Level", minval=1)
// Calculate the MACD line and Signal line
[macdLine, signalLine, _] = ta.macd(close, macd_short_length, macd_long_length, macd_signal_length)
// Calculate the EMAs
fast_ema = ta.ema(close, fast_ema_length)
slow_ema = ta.ema(close, slow_ema_length)
// Calculate the RSI
rsi = ta.rsi(close, rsi_length)
// Conditions for long entry (bullish)
macd_bullish_crossover = ta.crossover(macdLine, signalLine) // MACD line crosses above Signal line
ema_bullish_crossover = ta.crossover(fast_ema, slow_ema) // Fast EMA crosses above Slow EMA
rsi_above_30 = rsi > rsi_oversold_level // RSI above 30 (not oversold)
long_condition = macd_bullish_crossover and ema_bullish_crossover and rsi_above_30
// Conditions for short entry (bearish)
macd_bearish_crossover = ta.crossunder(macdLine, signalLine) // MACD line crosses below Signal line
ema_bearish_crossover = ta.crossunder(fast_ema, slow_ema) // Fast EMA crosses below Slow EMA
rsi_below_70 = rsi < rsi_overbought_level // RSI below 70 (not overbought)
short_condition = macd_bearish_crossover and ema_bearish_crossover and rsi_below_70
// Execute long trade
if (long_condition)
strategy.entry("Long", strategy.long)
// Execute short trade
if (short_condition)
strategy.entry("Short", strategy.short)
// Plot the EMAs and MACD for visualization
plot(fast_ema, color=color.green, linewidth=2, title="Fast EMA")
plot(slow_ema, color=color.red, linewidth=2, title="Slow EMA")
plot(macdLine, color=color.blue, linewidth=2, title="MACD Line")
plot(signalLine, color=color.red, linewidth=2, title="Signal Line")
hline(30, "RSI 30", color=color.green)
hline(70, "RSI 70", color=color.red)
plot(rsi, color=color.purple, linewidth=2, title="RSI")