Curso de Programación 16.2. El Patrón ABC (123 High/123 Low)

Finalizamos el tema dedicado a otros patrones chartistas viendo un nuevo patrón de cambio de tendencia, el Patrón ABC o Patrón 123.

Este patrón fue ideado por Joe Ross como parte de la estrategia explicada en su libro The Ross Hook. El patrón vendría a ser una variación de la formación clásica de doble techo o suelo. La figura está formada por tres niveles específicos que son los que le dan nombre al conjunto. Por un lado, tendríamos dos puntos de soporte o resistencia (niveles 1 y 3) y por otro, el punto de unión de ambos (nivel 2). 

Una vez formado el patrón, la ruptura de éste punto intermedio implica una pérdida del control previo al no poder sobrepasar los valores anteriores, dando lugar a un cambio de dirección del precio, tal y como vemos en la siguiente imagen.



En función de si estamos ante un doble techo o un doble suelo, la figura se conoce como 123-High o bien 123-Low.Veamos cada uno de los casos.

123 High
Esta figura es un patrón de cambio bajista. Está formado por los siguientes niveles:
Nivel 1 = Primer techo no sobrepasado.
Nivel 2 = Punto de retroceso (soporte).
Nivel 3 = Segundo techo no sobrepasado.

Como decíamos, la ruptura del soporte implica señal de cambio bajista. Cabe destacar que la señal tiene validez mientras el precio no retroceda por encima del segundo techo (nivel 3).



1-2-3 Low
Figura de cambio alcista. Está formada por los siguientes niveles:
Nivel 1 = Primer suelo no sobrepasado.
Nivel 2 = Punto de retroceso (resistencia).
Nivel 3 = Segundo suelo no sobrepasado.

La ruptura de la resistencia implica señal de cambio alcista. En este caso, la señal tiene validez mientras el  precio no retroceda por debajo del segundo suelo (nivel 3).

Indicadores 123 High y 123 Low
Para una detección automática de cada una de las figuras anteriores, Visual Chart cuenta con un par de indicadores que realizan ésta tarea. Estos indicadores, del mismo nombre que los patrones que estudian, representan sobre el gráfico las figuras y además marcan el momento de detección para poder desarrollar estrategias basadas en estos datos.

Pueden descargar los dos indicadores desde los siguientes enlaces:

Descargar indicador 123 High

Descargar indicador 123 Low

Como decimos, un patrón ABC se detecta algunas barras a la derecha de la aparición del patrón. Esto lo podemos ver a través de las marcas que dejan los indicadores 123 High y Low. En realidad, los indicadores marcan dos puntos cuando encuentran un nuevo patrón:

El Nivel 2 del patrón. Puesto que es el punto de ruptura que confirma la figura.
El Nivel 3 del patrón. Puesto que es el punto de soporte o resistencia de validez o nivel de cancelación.

Resumiendo. Los indicadores 123 High y Low dibujan las correspondientes figuras sobre el gráfico, si bien esta información no es aplicable desde el punto de vista del diseño de un sistema. Por ello, el indicador, además, marca sobre la barra de detección los niveles 2 y 3 del patrón, información que sí puede ser utilizada desde un sistema.



Estrategia Ruptura del Nivel 2
Esta estrategia va a utilizar la información dada por los dos anteriores indicadores para diseñar unas reglas de trading. Como herramienta de apoyo, utilizará además una media simple de 50 periodos. Las reglas a seguir serán las siguientes:

Entradas a LARGO.
1) El precio está en tendencia bajista (media de 50).
2) Aparece un patrón 123 Low.
3) El precio rompe el nivel 2 al alza.
4) StopLoss = Nivel de soporte (nivel 3).
5) Objetivo = Doble de la distancia entre el nivel 2 y el nivel 3.

Entradas a CORTO.
1) El precio está en tendencia alcista (media de 50).
2) Aparece un patrón 123 High.
3) El precio rompe el nivel 2 a la baja.
4)StopLoss = Nivel de resistencia (nivel 3).
5) Objetivo = Doble de la distancia entre el nivel 2 y el nivel 3.



