Curso Programación 15.2. Los Patrones Harami y Piercing Line.

Finalizamos el estudio de patrones de velas japonesas con dos ejemplos de patrones compuestos. El patrón Harami y el patrón Piercing Line.

El Patrón Harami
Este patrón es uno de los más utilizados, debido a su versatilidad y al mayor número de situaciones en el que nos lo podemos encontrar.

El patrón Harami está compuesto por dos velas que tienen la siguiente forma:

1. Una vela grande que normalmente tendrá el mismo color que la tendencia previa.
2. Una vela pequeña que queda dentro del cuerpo real de la primera vela.

Lo más interesante del patrón es la capacidad para detectar tanto cambios de tendencia como continuación de la misma. Esto depende de la posición de la vela pequeña respecto a la primera.

La detección del patrón puede agilizarse utilizando el indicador del mismo nombre que tienen disponible y que pueden descargar accediendo al siguiente enlace:

Indicador Patrón Harami

En este artículo no sólo encontrarán el archivo de descarga del indicador, sino además una completa descripción de cómo se detecta esta figura en el gráfico.


El patrón Piercing Line
En este caso estamos ante un patrón exclusivamente de cambio de tendencia alcista. La figura aparece durante una fase de agotamiento bajista e informa de un contrataque alcista con posibilidad de cambio de tendencia.

El patrón Piercing Line está compuesto por dos velas que tienen la siguiente forma:
1. Una vela negra y grande.
2. Una segunda vela que abre bajo el mínimo de la negra.
3. Segunda vela es blanca y grande, cerrando en al menos la mitad de la vela negra.

Al igual que en el caso del anterior patrón, existe un indicador que permite agilizar la búsqueda del Piercing Line. Pueden descargar este indicador desde el siguiente enlace:

Indicador Piercing Line

En esta página encontrarán tanto una explicación del funcionamiento del patrón como el archivo de descarga del indicador correspondiente.

Tanto en uno como en otro indicador, su valor cambia a dos cuando encuentra una nueva figura. Esta información tan sencilla será la que usemos en la estrategia de ejemplo. Veamos a continuación cómo diseñarla.

Estrategia cruce de medias con Harami y Piercing Line.
La definición de éste sistema sería la siguiente:

Entrada a Largo. Cuando las dos medias crucen al alza nos posicionamos a largo si aparece un patrón previamente a la señal de cruce. Si las medias vuelven a cruzarse a la baja, deshacemos la posición.

Entrada a Corto. Cuando las dos medias crucen a la baja nos posicionamos a corto si aparece un patrón previamente a la señal de cruce. Si las medias vuelven a cruzarse al alza, deshacemos la posición.

Aunque el patrón Harami puede detectar tanto cambios de tendencia como continuaciones de ésta, para éste sistema, nos vamos a quedar sólo con las señales de giro.

El proceso a seguir para desarrollar las reglas de entrada a largo sería el siguiente.
1) Localizar un patrón Harami Alcista o Piercing Line durante una fase bajista.
2) Esperar al cruce alcista para entrar comprados.

Mientras esperamos al cruce alcista de las medias, debe cumplirse que el mínimo del patrón no haya sido superado, puesto que de ese modo su señal permanece vigente. En otro caso se despreciaría la señal dada por la figura y no operaríamos.

Para las reglas de entrada a corto sería similar, con la diferencia de que no nos fijaremos en el patrón Piercing Line, puesto que éste patrón es exclusivamente de tendencia alcista.


El diseño del sistema quedaría de la siguiente manera:

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 TendencyPeriod As Integer '5
Dim LengthFactor As Double '15
Dim PeriodoCorta As Integer '2
Dim PeriodoLarga As Integer '15
'Parameters !!
Dim avcortadata As DataIdentifier
Dim avlargadata As DataIdentifier
Dim hamdata As DataIdentifier
Dim plinedata As DataIdentifier
Dim patternsignal As Integer
Dim minpattern As Double
Dim maxpattern As Double
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    avcortadata = .GetIndicatorIdentifier(AvSimple, Data, PeriodoCorta, PriceClose)
    avlargadata = .GetIndicatorIdentifier(AvSimple, Data, PeriodoLarga, PriceClose)
    hamdata = .GetIndicatorIdentifier(HAP, Data, TendencyPeriod, 2, -2, 0, 0)
    plinedata = .GetIndicatorIdentifier(PIERCINGL, Data, TendencyPeriod, LengthFactor, 0)
    patternsignal = 0
    minpattern = 0
    maxpattern = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    If (.Time >= HoraIni And .Time < HoraFin) Then
        Dim avcortaact As Double
        Dim avlargaact As Double
        Dim hambull As Double
        Dim hambear As Double
        Dim plinesignal As Double
               
        avcortaact = .GetIndicatorValue(avcortadata)
        avlargaact = .GetIndicatorValue(avlargadata)
   
        hambull = .GetIndicatorValue(hamdata)
        hambear = .GetIndicatorValue(hamdata, 0, 2)
        plinesignal = .GetIndicatorValue(plinedata)
   
        'tendencia bajista
        If (avcortaact < avlargaact) Then
            If (.GetMarketPosition() = 1) Then
                .ExitLong AtClose, Contratos
            End If
       
            If (patternsignal = 1) Then
                If (.Low() < minpattern) Then
                    patternsignal = 0
                End If
            End If
            If (patternsignal = 0) Then
                If (hambull = 2) Then
                    patternsignal = 1
                    minpattern = .Low(1)
                ElseIf
 (plinesignal = 2) Then
                    patternsignal = 1
                    minpattern = .Low()
                End If
            End If
   
            If (patternsignal = -1 And .GetMarketPosition() <> -1) Then
                .Sell AtClose, Contratos
                patternsignal = 0
            End If
        'tendencia alcista
        ElseIf (avcortaact > avlargaact) Then
            If (.GetMarketPosition() = -1) Then
                .ExitShort AtClose, Contratos
            End If
       
            If (patternsignal = -1) Then
                If (.High() > maxpattern) Then
                    patternsignal = 0
                End If
            End If
            If (patternsignal = 0) Then
                If (hambear = -2) Then
                    patternsignal = -1
                    maxpattern = .High(1)
                End If
            End If
       
            If (patternsignal = 1 And .GetMarketPosition() <> 1) Then
                .Buy AtClose, Contratos
                patternsignal = 0
            End If
        End If
    Else
        If (.GetMarketPosition = 1) Then
            .ExitLong AtClose, Contratos
        ElseIf (.GetMarketPosition = -1) Then
            .ExitShort AtClose, Contratos
        End If
    End If
End With
End Sub

Comentarios

Entradas populares de este blog

Trading Tools: Descarga de históricos para Visual Chart 6

KDJ - Indicador Stochastic %J

El indicador Relative Strength Mansfield with Index