Estrategia de Trading Con RSI en TradingView

Señal de compra con RSI
¿Cómo codificar una Estrategia Potente de Retroceso Basada en el RSI con Pine Script?
Las estrategias simples pueden ser tan poderosas como las estrategias complejas. Este artículo presenta una de mis estrategias favoritas utilizadas con el RSI.
La Estrategia Simple de Reversión con el RSI
El RSI es conocido como el indicador técnico acotado número uno. Entre la gran cantidad de técnicas y estrategias aplicadas sobre él, siempre surge una en particular: la técnica del retroceso y, más específicamente, la técnica simple del retroceso, que espera la confirmación de la salida del RSI de los niveles de sobreventa y sobrecompra antes de generar una señal.
Las condiciones de trading de la estrategia simple de retroceso son las siguientes:
- Se genera una señal de compra (long) cuando el RSI supera el nivel de sobreventa y luego retrocede hacia él sin superar un nivel umbral. Por ejemplo, el RSI de 5 períodos supera el nivel 20, no supera el 33 y luego retrocede a un nivel entre 20 y 33.
- Se genera una señal de venta (short) cuando el RSI rompe el nivel de sobrecompra y luego retrocede hacia él sin romper un nivel umbral. Por ejemplo, el RSI de 5 períodos rompe el nivel 80, no rompe el 67 y luego retrocede a un nivel entre 80 y 67.
La siguiente figura muestra un ejemplo de dos operaciones alcistas generadas con esta estrategia.

Señal de compra con RSI
La siguiente figura muestra un ejemplo de una operación bajista generada con esta estrategia.

