Sistemas de trading

Sistemas automáticos de trading y money management.

Indicador ruptura del rango

El origen del indicador de ruptura del rango

En su artículo Daytrading Price Volatility Breakouts (S&C, Junio 2012), Ken Calhoun nos presentaba una serie de estrategias de operativa intradía basadas en el comportamiento de los precios al inicio de sesión.
Entre otras técnicas, el autor propone tomar como referencia la amplitud generada en el día anterior y esperar la ruptura de dicho rango durante la sesión actual.
Basándome en ésta idea, he desarrollado un indicador de soportes y resistencias para la plataforma Visual Chart al que he pasado a llamar Yesterday Range que espero les resulte interesante.
 

Metodología del indicador

Como les indicaba, el indicador se fundamenta en la idea propuesta por el sr. Calhoun. Por tanto, lo primero que haremos será tomar los niveles máximos y mínimos alcanzados durante el día previo:
 
Ejemplo visual chart
 
Normalmente, cuando se estudia la ruptura de niveles de soporte y resistencia, sencillamente se fijan los valores y se espera a la ruptura de dichos precios.
Lo que propone sin embargo el autor es desarrollar un estudio más dinámico que el que acabamos de comentar: En lugar de basarnos en la ruptura de precios estáticos, lo que haremos será esperar a que el rango de amplitud del día actual ALCANCE el rango generado durante el día anterior
Desarrollemos esta idea usando el ejemplo visto del 8 de octubre de INDITEX. 
En dicho ejemplo, hemos marcado como niveles extremos del día 112,4 € y 111,35 €. Al inicio del día 9, no vamos a buscar la ruptura de los 112,4 € como cabría esperar (más aún si consideramos que muchas veces nos encontraremos un gap de apertura que puede alejarnos de dicho nivel). Lo que haremos en su lugar será tomar como referencia la barra de inicio y calcular respecto a ésta el precio al que debería llegar para alcanzar la amplitud del día anterior:
 
Ejemplo 8 de octubre Inditex
 
En el ejemplo, la barra de inicio del día 9 marca un mínimo en 111,5 €. Puesto que el rango del día 8 fue de 1,050 €, el nivel de resistencia del día actual se situará en los 112,55 €.
Como vemos, el cálculo de los niveles de soporte y resistencia se adapta al nivel de apertura de la sesión actual. Esto nos permite solventar los problemas derivados de la generación de gaps de apertura.
Pero además, debemos ir modificando los niveles de soporte y resistencia en función del movimiento del precio del día actual: Como realmente lo que buscamos es alcanzar el rango del día previo, dicho rango lo tenemos que calcular siempre respecto a los valores más extremos alcanzados a lo largo del día.
En el siguiente ejemplo (ENAGAS, 11 de septiembre), vemos que el rango del día previo fue de 0,165 €. La sesión inicia con un mínimo de 17,420 €, por lo que el nivel de resistencia se sitúa en 17,585 €. Sin embargo, a lo largo del día el precio retrocede por debajo de 17,420 €, por lo que puede ser que alcance la amplitud a la baja. Por tanto, partimos del nivel máximo alcanzado (17,510 €) y calculamos el nuevo soporte, el cual finalmente es superado:
 
Ejemplo Enagas 11 de septiembre
 

Programación del indicador Yesterday Range

Una vez definida la idea, queda claro que podemos desarrollar un indicador que calcule automáticamente los rangos del día previo, y establezca el nivel de soporte y resistencia de cada sesión en función de dicha amplitud.
A continuación, les facilito el código VBA para Visual Chart del indicador. Pueden copiarlo y utilizarlo para su uso particular:

 
'¡¡ Summary
' Classification: Pivots
'Summary !!
'¡¡ Parameters
Dim OnlyCloses As Integer '0
'Parameters !!
Dim CRange() As Double
Dim CRange2() As Double
Dim YRange() As Double
Dim YRange2() As Double
Dim HaTocado As Boolean
Dim SR()  As Double
Dim SR2() As Double
Dim LastBar As Long
Option Explicit
Public APP As OscUserApp
Implements Indicator
Public Sub Indicator_OnInitCalculate()
With APP
    .SetLineName 1, "UpRange"
    .SetLineName 2, "DownRange"
    ReDim CRange(3): ReDim YRange(3): ReDim SR(2)
    CRange(0) = NullValue: YRange(0) = NullValue: SR(0) = NullValue
    HaTocado = False
    .StartBar = 0
    LastBar = -1
