Estudio de las divergencias en el RSI

 Edición Noviembre Revista Traders - Post Visual Chart

Dentro de las herramientas de análisis técnico, los osciladores se presentan como un interesante método para detectar zonas de debilitamiento de tendencias. Al tratarse de herramientas cíclicas, el momento de aparición de dichas zonas viene dado por la ruptura de los puntos más extremos de cada oscilador, esto es, lo que comúnmente se conoce como zonas de sobrecompra y sobreventa. No obstante, existe otro método de búsqueda de cambios de tendencia: la aparición de divergencias entre el subyacente y el propio oscilador. En el presente artículo analizaremos esta técnica usando como ejemplo uno de los osciladores más habituales del mercado: el Relative Strength Index o RSI.

Introducción al RSI

El RSI (Indicador de Fuerza Relativa) calcula la fuerza interna de un solo valor en términos porcentuales, de ahí que su valor oscile entre cero y cien.  Este indicador realiza una serie de cálculos sobre los cierres de las últimas X sesiones (normalmente 14 sesiones) y muestra la fuerza del movimiento de la cotización. La interpretación básica es que cuanto más suba el precio, mayor será el valor del RSI, y cuanto más baje, menor será su valor.

Lo que plantea este indicador es que las subidas y bajadas tienen un periodo determinado de duración, a partir del cual se estabiliza el precio e inicia una nueva fase.  Generalmente, se considera que si una subida alcanza un 70% u 80% de la fuerza relativa, entonces existe una alta probabilidad  de que dicho movimiento empiece a debilitarse. En el caso de las bajadas, el porcentaje de debilitamiento se sitúa entre un 30% o 20%. Estos niveles son los considerados como zonas de sobrecompra y sobreventa.


El error de las zonas de sobrecompra y sobreventa


El problema principal que supone hacer un seguimiento de éste oscilador (así como de otro tipo de osciladores) es que la entrada en las zonas de debilitamiento da buenos resultados en mercados laterales pero malos resultados en mercados en tendencia.

Las señales pierden fiabilidad cuando el mercado está en tendencia debido a que los ciclos de subida y bajada del precio tienen una mayor duración. Este fenómeno (el de la prolongación de las tendencias) no es detectado por el oscilador hasta que no sucede, por lo que su poder de anticipación queda deteriorado.

En el gráfico 1 podemos encontrar un ejemplo de ello. Entre 2011 y 2012, el RSI marca tres zonas de agotamiento, las cuales confirman correctamente el cambio de inercia del activo. Sin embargo, a partir de 2013 se inicia una fase alcista que da lugar al error en el oscilador. Esto sucede porque en comparación con los últimos precios dados, la fuerza del movimiento de subida supera con creces el rango que se ha estipulado para marcar los niveles de sobrecompra.

Debido a esto, muchos pueden pensar que la aplicación del RSI como método de estudio implica un riesgo demasiado alto. No obstante, hay dos maneras de aprovechar la información dada por el indicador disminuyendo el error:

1) Aplicar un filtro de volatilidad utilizando una herramienta de detección de la volatilidad (como por ejemplo el ADX). Este indicador va a permitir distinguir entre las zonas laterales y las zonas tendenciales, de modo que puede servir de filtro para las señales dadas por el propio RSI.

2) Seguir las divergencias del RSI con el precio. Es decir, que en lugar de estudiar las zonas de sobrecompra y sobreventa, se realizará un seguimiento de las divergencias.

De las dos, la segunda opción se considera como el método más fiable para marcar el final de una tendencia, de modo que nos centraremos en esta idea.

Las divergencias en el RSI.

J. Welles Wilder, creador del original RSI, llevó a cabo en su libro New Concepts in Technical Trading Systems la definición de las divergencias.

Según indicó Welles Wilder, las señales de divergencias indican un punto potencial de giro en el comportamiento de los precios de cualquier activo porque el impulso direccional no acompaña al precio.

En lo que respecta al RSI, el autor determinó dos tipos de divergencias en función de la señal de cambio de tendencia que va a pronosticar:

1) Una divergencia alcista ocurre cuando el precio marca un mínimo decreciente mientras que el indicador marca un nuevo mínimo creciente. Es decir, que lo que nos informa el RSI es que aunque los precios prolongan el movimiento previo de caída, el indicador de fuerza nos avisa de que ese último mínimo posee una menor fuerza bajista que el mínimo anterior, lo cual es un claro síntoma de debilidad bajista.