Señal de venta del RSI con TradingView
“Los niveles en rojo son los niveles de sobrecompra y sobreventa, mientras que los niveles en naranja son los niveles de umbral.”
Codificación de la estrategia en TradingView
Codificar la estrategia en TradingView es sencillo y simple. La forma en que lo haremos se muestra a continuación:
//@version=6 strategy("Estrategia RSI con Zonas de Retroceso", overlay=true) rsiLength = input.int(5, "Longitud RSI", minval=1) sobreventaLevel = input.float(20, "Nivel de Sobreventa", minval=0, maxval=100) sobrecompraLevel = input.float(80, "Nivel de Sobrecompra", minval=0, maxval=100) umbralInferior = input.float(33, "Umbral Inferior (para long)", minval=0, maxval=100) umbralSuperior = input.float(67, "Umbral Superior (para short)", minval=0, maxval=100) rsiValue = ta.rsi(close, rsiLength) var superaSobreventa = false var rompeSobrecompra = false var rsiSuperoUmbralInferior = false var rsiRompioUmbralSuperior = false // Condición 1: RSI supera nivel de sobreventa if (rsiValue > sobreventaLevel and ta.rsi(close[1], rsiLength) <= sobreventaLevel) superaSobreventa := true // Verificar si RSI rompe umbral inferior (para reiniciar condición) if (rsiValue > umbralInferior) rsiSuperoUmbralInferior := true // Reiniciar condición de compra si RSI supera umbral inferior if (superaSobreventa and rsiSuperoUmbralInferior) superaSobreventa := false rsiSuperoUmbralInferior := false // Condición 2: RSI rompe nivel de sobrecompra if (rsiValue < sobrecompraLevel and ta.rsi(close[1], rsiLength) >= sobrecompraLevel) rompeSobrecompra := true // Verificar si RSI rompe umbral superior (para reiniciar condición) if (rsiValue < umbralSuperior) rsiRompioUmbralSuperior := true // Reiniciar condición de venta si RSI rompe umbral superior if (rompeSobrecompra and rsiRompioUmbralSuperior) rompeSobrecompra := false rsiRompioUmbralSuperior := false longCondition = superaSobreventa and rsiValue >= sobreventaLevel and rsiValue <= umbralInferior and not rsiSuperoUmbralInferior shortCondition = rompeSobrecompra and rsiValue <= sobrecompraLevel and rsiValue >= umbralSuperior and not rsiRompioUmbralSuperior if (longCondition) strategy.entry("Long", strategy.long) superaSobreventa := false if (shortCondition) strategy.entry("Short", strategy.short) rompeSobrecompra := false plot(rsiValue, "RSI", color=color.blue) hline(sobreventaLevel, "Nivel Sobreventa", color=color.green) hline(sobrecompraLevel, "Nivel Sobrecompra", color=color.red) hline(umbralInferior, "Umbral Inferior", color=color.green, linestyle=hline.style_dashed) hline(umbralSuperior, "Umbral Superior", color=color.red, linestyle=hline.style_dashed) rsiPlot = plot(rsiValue, color = na, editable = false) fill(plot(sobreventaLevel, color = na, editable = false), plot(umbralInferior, color = na, editable = false), color=color.new(color.green, 90), title="Zona Compra") fill(plot(sobrecompraLevel, color = na, editable = false), plot(umbralSuperior, color = na, editable = false), color=color.new(color.red, 90), title="Zona Venta") var table t = table.new(position.top_right, 1, 2) table.cell(t, 0, 0, "RSI(" + str.tostring(rsiLength) + ")", bgcolor = color.blue, text_color = color.white) table.cell(t, 0, 1, str.tostring(rsiValue, "#.##"), bgcolor = color.blue, text_color = color.white)
Este script implementa exactamente las reglas que has descrito:
Señales de compra (long):
- Se activa cuando el RSI supera el nivel de sobreventa (predeterminado: 20)
- No debe superar el umbral inferior (predeterminado: 33)
- Luego debe retroceder a un nivel entre el nivel de sobreventa y el umbral inferior
Señales de venta (short):
- Se activa cuando el RSI rompe el nivel de sobrecompra (predeterminado: 80)
- No debe romper el umbral superior (predeterminado: 67)
- Luego debe retroceder a un nivel entre el nivel de sobrecompra y el umbral superior
Características del script:
- Parámetros configurables para todos los niveles y la longitud del RSI
- Visualización con líneas para todos los niveles importantes
- Zonas sombreadas para identificar fácilmente las áreas de retroceso
- Una tabla que muestra el valor actual del RSI
- Lógica para reiniciar las condiciones cuando se cumplen o cuando el RSI cruza umbrales específicos
Para usar el script, simplemente cópialo y pégalo en el editor de Pine Script de TradingView. Puedes ajustar los parámetros según tus preferencias.
Descripción del código del indicador
Ahora vamos a describir el código parte por parte:
Configuración Inicial
//@version=6 strategy("Estrategia RSI con Zonas de Retroceso", overlay=true)
- Indica que usamos Pine Script versión 6
- Define el script como una estrategia (no solo un indicador) con el nombre “Estrategia RSI con Zonas de Retroceso“
- overlay=true significa que se mostrará sobre el gráfico de precios
Parámetros Configurables
rsiLength = input.int(5, "Longitud RSI", minval=1) sobreventaLevel = input.float(20, "Nivel de Sobreventa", minval=0, maxval=100) sobrecompraLevel = input.float(80, "Nivel de Sobrecompra", minval=0, maxval=100) umbralInferior = input.float(33, "Umbral Inferior (para long)", minval=0, maxval=100) umbralSuperior = input.float(67, "Umbral Superior (para short)", minval=0, maxval=100)
Define parámetros que el usuario puede ajustar:
- rsiLength: Períodos para calcular el RSI (predeterminado: 5)
- sobreventaLevel: Nivel de sobreventa (predeterminado: 20)
- sobrecompraLevel: Nivel de sobrecompra (predeterminado: 80)
- umbralInferior: Umbral superior para señales de compra (predeterminado: 33)
- umbralSuperior: Umbral inferior para señales de venta (predeterminado: 67)}
Cálculo del RSI
rsiValue = ta.rsi(close, rsiLength)
- Calcula el RSI basado en el precio de cierre y la longitud configurada
Variables de Seguimiento
var superaSobreventa = false var rompeSobrecompra = false var rsiSuperoUmbralInferior = false var rsiRompioUmbralSuperior = false
Define variables persistentes (usando var) que mantienen su valor entre barras:
- superaSobreventa: Indica si el RSI ha superado el nivel de sobreventa
- rompeSobrecompra: Indica si el RSI ha roto el nivel de sobrecompra
- rsiSuperoUmbralInferior: Indica si el RSI ha superado el umbral inferior
- rsiRompioUmbralSuperior: Indica si el RSI ha roto el umbral superior
Lógica para Señales de Compra (Long)
// Condición 1: RSI supera nivel de sobreventa if (rsiValue > sobreventaLevel and ta.rsi(close[1], rsiLength) <= sobreventaLevel) superaSobreventa := true // Verificar si RSI rompe umbral inferior (para reiniciar condición) if (rsiValue > umbralInferior) rsiSuperoUmbralInferior := true // Reiniciar condición de compra si RSI supera umbral inferior if (superaSobreventa and rsiSuperoUmbralInferior) superaSobreventa := false rsiSuperoUmbralInferior := false
- Detecta cuándo el RSI cruza por encima del nivel de sobreventa (compara el valor actual con el valor de la barra anterior)
- Registra si el RSI supera el umbral inferior (lo que invalidaría una posible señal de compra)
- Reinicia las condiciones cuando el RSI ha superado el nivel de sobreventa y luego ha cruzado el umbral inferior
Lógica para Señales de Venta (Short)
// Condición 2: RSI rompe nivel de sobrecompra if (rsiValue < sobrecompraLevel and ta.rsi(close[1], rsiLength) >= sobrecompraLevel) rompeSobrecompra := true // Verificar si RSI rompe umbral superior (para reiniciar condición) if (rsiValue < umbralSuperior) rsiRompioUmbralSuperior := true // Reiniciar condición de venta si RSI rompe umbral superior if (rompeSobrecompra and rsiRompioUmbralSuperior) rompeSobrecompra := false rsiRompioUmbralSuperior := false
- Detecta cuándo el RSI cruza por debajo del nivel de sobrecompra
- Registra si el RSI rompe el umbral superior (lo que invalidaría una posible señal de venta)
- Reinicia las condiciones cuando el RSI ha roto el nivel de sobrecompra y luego ha cruzado el umbral superior
Definición de Condiciones de Trading
longCondition = superaSobreventa and rsiValue >= sobreventaLevel and rsiValue <= umbralInferior and not rsiSuperoUmbralInferior shortCondition = rompeSobrecompra and rsiValue <= sobrecompraLevel and rsiValue >= umbralSuperior and not rsiRompioUmbralSuperior
- longCondition: Se cumple cuando:
- El RSI ha superado el nivel de sobreventa anteriormente
- El RSI actual está entre el nivel de sobreventa y el umbral inferior
- El RSI no ha superado el umbral inferior desde que superó el nivel de sobreventa
- shortCondition: Se cumple cuando:
- El RSI ha roto el nivel de sobrecompra anteriormente
- El RSI actual está entre el nivel de sobrecompra y el umbral superior
- El RSI no ha roto el umbral superior desde que rompió el nivel de sobrecompra
Ejecución de Operaciones
if (longCondition) strategy.entry("Long", strategy.long) superaSobreventa := false if (shortCondition) strategy.entry("Short", strategy.short) rompeSobrecompra := false
- Crea una orden de compra cuando se cumple la condición de compra y reinicia el seguimiento
- Crea una orden de venta cuando se cumple la condición de venta y reinicia el seguimiento
Visualización del Indicador
plot(rsiValue, "RSI", color=color.blue) hline(sobreventaLevel, "Nivel Sobreventa", color=color.green) hline(sobrecompraLevel, "Nivel Sobrecompra", color=color.red) hline(umbralInferior, "Umbral Inferior", color=color.green, linestyle=hline.style_dashed) hline(umbralSuperior, "Umbral Superior", color=color.red, linestyle=hline.style_dashed)
- Dibuja el valor del RSI como una línea azul
- Añade líneas horizontales para todos los niveles importantes:
- Nivel de sobreventa (verde)
- Nivel de sobrecompra (rojo)
- Umbral inferior (verde punteado)
- Umbral superior (rojo punteado)
Sombreado de Zonas de Trading
rsiPlot = plot(rsiValue, color = na, editable = false) fill(plot(sobreventaLevel, color = na, editable = false), plot(umbralInferior, color = na, editable = false), color=color.new(color.green, 90), title="Zona Compra") fill(plot(sobrecompraLevel, color = na, editable = false), plot(umbralSuperior, color = na, editable = false), color=color.new(color.red, 90), title="Zona Venta")
- Crea sombreados para visualizar mejor las zonas de trading:
- Zona de compra (verde transparente) entre el nivel de sobreventa y el umbral inferior
- Zona de venta (rojo transparente) entre el nivel de sobrecompra y el umbral superior
Tabla Informativa
var table t = table.new(position.top_right, 1, 2) table.cell(t, 0, 0, "RSI(" + str.tostring(rsiLength) + ")", bgcolor = color.blue, text_color = color.white) table.cell(t, 0, 1, str.tostring(rsiValue, "#.##"), bgcolor = color.blue, text_color = color.white)
- Crea una tabla en la esquina superior derecha del gráfico
- Muestra el valor actual del RSI para facilitar la lectura
En resumen, este código implementa una estrategia de trading basada en el RSI que busca identificar retrocesos específicos después de que el RSI cruza niveles de sobreventa o sobrecompra, pero sin romper ciertos umbrales. Las operaciones se realizan cuando el RSI regresa a zonas específicas, lo que puede indicar continuación de la tendencia después de una corrección.
Conclusiones
La estrategia es bastante simple pero poderosa, aunque es recomendable que el trader la pruebe en una cuenta demo y le aplique pruebas de backtesting. Dependiendo de los resultados, puede aplicar filtros o señales adicionales para mejorar su fiabilidad.
Puede usarse como método base para el desarrollo de sistemas de trading más complejos que incluyan indicadores de tendencia y/o indicadores de fuerza de la tendencia.
Recuerda, ningún sistema es perfecto ni a prueba de fallos.
¿Que broker de Forex/CFD con TradingView recomendamos? Consideramos que ICMarkets es una buena opción. Más información en: Análisis del broker IC Markets