Curso de Programación. 4. RSI

En este apartado de nuestro curso hablaremos del famoso indicador RSI (Relative Strength Index).

Como todas las semanas, antes de adentrarnos en la teoría, les dejamos un ejercicio relacionado, al que pueden acceder desde el siguiente enlace: Ejercicio RSI.

4. RSI

4.1 Definición

El RSI fue publicado por Welles Wilder en la revista Commodities en el año 1978. Aunque su nombre puede dar a entender que sirve para comparar la fortaleza relativa entre dos valores, realmente el indicador lo que mide es la fortaleza interna de un único valor según un periodo estimado.

El RSI es un oscilador cuyos valores están representados en términos porcentuales. De modo que:

- Un RSI con un valor del 100% implicaría que el 100% de los datos del intervalo están subiendo.
- Un RSI con un valor del 0% implicaría que el 100% de los datos del intervalo están bajando.

Para su cálculo, el autor recomendó en su momento utilizar un periodo de 14 días, si bien autores como Steve Achelis proponen otro tipo de periodos tales como 9 o 25 días.

4.2. Interpretación del RSI

El autor Welles Wilder realizó una serie de consideraciones a la hora de analizar este indicador:

- Un RSI cuyo valor alcanza el 70% nos está informando que el ataque alcista está en su zona de agotamiento, lo que se considera como valor sobrecomprado.

- Un RSI cuyo valor alcanza el 30% (equivale a un 70% de bajadas) nos está informando que el ataque bajista está en su zona de agotamiento, lo que se considera como valor sobrevendido.


La hipótesis que sostiene el autor es que cuando un valor alcanza sus zonas de agotamiento, los precios tienden a darse la vuelta, lo cual puede servir como una inestimable señal para adelantarnos a un cambio de tendencia.

Utilizaremos esta idea básica respecto al RSI como método de entrada para nuestra estrategia.

4.3. Estrategia Ruptura de Bandas

Como hemos dicho, usaremos la ruptura de las zonas de agotamiento como regla del sistema. No obstante, en función del riesgo que queramos correr, podemos distinguir entre dos posibles estrategias:

Estrategia agresiva
Operar AL ENTRAR en las zonas de sobrecompra y sobreventa:

1) Si el RSI cruza a la baja la banda de sobreventa (30), se ejecuta la orden a largo.
2) Si el RSI cruza al alza la banda de sobrecompra (70), se ejecuta la orden a corto.

Estrategia conservadora
Operar AL SALIR de las zonas de sobrecompra y sobreventa:

1) Si el RSI cruza al alza la banda de sobreventa (30), se ejecuta la orden a largo.
2) Si el RSI cruza a la baja la banda de sobrecompra (70), se ejecuta la orden a corto.

Es decir, en el primer caso ejecutamos la orden en cuanto se accede a la zona de agotamiento, con el consecuente riesgo de que no se confirme el cambio de dirección, y en el segundo caso esperamos a que el RSI inicie un nuevo recorrido en la dirección de la nueva tendencia, entrando en mercado más tarde pero aumentando las probabilidades de acierto.


Veamos a continuación cómo diseñar éste sistema.

4.4. Código Fuente 

La principal característica de éste sistema es que vamos a permitir al usuario elegir entre un tipo de estrategia u otra, generando por tanto lo que serían dos sistemas en uno.

Para ello, añadiremos un parámetro al que llamaremos TipoEntrada, de modo que en función de su valor, elegiremos una u otra estrategia.

Obviamente, también tendremos que incorporar el indicador RSI a nuestro sistema. Este proceso es exactamente igual que el realizado en anteriores ejemplos.

En la siguiente imagen podemos ver cómo quedaría montado el sistema correspondiente.

Diseño para la Plataforma Visual:


Diseño en VBA:


'¡¡ Parameters
Dim Contratos As Double '1
Dim TipoEntrada As Double '1
Dim PeriodRSI As Long '14
Dim UpperBand As Double '70
Dim LowerBand As Double '30
'Parameters !!
Dim RSIData As Long
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    RSIData = .GetIndicatorIdentifier(RSI, Data, PeriodRSI, UpperBand, LowerBand)
    .StartBar = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim RSIact As Double
    Dim RSIant As Double
    RSIact = .GetIndicatorValue(RSIData)
    RSIant = .GetIndicatorValue(RSIData, 1, 1)
    If TipoEntrada = 1 Then
        If RSIant >= LowerBand And RSIact < LowerBand Then
            .Buy AtClose, Contratos
        Else
            If RSIant <= UpperBand And RSIact > UpperBand Then
                .Sell AtClose, Contratos
            End If
        End If
    Else
        If RSIant <= LowerBand And RSIact > LowerBand Then
            .Buy AtClose, Contratos
        Else
            If RSIant >= UpperBand And RSIact < UpperBand Then
                .Sell AtClose, Contratos
            End If
        End If
    End If
End With
End Sub

Comentarios

Entradas populares de este blog

Como consultar el GAP % de un conjunto de valores

Bollinger Volatility Oscillator N

Estudio de las divergencias en el RSI