2) Una divergencia bajista ocurre cuando el precio marca un máximo creciente mientras que el indicador marca un nuevo máximo decreciente. La situación es igual que la indicada anteriormente pero en el polo opuesto.

Cabe destacar que estas divergencias sólo deben considerarse cuando aparecen tras un impulso en el sentido opuesto: por tanto, la divergencia alcista siempre debe ir precedida de un impulso bajista, mientras que la divergencia bajista debe ir precedida de un impulso alcista.

La manera en la que Wilder interpretaba una correcta aparición de divergencia venía determinada por el momento en el que se encontraba inmerso el RSI:

1) La divergencia alcista debía aparecer estando el RSI en zona de sobreventa.

2) La divergencia bajista debía aparecer estando el RSI en zona de sobrecompra.

No obstante, podemos encontrar otro tipo de señales de divergencia en lo que podríamos llamar como divergencias de continuación de tendencia. Este tipo de divergencias fueron explicadas por Andrew Cardwell, a las que denominó como Positive/Negative Reversal, y denotan ciertas diferencias respecto a las ideas planteadas por Wilder:

1) La divergencia positive reversal es una divergencia que aparece cuando el RSI marca un nuevo mínimo decreciente y es el activo el que marca un nuevo mínimo creciente.

2) La divergencia negative reversal es una divergencia que aparece cuando el RSI marca un nuevo máximo creciente y es el activo el que marca un nuevo máximo decreciente.

Otro aspecto característico de las reversals de Cardwell es que éstas deben aparecer durante los niveles medios del RSI:

1) La divergencia positive reversal aparece estando el RSI entre  50 y la zona de sobreventa (30).

2) La divergencia negative reversal aparece estando el RSI entre  50 y la zona sobrecompra (70).

En el gráfico 2 podemos ver algunos de los tipos de divergencias especificadas.

Vista la parte teórica del estudio de las divergencias, lo especialmente importante es analizar el nivel de fiabilidad de las mismas. Para ello, el mejor recurso es poder diseñar herramientas capaces de calcularlas, de modo que pueda cuantificarse la tasa de acierto y fallo de dicho método.

En el siguiente punto de éste artículo vamos a resolver esta tarea utilizando como plataforma de referencia Visual Chart 5.

Automatización de las divergencias del RSI en Visual Chart.

Una buena manera de estudiar las divergencias es diseñar un indicador que las detecte, de manera que podamos visualizar sobre el gráfico los puntos de aparición de divergencias.

A la hora de automatizar la búsqueda de divergencias, el indicador deberá seguir una serie de estrictos pasos que definirán las reglas de detección:

Paso 1. Posición del RSI.
El indicador sólo buscará divergencias alcistas cuando el RSI esté POR DEBAJO DE 50.
El indicador sólo buscará divergencias bajistas cuando el RSI esté POR ENCIMA DE 50.

Paso 2. Detección de los swings del RSI.
El indicador buscará dos topes del RSI seguidos. Consideraremos como tope(o swing) a aquellos máximos y mínimos relevantes que aparezcan en el activo.

En Visual Chart, los topes se extraen a través de las funciones Swing High y Swing Low aplicadas sobre el Relative Strength Index.

Paso 3. Comparación con el Subyacente.
Si aparecen dos topes mínimos seguidos estando el RSI por debajo de 50.
Con la referencia de dichos mínimos, observamos los mínimos del precio en esa misma altura. Hecho esto, puede pasar lo siguiente:
a) Si los mínimos del precio son decrecientes y los del RSI son crecientes, damos señal de divergencia alcista (siempre y cuando el RSI esté en sobreventa).
b) Si los mínimos del precio son crecientes y los del RSI son decrecientes, damos señal de divergencia alcista del tipo positive reversal  (siempre y cuando el RSI no esté en sobreventa).


Paso 4. Repetir el paso 3 con los máximos.
El proceso sería el mismo para el caso bajista.

En este mismo artículo podemos encontrar el código de programación del indicador para Visual Chart 5. Esta herramienta pinta una línea cero que sólo cambia cuando aparece una divergencia. Para distinguir entre las divergencias de Wilder y las divergencias de Cardwell, el indicador marca 1 o -1 cuando se trata de las divergencias de tipo reversal y 2 o -2 cuando se trata de las divergencias de Wilder.

En el gráfico 2 podemos ver cómo cambia el indicador ante la aparición de cada una de las divergencias. En el punto A, aparece una divergencia negative reversal, de ahí que el valor del indicador pase a -1. En los puntos B y C aparecen divergencias de Wilder, de ahí que los valores dados sean 2 y -2.

