Estrategia de Trading Con RSI en TradingView

0
84
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

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

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


 

Leave a reply