
La estrategia es un sistema de comercio cuantitativo que combina una combinación de múltiples índices de promedio móvil (EMA), índice de fuerza relativa (RSI) y un indicador de dispersión de tendencia de promedio móvil (MACD). La estrategia forma un marco completo para la toma de decisiones comerciales a través de la combinación de múltiples indicadores técnicos. La estrategia utiliza las cuatro líneas de tendencia EMA de 10, 20, 50 y 100 días como herramientas principales de determinación de tendencias, y combina el RSI y el MACD como indicadores de confirmación auxiliares, al tiempo que establece paros y paradas para controlar el riesgo.
La lógica central de la estrategia se basa en los siguientes elementos clave:
Se trata de una estrategia de trading cuantificada, de diseño razonable y riguroso. La combinación de múltiples indicadores técnicos permite capturar de manera efectiva las tendencias del mercado, pero también cuenta con un mecanismo de control de riesgos completo. La estrategia tiene un gran espacio de optimización, con el fin de obtener mejores resultados comerciales a través de la mejora y el ajuste continuos. Se recomienda realizar una verificación de retroalimentación adecuada antes de la negociación en vivo y ajustar adecuadamente la configuración de los parámetros según 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)