En el gráfico 3 vemos otro ejemplo de aplicación de éste indicador. El punto A marca una divergencia bajista de Wilder (marca un -2), puesto que se produce en la zona de sobrecompra, el RSI marca máximos decrecientes y el precio máximos crecientes. En este caso, vemos que efectivamente se cumple el debilitamiento del movimiento alcista. El punto B se trata de un caso de divergencia alcista de Wilder (marca un 2), puesto que, como vemos, ocurre con el RSI en sobreventa y marcando nuevos mínimos crecientes.


Conclusiones.

El estudio de las divergencias del RSI está muy extendido, si bien se suele realizar de forma manual, puesto que permite una mayor flexibilidad que la automatización de dichas señales. No obstante, el seguimiento de éstas mediante herramientas mecánicas ofrece una mayor fiabilidad al eliminar la carga subjetiva, lo cual se traduce en un número menor de señales. Por último, debemos considerar el uso de otro tipo de indicadores como el ADX (indicadores de volatilidad) como filtro de confirmación para aumentar la efectividad de la herramienta.


G1) Indicador RSI en Activision Blizzard Diario.


En éste gráfico de Activision a 1 día, hemos aplicado el indicador RSI(14). En los puntos A, B y C, vemos que detecta correctamente el agotamiento de la tendencia previa. El punto D marca como zona sobrecompra, si bien vemos que se inicia un movimiento ascendente de larga duración. Posteriormente, vuelve a tocar un par de veces la zona de sobrecompra, con idéntico resultado. Este error es común en zonas tendenciales.
Fuente: Visual Chart

  
G2) Divergencias del RSI en AUD/JPY 1 minuto.


En éste gráfico FOREX de AUD/JPY  a 1 minuto, podemos algunos ejemplos de divergencias. En el punto A, el RSI se sitúa bajo 50 pero por encima de la zona de sobreventa. El RSI marca máximos crecientes, mientras que el precio marca máximos decrecientes, por tanto, se trata de un negative reversal divergence, lo que indica que el precio continuará descendiendo. Los casos B y C, correspondientes a las divergencias de Wilder, se producen en las zonas de agotamiento y marcan cambio de tendencia.
Fuente: Visual Chart


G3) Divergencias del RSI en AEX-25 FUT. CONT. 10 minutos.



El siguiente gráfico del futuro continuo del AEX-25 incluye el RSI y el indicador de divergencias del RSI. En el punto A vemos como el indicador de divergencias marca un -2, avisando de una divergencia bajista de Wilder. Si nos fijamos en el gráfico, efectivamente confirmamos que se generan nuevos máximos crecientes mientras que el RSI marca máximos decrecientes. En el punto B podemos ver la situación opuesta.
Fuente: Visual Chart

 Código de programación


RSI DIVERGENCES INDEX PARA VISUAL CHART 5.
'¡¡ Parameters
Dim Period As Integer '14
Dim UpperBand As Double '70
Dim CenterBand As Double '50
Dim LowerBand As Double '30
Dim Strength As Long '5
'Parameters !!
Option Explicit
Dim RSIData As Long
Private Type TipoZona
    Cross As Integer
    PSwing1 As Double
    PSwing2 As Double
    BarSwing1 As Long
    ThereIsSwing1  As Boolean
End Type
Dim Zones() As TipoZona
Dim Zones2() As TipoZona
Dim LastBar As Long
Public APP As OscUserApp
Implements Indicator
Public Sub Indicator_OnInitCalculate()
With APP
    RSIData = .GII(RSI, Data, Period, 70, 30)
    ReDim Zones(1)
    LastBar = -1
    .SetLineName 1, "Div_Signal"
    .StartBar = 0