End With
End Sub
Public Sub Indicator_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim CMin As Double: Dim CMax As Double
    Dim UpColor As Long: Dim DownColor As Long
    If LastBar <> Bar Then
        YRange2 = YRange: CRange2 = CRange
    Else
        YRange = YRange2: CRange = CRange2
    End If
    If OnlyCloses = 0 Then
        CMax = .High: CMin = .Low
    Else
        CMax = .Close: CMin = .Close
    End If
    If .Date <> .Date(1) Or CRange(0) = NullValue Then
        YRange = CRange
        CRange(0) = .High
        CRange(1) = .Low
        CRange(3) = -1
        HaTocado = False
    Else
        If Not HaTocado Then
            If CRange(3) = -1 And CMax > CRange(1) + (YRange(0) - YRange(1)) Then HaTocado = True
            If CRange(3) = 1 And CMin < CRange(0) - (YRange(0) - YRange(1)) Then HaTocado = True
        End If
        If CMax > CRange(0) Then CRange(0) = CMax: If Not HaTocado Then CRange(3) = -1
        If CMin < CRange(1) Then CRange(1) = CMin: If Not HaTocado Then CRange(3) = 1
    End If
    If YRange(0) <> NullValue Then
        UpColor = RGB(0, 255, 0)
        DownColor = RGB(255, 0, 0)
        If CRange(3) = 1 Then
            If HaTocado Then
                DownColor = RGB(255, 255, 0)
            Else
                SR(0) = CRange(0)
                SR(1) = CRange(0) - (YRange(0) - YRange(1))
            End If
        ElseIf CRange(3) = -1 Then
            If HaTocado Then
                UpColor = RGB(255, 255, 0)
            Else
                SR(0) = CRange(1) + (YRange(0) - YRange(1))
                SR(1) = CRange(1)
            End If
        End If
        .SetIndicatorValue SR(0), 1
        .SetIndicatorValue SR(1), 2
        .SetBarProperties 0, 1, UpColor, 2, lsSolid, irBars
        .SetBarProperties 0, 2, DownColor, 2, lsSolid, irBars
    End If
    LastBar = Bar
End With
End Sub
 

Resultado Final

Si aplicamos el indicador a un gráfico (seleccionando la opción Insertar en Ventana = Escala de la Serie), podremos ver cómo nos marca los puntos de soporte y resistencia en función del rango previo:
 
Gráfico con soportes y resistencias

 

El indicador además aporta una información extra, y es que cuando la cotización alcanza el margen de amplitud, el indicador cambia el color del nivel que ha sido superado.
En el siguiente gráfico (7 de agosto en SABADELL) podemos observa este cambio. El nivel de resistencia situado en 1,62 € es roto a las 13:50. A partir de ese momento, el color de la línea cambia de color:
 
Ejemplo del 7 de agosto Sabadell
 
Es decir, por un lado nos informa si durante la sesión se ha alcanzado el rango del día previo, y por otro lado, cual ha sido la dirección que han tomado los precios para poder cubrirlo.
 

Conclusiones

La finalidad de este artículo ha sido facilitar una nueva herramienta de Visual Chart para la detección de niveles de soporte y resistencia. No entramos a considerar si la ruptura de dichos niveles implican toma de posiciones en una dirección u otra, en gran medida debido a que cada trader debe aplicar la estrategia que considere más oportuna. 
 
No obstante, cabe decir que el criterio que establece Ken Calhoun es que la superación del nivel de resistencia se puede considerar un buen punto de entrada, especialmente si va a acompañado por un aumento del volumen.
 
Oscar Cuevas, desarrollador de estrategias e indicadores en Visual Chart Group

  1. #1

    David Snchz

    Hola Óscar, me ha encantado tu artículo, me ha parecido muy interesante el indicador que has hecho, pero me surge una duda: cuando calculas los nuevos soportes y resistencias te basas en el mínimo que hace la primera vela al abrir la sesión, pero ¿en qué timeframe se calcula? y en un mercado que no cierre, como el forex ¿también se podría adaptar este indicador?

    Un saludo!

  2. #2

    Oscar Cuevas

    en respuesta a David Snchz
    Ver mensaje de David Snchz

    Hola David.
    Gracias por tu comentario. El indicador se adapta a cualquier timeframe intradía que usemos, puesto que el rango que debe alcanzarse durante la sesión es siempre el mismo, independientemente de la compresión de minutos que usemos. Obviamente, cuanto mayor sea la compresión, más posibilidades hay de que el rango se alcance en una cantidad menor de barras, por lo que no es aconsejable utilizar compresiones excesivamente grandes. El mercado Forex en Visual Chart está configurado con el horario local, por lo que el indicador se adapta a dicho horario y funciona igual que sobre cualquier otro mercado.

    • YesterdayRangeInForex

      YesterdayRangeInForex

Autores

  • Rankia

    Portavoz oficial de la empresa editora de este sitio web Rankia

  • Alexey de la Loma

  • Mario Somada

  • Oscar Cuevas

    Ingeniero Informático dedicado durante más de diez años al diseño de estrategias e indicadores técnicos sobre distintas plataformas (Visual Chart, ProRealTime, Multicharts...).

Envía tu consulta