Esta estrategia es un sistema de negociación cuantitativo que combina múltiples promedios móviles exponenciales (EMA), índice de fuerza relativa (RSI) y divergencia de convergencia de promedios móviles (MACD). La estrategia forma un marco de decisión comercial completo a través de la coordinación de múltiples indicadores técnicos. Utiliza cuatro líneas EMA (10, 20, 50 y 100 días) como las principales herramientas de juicio de tendencias, combinadas con RSI y MACD como indicadores de confirmación auxiliares, al tiempo que establece stop-loss y take-profit para controlar el riesgo.
La lógica central de la estrategia se basa en los siguientes elementos clave:
Esta es una estrategia de trading cuantitativa bien diseñada con lógica rigurosa. A través del uso combinado de múltiples indicadores técnicos, puede capturar eficazmente las tendencias del mercado manteniendo mecanismos integrales de control de riesgos. La estrategia tiene un potencial de optimización significativo, y a través de una mejora y ajuste continuos, se pueden esperar mejores resultados comerciales. Se recomienda realizar una prueba posterior exhaustiva antes de la negociación en vivo y ajustar los parámetros de acuerdo con las condiciones específicas del mercado.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-04 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("4 EMA Strategy with RSI & MACD", shorttitle="4 EMA + RSI + MACD", overlay=true) // Input EMA periods ema1 = input(10, title="EMA 1") ema2 = input(20, title="EMA 2") ema3 = input(50, title="EMA 3") ema4 = input(100, title="EMA 4") // Input RSI & MACD settings rsiLength = input(14, title="RSI Length") rsiOverbought = input(70, title="RSI Overbought") rsiOversold = input(30, title="RSI Oversold") macdFast = input(12, title="MACD Fast Length") macdSlow = input(26, title="MACD Slow Length") macdSignal = input(9, title="MACD Signal Length") // Stop Loss and Take Profit Inputs stopLossPct = input.float(1.5, title="Stop Loss %") / 100 takeProfitPct = input.float(3, title="Take Profit %") / 100 // Calculate EMAs ema_1 = ta.ema(close, ema1) ema_2 = ta.ema(close, ema2) ema_3 = ta.ema(close, ema3) ema_4 = ta.ema(close, ema4) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Calculate MACD [macdLine, signalLine, _] = ta.macd(close, macdFast, macdSlow, macdSignal) // Plot EMAs plot(ema_1, color=color.blue, title="EMA 10") plot(ema_2, color=color.green, title="EMA 20") plot(ema_3, color=color.orange, title="EMA 50") plot(ema_4, color=color.red, title="EMA 100") // Entry Conditions longCondition = ta.crossover(ema_1, ema_4) and ta.crossover(ema_2, ema_3) and rsi > 50 and macdLine > signalLine shortCondition = ta.crossunder(ema_1, ema_4) and ta.crossunder(ema_2, ema_3) and rsi < 50 and macdLine < signalLine // Declare Stop Loss and Take Profit Variables var float stopLossPrice = na var float takeProfitPrice = na var line stopLossLine = na var line takeProfitLine = na // Long Trade if (longCondition) strategy.entry("Buy", strategy.long) stopLossPrice := strategy.position_avg_price * (1 - stopLossPct) takeProfitPrice := strategy.position_avg_price * (1 + takeProfitPct) // stopLossLine := line.new(bar_index, stopLossPrice, bar_index + 1, stopLossPrice, color=color.red, width=2, style=line.style_dotted) // takeProfitLine := line.new(bar_index, takeProfitPrice, bar_index + 1, takeProfitPrice, color=color.green, width=2, style=line.style_dotted) // Short Trade if (shortCondition) strategy.entry("Sell", strategy.short) stopLossPrice := strategy.position_avg_price * (1 + stopLossPct) takeProfitPrice := strategy.position_avg_price * (1 - takeProfitPct) // stopLossLine := line.new(bar_index, stopLossPrice, bar_index + 1, stopLossPrice, color=color.red, width=2, style=line.style_dotted) // takeProfitLine := line.new(bar_index, takeProfitPrice, bar_index + 1, takeProfitPrice, color=color.green, width=2, style=line.style_dotted) // Clear Lines on Trade Exit // if (strategy.position_size == 0) // line.delete(stopLossLine) // line.delete(takeProfitLine) // Exit Trades if (strategy.position_size > 0) strategy.exit("Sell", from_entry="Buy", stop=stopLossPrice, limit=takeProfitPrice) if (strategy.position_size < 0) strategy.exit("Cover", from_entry="Sell", stop=stopLossPrice, limit=takeProfitPrice)