End With
End Sub
Public Sub Indicator_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim RSIact As Double: Dim RSIant As Double
    Dim BPUP As Double: Dim BPDOWN As Double:  Dim DivSignal As Integer
    Dim Max1 As Double: Dim Max2 As Double: Dim BMaxAux As Double
    Dim Min1 As Double: Dim Min2 As Double: Dim BMinAux As Double
    'real time control
    If LastBar <> Bar Then Zones2 = Zones
    If LastBar = Bar Then Zones = Zones2
    RSIact = Math.Round(.GIV(RSIData), 3)
    RSIant = Math.Round(.GIV(RSIData, 1, 1), 3)
    BPUP = .GetSwingHighBar(RSIData, 1, PriceClose, Strength, Strength * 10)
    BPDOWN = .GetSwingLowBar(RSIData, 1, PriceClose, Strength, Strength * 10)
    If (RSIant <= CenterBand And RSIact > CenterBand) Then
        Zones(1).Cross = 1
        Zones(0).Cross = 1
        Zones(0).ThereIsSwing1 = False
    ElseIf (RSIant >= CenterBand And RSIact < CenterBand) Then
        Zones(0).Cross = -1
        Zones(1).Cross = -1
        Zones(1).ThereIsSwing1 = False
    End If
    'bearish divergences
    If (Zones(0).Cross = 1) Or (Zones(0).Cross = -1 And Zones(0).ThereIsSwing1) Then
        If BPUP = Strength Then
            If Zones(0).ThereIsSwing1 Then
                If Zones(0).BarSwing1 < Bar - Strength Then
                    'check divergence
                    Zones(0).PSwing2 = Math.Round(.GIV(RSIData, Strength), 3)
                    Max1 = .High(Bar - Zones(0).BarSwing1)
                    Max2 = .High(Strength)
                    BMaxAux = .GetHighestBar(Data, PriceHigh, Bar - Zones(0).BarSwing1)
                    If ((Bar - Zones(0).BarSwing1) - BMaxAux) <= (BMaxAux - Strength) Then
                        If (.High(BMaxAux) > Max1) Then Max1 = .High(BMaxAux)
                    Else
                        Max2 = .High(BMaxAux)
                    End If
                    'wilder's bearish divergence
                    If (Zones(0).PSwing2 < Zones(0).PSwing1) And (Zones(0).PSwing2 >= UpperBand) Then
                        If Max2 >= Max1 Then
                            DivSignal = -2
                        End If
                    'negative reversal divergence
                    ElseIf (Zones(0).PSwing2 > Zones(0).PSwing1) And (Zones(0).PSwing2 < UpperBand) Then
                        If Max2 <= Max1 Then
                            DivSignal = -1
                        End If
                    End If
                End If
            Else
                Zones(0).BarSwing1 = Bar - Strength
                Zones(0).PSwing1 = Math.Round(.GIV(RSIData, Strength), 3)
                Zones(0).ThereIsSwing1 = True
            End If
        End If
        If Zones(0).Cross = -1 Then Zones(0).Cross = 0
    End If
    'bullish divergences
    If Zones(1).Cross = -1 Or (Zones(1).Cross = 1 And Zones(1).ThereIsSwing1) Then
        If BPDOWN = Strength Then
            If Zones(1).ThereIsSwing1 Then
                If Zones(1).BarSwing1 < Bar - Strength Then
                    'check divergence
                    Zones(1).PSwing2 = Math.Round(.GIV(RSIData, Strength), 3)
                    Min1 = .Low(Bar - Zones(1).BarSwing1)
                    Min2 = .Low(Strength)
                    BMinAux = .GetLowestBar(Data, PriceLow, Bar - Zones(1).BarSwing1)
                    If ((Bar - Zones(1).BarSwing1) - BMinAux) <= Math.Abs(BMinAux - Strength) Then
                        If (.Low(BMinAux) < Min1) Then Min1 = .Low(BMinAux)
                    Else
                        Min2 = .Low(BMinAux)
                    End If
                    'wilder's bullish divergence
                    If (Zones(1).PSwing2 > Zones(1).PSwing1) And (Zones(1).PSwing2 <= LowerBand) Then
                        If Min2 <= Min1 Then
                            DivSignal = 2
                        End If
                    'positive reversal divergence
                    ElseIf (Zones(1).PSwing2 < Zones(1).PSwing1) And (Zones(1).PSwing2 > LowerBand) Then
                        If Min2 >= Min1 Then
                            DivSignal = 1
                        End If
                    End If
                End If
            Else
                Zones(1).BarSwing1 = Bar - Strength
                Zones(1).PSwing1 = Math.Round(.GIV(RSIData, Strength), 3)
                Zones(1).ThereIsSwing1 = True
            End If
        End If
        If Zones(1).Cross = 1 Then Zones(1).Cross = 0
    End If
    'Paint signal
    .SetIndicatorValue DivSignal, 1
    LastBar = Bar
End With
End Sub

Comentarios

Entradas populares de este blog

Como consultar el GAP % de un conjunto de valores

Bollinger Volatility Oscillator N

MANEJO DE PLANTILLAS. Eliminar plantilla de un gráfico activa