
Deje de usar el RSI de 14 ciclos. Esta estrategia comprime el ciclo RSI directamente a 8, con un mínimo de 14 puntos de dinamismo, especialmente para capturar estallidos de líneas cortas. La estrategia RSI tradicional se enfrenta repetidamente en mercados convulsos, y esta combinación se comporta con mayor estabilidad en fluctuaciones de alta frecuencia.
La lógica central es muy directa: se activa una señal de múltiples cabezas cuando el RSI cambia de intensidad a> 14 y una señal de cabezas vacías a <-14. Al mismo tiempo, se requiere un promedio de transacciones de más de 13 ciclos para garantizar que no haya falsas rupturas. Este diseño se adelanta 1-2 ciclos a la simple señal de RSI de sobreventa y sobreventa, para capturar el momento dorado del inicio de la tendencia.
El stop loss es de 4.15%, el stop loss es de 1.85%, y el ratio de riesgo a beneficio es de 2.24:1. Esta proporción es radical en la estrategia de descascaramiento, pero junto con el stop loss móvil de 2.55%, el control de riesgo real es más estricto.
La clave está en el diseño del stop-loss móvil: una vez que el precio se mueve en la dirección favorable, la línea de stop-loss seguirá el ajuste dinámico de los puntos más altos / más bajos. Esto significa que se puede bloquear la mayor parte de las ganancias incluso si no se alcanza el objetivo de stop-loss del 4.15%.
El volumen de transacción debe exceder el promedio de 13 ciclos para abrir una posición. Este diseño filtra el 90% de las señales falsas. Muchas estrategias RSI abren posiciones con frecuencia en entornos de baja cantidad, lo que resulta en una respuesta negativa.
El promedio de volumen de transacciones de 13 ciclos es más sensible que el habitual de 20 ciclos y permite identificar más rápidamente los flujos de capital. El multiplicador de 1 no parece ser alto, pero combinado con la rápida respuesta del RSI de 8 ciclos, es suficiente para seleccionar oportunidades de verdadera ruptura.
La entrada múltiple requiere que se cumpla una de las tres condiciones: el RSI tiene una dinámica > 14, el RSI rebota desde la zona de oversold y el RSI atraviesa la línea de oversold. Este diseño es más flexible que el de una sola condición y se adapta a diferentes condiciones de mercado.
La línea de venta excesiva se establece en 10, la línea de compra excesiva en 90, más extrema que la tradicional 30⁄70. La ventaja de hacerlo es reducir las señales falsas, la desventaja es que es posible perder algunas oportunidades. Pero para la estrategia de despeje, no se debe perder ni cometer errores.
Esta estrategia es más adecuada para criptomonedas, pares de divisas extranjeras y acciones populares, entre otras variedades de alta volatilidad. Se obtienen grandes descuentos en acciones o bonos de blue-chip de baja volatilidad.
La mejor ventana de tiempo es el período de superposición de la hora de negociación de Europa y los Estados Unidos, cuando la fluidez es mejor y el filtro de volumen de transacción es más efectivo. La hora de Asia, debido a la baja cantidad de transacciones, la calidad de la señal disminuye.
Los datos de retrospectiva muestran que la estrategia presenta un riesgo de pérdidas continuas, especialmente en mercados de oscilación horizontal. El RSI de 8 períodos es demasiado sensible y es fácil de detener repetidamente en oscilaciones intermitentes.
Se recomienda que el límite de riesgo individual no exceda el 2% de la cuenta y que se suspenda la negociación después de 3 pérdidas consecutivas. La retroalimentación histórica no representa ganancias futuras, y las operaciones en vivo requieren una estricta administración de fondos y control psicológico.
/*backtest
start: 2024-09-29 00:00:00
end: 2025-09-26 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Bybit","currency":"ETH_USDT","balance":500000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MonkeyPhone
//@version=5
strategy("RSI Momentum Scalper", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, calc_on_order_fills=true)
// Trading Mode Selection
tradeMode = input.string("Both", title="Trade Mode", options=["Both", "Long Only", "Short Only"])
// RSI Settings
rsiLength = input.int(8, title="RSI Length", minval=2, maxval=30)
rsiOverbought = input.int(90, title="RSI Overbought", minval=60, maxval=99)
rsiOversold = input.int(10, title="RSI Oversold", minval=1, maxval=40)
rsiMomentumThreshold = input.float(14, title="RSI Momentum Threshold", minval=1, maxval=15, step=0.5)
// Volume Settings
volMultiplier = input.float(1, title="Volume Multiplier", minval=1.0, maxval=3.0, step=0.1)
volLookback = input.int(13, title="Volume MA Length", minval=5, maxval=50)
// Exit Settings
takeProfitPercent = input.float(4.15, title="Take Profit %", minval=0.1, maxval=10.0, step=0.1)
stopLossPercent = input.float(1.85, title="Stop Loss %", minval=0.1, maxval=6.0, step=0.1)
trailingStopPercent = input.float(2.55, title="Trailing Stop %", minval=0.1, maxval=4.0, step=0.05)
// Calculate RSI
rsi = ta.rsi(close, rsiLength)
rsiMA = ta.sma(rsi, 3)
// Calculate RSI Momentum
rsiMomentum = rsi - rsi[1]
// Volume Analysis
volMA = ta.sma(volume, volLookback)
highVolume = volume > volMA * volMultiplier
// Entry Conditions - Long
bullishMomentum = rsiMomentum > rsiMomentumThreshold
oversoldBounce = rsi < rsiOversold and rsi > rsi[1]
bullishCross = ta.crossover(rsi, rsiOversold)
longCondition = (bullishMomentum or oversoldBounce or bullishCross) and highVolume and close > close[1]
// Entry Conditions - Short
bearishMomentum = rsiMomentum < -rsiMomentumThreshold
overboughtReversal = rsi > rsiOverbought and rsi < rsi[1]
bearishCross = ta.crossunder(rsi, rsiOverbought)
shortCondition = (bearishMomentum or overboughtReversal or bearishCross) and highVolume and close < close[1]
// Apply trade mode filter
longEntry = longCondition and (tradeMode == "Both" or tradeMode == "Long Only")
shortEntry = shortCondition and (tradeMode == "Both" or tradeMode == "Short Only")
// Entry Logic
strategy.entry("Long", strategy.long, when=longEntry and strategy.position_size == 0)
strategy.entry("Short", strategy.short, when=shortEntry and strategy.position_size == 0)
// Declare and initialize trailing variables
var float highest_since_long = na
var float lowest_since_short = na
var float long_trailing_level = na
var float short_trailing_level = na
var float long_fixed_sl = na
var float long_tp = na
var float short_fixed_sl = na
var float short_tp = na
// Update trailing levels using ternary operators with math.max/min
highest_since_long := strategy.position_size > 0 ? math.max(na(highest_since_long[1]) ? math.max(high, strategy.position_avg_price) : highest_since_long[1], high) : na
lowest_since_short := strategy.position_size < 0 ? math.min(na(lowest_since_short[1]) ? math.min(low, strategy.position_avg_price) : lowest_since_short[1], low) : na
// Calculate exit levels
long_fixed_sl := strategy.position_size > 0 ? strategy.position_avg_price * (1 - stopLossPercent / 100) : na
long_tp := strategy.position_size > 0 ? strategy.position_avg_price * (1 + takeProfitPercent / 100) : na
long_trailing_level := strategy.position_size > 0 ? highest_since_long * (1 - trailingStopPercent / 100) : na
short_fixed_sl := strategy.position_size < 0 ? strategy.position_avg_price * (1 + stopLossPercent / 100) : na
short_tp := strategy.position_size < 0 ? strategy.position_avg_price * (1 - takeProfitPercent / 100) : na
short_trailing_level := strategy.position_size < 0 ? lowest_since_short * (1 + trailingStopPercent / 100) : na
// Effective stop loss levels
effective_long_sl = strategy.position_size > 0 ? math.max(long_fixed_sl, long_trailing_level) : na
effective_short_sl = strategy.position_size < 0 ? math.min(short_fixed_sl, short_trailing_level) : na
// Exit Logic
strategy.exit("Long Exit", "Long", limit=long_tp, stop=effective_long_sl, when=strategy.position_size > 0)
strategy.exit("Short Exit", "Short", limit=short_tp, stop=effective_short_sl, when=strategy.position_size < 0)
// Plot TP, fixed SL, and trailing SL levels on chart when in position
plot(strategy.position_size > 0 ? long_tp : na, title="Long TP", color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0 ? long_fixed_sl : na, title="Long Fixed SL", color=color.red, style=plot.style_linebr)
plot(strategy.position_size > 0 ? long_trailing_level : na, title="Long Trailing SL", color=color.orange, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_tp : na, title="Short TP", color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_fixed_sl : na, title="Short Fixed SL", color=color.red, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_trailing_level : na, title="Short Trailing SL", color=color.orange, style=plot.style_linebr)
// Alerts
alertcondition(longEntry, title="Long Entry Alert", message="RSI Momentum Long Signal")
alertcondition(shortEntry, title="Short Entry Alert", message="RSI Momentum Short Signal")