Curso de Programación 16.1. El Patrón Hombro-Cabeza-Hombro

Esta semana iniciamos el último tema de nuestro curso de programación dedicándolo a la utilización de patrones chartistas desde el punto de vista del diseño de estrategias.

A través de este artículo, veremos cómo usar herramientas de análisis que nos permitan detectar la formación de dichos patrones, de modo que esa información nos sirva de referencia para el diseño de estrategias.

Antes de empezar, hablaremos brevemente sobre ellos.

Introducción
Estos patrones son figuras que se repiten a lo largo del histórico de un gráfico permitiendo determinar la evolución del precio en base a su aparición con una fiabilidad mayor o menor en función del patrón que aparezca.

Desde el punto de vista del desarrollo de sistemas, diremos que los patrones pueden servir de señal de aviso de un inminente cambio, si bien se recomienda aplicarlos junto con otro tipo de herramientas de análisis técnico.

En función de la información que aporten, los podemos dividir en dos grandes grupos:
Aquellos que predicen cambios de tendencia. Ejemplos:
- Doble techo o doble suelo.
- Suelos redondeados.
- Hombro/cabeza/hombro.
- Formación en taza.

Aquellos que predicen una continuación de la tendencia. Ejemplos:
- Banderas.
- Gallardetes.
- Triángulo simétrico.

Podemos automatizar la detección de estos patrones a través del diseño de indicadores, tal y como veremos a continuación. Cabe destacar que, al hacer esto, la búsqueda de patrones se ve limitada, como consecuencia de la necesidad de establecer una serie de reglas concretas que definan la aparición del patrón en cuestión.

En Visual Chart contamos con varios indicadores de detección de patrones chartistas. Estos indicadores consisten en una serie de líneas que dibujan sobre el gráfico la figura y además, marcan con otras (las denominadas líneas de alerta) la barra donde se ha detectado el patrón. Estas segundas líneas son necesarias para poder diseñar una estrategia.

En el presente curso veremos dos ejemplos: El patrón Hombro/Cabeza/Hombro y el patrón ABC.



A continuación, veremos el primero de estos dos patrones.

El patrón Hombro-Cabeza-Hombro
Este patrón es una figura de cambio de tendencia bajista que aparece durante una fase de crecimiento del precio. Lo interesante de la figura es que cuenta con un alta fiabilidad en cuanto a sus predicciones, si bien puede tardar en aparecer en función de los parámetros que usemos.

Está formado por tres máximos en los que destaca el máximo central, pues debe ser el mayor de los tres (la cabeza), siendo los otros dos máximos de un nivel similar entre ellos (los hombros). Al unir los hombros con la cabeza se forman los dos mínimos que terminan de dar forma al patrón. A su vez, estos dos mínimos permiten trazar una línea de soporte conocida como línea de cuello (neckline).

Cuando el precio rompe a la baja la línea de cuello, el patrón queda confirmado y por tanto se espera a continuación un movimiento bajista. La duración de dicho movimiento bajista queda determinada por la distancia entre el máximo de la cabeza y el valor del cuello en la barra donde se ubica la cabeza.

En la siguiente imagen podemos ver un ejemplo de patrón Hombro-Cabeza-Hombro:


Como decíamos, podemos automatizar la detección de patrones mediante indicadores. El indicador asociado a ésta figura lo podemos descargar desde el siguiente enlace:

Descarga indicador Head & Shoulder Top

Cabe destacar que el indicador dibuja 4 líneas:
Las líneas 1 y 2 sirven para visualizar la figura.
Las líneas 3 y 4 sirven para marcar la detección de un nuevo patrón. Estas líneas se sitúan en dos niveles:
Nivel de alerta situado en el valor del cuello cuando apareció la cabeza.
- Nivel de resistencia situado en el máximo de la cabeza.

Con estos dos datos, además, podemos obtener el nivel objetivo a alcanzar, puesto que se trata de la distancia entre ambos niveles.

Desde el punto de vista del diseño de sistemas, las líneas 1 y 2 son despreciables, ya que son líneas que se dibujan en el gráfico a posteriori, por lo que no tiene sentido usarlas. Cuando el indicador dibuje los puntos de las líneas 3 y 4 será el momento en el que se detecta un nuevo patrón y la señal para que nuestro sistema actúe. Veamos a continuación cómo.

Estrategia Ruptura de la línea de Cuello
Esta estrategia nos va a servir de ejemplo para ver cómo usar el indicador presentado anteriormente. Como herramienta de ayuda, vamos a usar una media exponencial que nos permita detectar la tendencia general del precio y así poder descartar patrones a destiempo. 

Las reglas que vamos a seguir serán las siguientes:

1) El sistema sólo va a operar a Corto, y siempre buscando un giro de tendencia.
2) El sistema usará una media exponencial de 100 periodos como referencia.
3) Cuando los precios estén por encima de la media exponencial, buscar la formación de un patrón Hombro-Cabeza-Hombro.
4) Si el indicador nos avisa de la aparición de uno, calculamos el nivel objetivo (usando los precios dados por las líneas 3 y 4). Si el precio actual sigue estando por encima de dicho nivel, entramos vendidos a mercado.
5) El sistema deshace posición si alcanza o bien el objetivo, o bien el nivel de resistencia (cabeza) o bien la hora de cierre de sesión.


El diseño del sistema quedaría así:

Código PDV


Código VBA

(NOTA: Recuerden que el código aquí expuesto sólo incluye los métodos OnCalculateBar() yOnInitCalculate(). Tengan esto en cuenta a la hora de copiar el sistema).

'¡¡ Summary
' Classification: Curso
'Summary !!
'¡¡ Parameters
Dim Contratos As Long '1
Dim HoraIni As Integer '900
Dim HoraFin As Integer '1900
Dim PeriodoMedia As Integer '100
Dim Length As Long '120
Dim DMPeriod As Long '20
Dim ShoulderDistance As Long '10
Dim HeadDistance As Long '20
Dim PriceTop As Price 'PriceHigh
Dim PriceBottom As Price 'PriceLow
'Parameters !!
Dim avdata As DataIdentifier
Dim hchdata As DataIdentifier
Dim hchsignal As Integer
Dim head As Double
Dim ptarget As Double
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    avdata = .GetIndicatorIdentifier(AvExponential, Data, PeriodoMedia, PriceClose)
    hchdata = .GetIndicatorIdentifier(HAST, Data, Length, DMPeriod, ShoulderDistance, HeadDistance, PriceTop, PriceBottom)
    hchsignal = 0
    head = 0
    ptarget = 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 top As Double
        Dim neck As Double
        Dim neworder As Boolean
    
        avact = .GetIndicatorValue(avdata)
        neck = .GetIndicatorValue(hchdata, 0, 3)
        top = .GetIndicatorValue(hchdata, 0, 4)
    
        If (.Close() > avact) Then
            'entradas
            If (neck <> NullValue And .GetMarketPosition() <> -1) Then
                head = top
                ptarget = neck - (head - neck)
                If (.Close() > ptarget) Then
                    .Sell AtClose, Contratos
                    neworder = True
                End If
            End If
        End If
    
        'salidas
        If (.GetMarketPosition() = -1 Or neworder) Then
            .ExitShort AtLimit, Contratos, ptarget
            .ExitShort AtStop, Contratos, head
        End If
    Else
        If (.GetMarketPosition = -1) Then
            .ExitShort 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