
Esta es una estrategia de seguimiento de tendencias que combina una línea de equilibrio cruzada con un indicador relativamente débil (el RSI). Esta estrategia determina la dirección de la tendencia del mercado a través de la cruz de las medias móviles a corto y largo plazo, mientras que utiliza el RSI como un filtro de masa para confirmar la fuerza de la tendencia, lo que mejora la fiabilidad de las señales de negociación. La estrategia también incluye paros y paradas porcentuales para la gestión del riesgo.
La estrategia utiliza un promedio móvil simple de 9 y 21 períodos (SMA) como el indicador de tendencia principal. Cuando la media corta cruza hacia arriba la media larga y el RSI es mayor que 50, el sistema genera una señal de multiplicación; cuando la media corta cruza hacia abajo la media larga y el RSI es menor que 50, el sistema genera una señal de parálisis. Este diseño asegura que la dirección de las operaciones esté en consonancia con la tendencia y el movimiento del mercado.
Esta es una estrategia de seguimiento de tendencias estructurada y con claridad lógica. La dirección básica de la tendencia se proporciona mediante el cruce de la línea de equilibrio, el RSI proporciona la confirmación de la dinámica, y luego se combina con el mecanismo de gestión de riesgos para formar un sistema de comercio completo.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Moving Average Crossover + RSI Strategy", overlay=true, shorttitle="MA RSI Strategy")
// --- Input Parameters ---
shortMA = input.int(9, title="Short MA Period", minval=1)
longMA = input.int(21, title="Long MA Period", minval=1)
rsiLength = input.int(14, title="RSI Length", minval=1)
rsiOverbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=100)
rsiOversold = input.int(30, title="RSI Oversold Level", minval=0, maxval=50)
stopLossPercent = input.float(1, title="Stop Loss Percentage", minval=0.1, maxval=10.0) / 100
takeProfitPercent = input.float(2, title="Take Profit Percentage", minval=0.1, maxval=10.0) / 100
// --- Calculate Moving Averages ---
shortMA_value = ta.sma(close, shortMA)
longMA_value = ta.sma(close, longMA)
// --- Calculate RSI ---
rsi_value = ta.rsi(close, rsiLength)
// --- Buy and Sell Conditions ---
longCondition = ta.crossover(shortMA_value, longMA_value) and rsi_value > 50
shortCondition = ta.crossunder(shortMA_value, longMA_value) and rsi_value < 50
// --- Plot Moving Averages ---
plot(shortMA_value, color=color.blue, linewidth=2, title="Short MA")
plot(longMA_value, color=color.red, linewidth=2, title="Long MA")
// --- Plot RSI (Optional) ---
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(rsi_value, color=color.purple, title="RSI")
// --- Strategy Execution ---
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
// --- Risk Management (Stop Loss and Take Profit) ---
longStopLoss = close * (1 - stopLossPercent)
longTakeProfit = close * (1 + takeProfitPercent)
shortStopLoss = close * (1 + stopLossPercent)
shortTakeProfit = close * (1 - takeProfitPercent)
// Set the stop loss and take profit for long and short positions
strategy.exit("Long Exit", from_entry="Long", stop=longStopLoss, limit=longTakeProfit)
strategy.exit("Short Exit", from_entry="Short", stop=shortStopLoss, limit=shortTakeProfit)