Para calcular el objetivo, tomaremos de referencia el precio de entrada de cada operación y seguidamente le aplicaremos la distancia entre ambos niveles multiplicado por dos.

Por último, cabe mencionar que los niveles 2 y 3 se corresponden con las líneas 3 y 4 (respectivamente) de los dos indicadores.

El diseño del sistema sería el siguiente:

Código PDV


Código VBA

(NOTA: Recuerden que el código aquí expuesto sólo incluye los métodos OnCalculateBar() y OnInitCalculate(). Tengan esto en cuenta a la hora de copiar el sistema).
'¡¡ Parameters
Dim Contratos As Long '1
Dim HoraIni As Integer '900
Dim HoraFin As Integer '1900
Dim PeriodoMedia As Integer '50
Dim ObservationPeriod As Integer '10
Dim StrengthPivot As Integer '1
Dim NuMaxBHL2 As Integer '3
Dim NumaxBHL3 As Integer '2
'Parameters !!
Dim avdata As DataIdentifier
Dim h123data As DataIdentifier
Dim l123data As DataIdentifier
Dim signal As Integer
Dim top As Double
Dim bottom As Double
Dim hprice As Double
Dim lprice As Double
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    avdata = .GetIndicatorIdentifier(AvSimple, Data, PeriodoMedia, PriceClose)
    h123data = .GetIndicatorIdentifier(HIGH123, Data, ObservationPeriod, StrengthPivot, NuMaxBHL2, NumaxBHL3)
    l123data = .GetIndicatorIdentifier(LOW123, Data, ObservationPeriod, StrengthPivot, NuMaxBHL2, NumaxBHL3)
    signal = 0
    top = 0
    bottom = 0
    hprice = 0
    lprice = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    If (.Time >= HoraIni And .Time < HoraFin) Then
        Dim avact As Double
        Dim h2 As Double
        Dim h3 As Double
        Dim l2 As Double
        Dim l3 As Double
        Dim newsell As Boolean
        Dim newbuy As Boolean
        Dim gep As Double
    
        gep = .GetEntryPrice()
        avact = .GetIndicatorValue(avdata)
        h2 = .GetIndicatorValue(h123data, 0, 3)
        h3 = .GetIndicatorValue(h123data, 0, 4)
        l2 = .GetIndicatorValue(l123data, 0, 3)
        l3 = .GetIndicatorValue(l123data, 0, 4)
    
        'tendencia alcista
        If (.Close() > avact) Then
            If (signal = 1) Then
                signal = 0
            End If
            If (.GetMarketPosition() <> -1) Then
                If (h2 <> NullValue) Then
                    signal = -1
                    hprice = h2
                    top = h3
                End If
                If (signal = -1) Then
                    If (.High() > top) Then
                        signal = 0
                    ElseIf (.Low() <= hprice) Then
                        .Sell AtClose, Contratos
                        newsell = True
                        gep = .Close()
                        signal = 0
                    End If
                End If
            End If
        'tendencia bajista
        ElseIf (.Close() < avact) Then
            If (signal = -1) Then
                signal = 0
            End If
            If (.GetMarketPosition() <> 1) Then
                If (l2 <> NullValue) Then
                    signal = 1
                    lprice = l2
                    bottom = l3
                End If
                If (signal = 1) Then
                    If (.Low() < bottom) Then
                        signal = 0
                    ElseIf (.High() >= lprice) Then
                        .Buy AtClose, Contratos
                        newbuy = True
                        gep = .Close()
                        signal = 0
                    End If
                End If
            End If
        End If
        
        'salidas
        If (.GetMarketPosition() = -1 Or newsell) Then
            .ExitShort AtStop, Contratos, top
            .ExitShort AtLimit, Contratos, gep - 2 * (top - hprice)
        ElseIf (.GetMarketPosition() = 1 Or newbuy) Then
            .ExitLong AtStop, Contratos, bottom
            .ExitLong AtLimit, Contratos, gep + 2 * (lprice - bottom)
        End If
    Else
        If (.GetMarketPosition() = -1) Then
            .ExitShort AtClose, Contratos
        ElseIf (.GetMarketPosition() = 1) Then
            .ExitLong AtClose, Contratos
        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

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