Curso de Programación. 15.1. Las Velas Japonesas

Las velas japonesas es un antiguo método oriental que Steve Nison puso de moda dentro del análisis técnico en occidente. Este método consiste en la búsqueda de patrones o comportamientos en el mercado que teóricamente poseen cierto poder de predicción.

Su uso se fundamenta en que, una vez aparece uno de estos patrones, se espera un cierto evento posterior, lo cual permite adoptar las correspondientes medidas en previsión de los futuros acontecimientos.

El estudio de patrones tienen como base principal la representación gráfica de velas o candlesticks. Esta representación es fundamentalmente igual que la utilizada por los gráficos de barras, donde se diferencia entre el momento de apertura, los momentos máximos y mínimos y el fin o cierre de dicha barra. La particularidad de las velas japonesas es que además aporta un aspecto visual más impactante, rellenando el interior de la vela en función de si se ha producido una subida o una bajada de precios.

Como éste tema está ampliamente documentado en muchos sitios, no profundizaremos más en los fundamentos de las velas japonesas.

Tipos de patrones
Dentro de la formación de velas japonesas, vamos a distinguir entre dos grandes grupos:

Patrones Simples. Formados por una sola vela. Ejemplos:
1) Hammer.
2) Shooting Star.
3) Doji.

Patrones Compuestos. Formados por varias velas. Ejemplos:
1) Harami.
2) Envolvente.
3) Piercing Line.


Por lo general, el estudio de patrones se hace de forma conjunta, de modo que normalmente se realiza la búsqueda de cualquier patrón y se actúa en consecuencia.

Además, se suele acompañar su análisis con el seguimiento de alguna otra herramienta de análisis técnico.

Para ilustrar esto último, a continuación vamos a desarrollar una estrategia que opere en función del cruce de dos medias de distinto periodo siempre y cuando detecte previamente un patrón Hammer (patrón de cambio de tendencia).

Estrategia Cruce de Medias y Hammer
La definición de éste sistema sería la siguiente:
1) El sistema sólo va a realizar operaciones de compra.
2) Cuando las dos medias crucen al alza nos posicionamos a largo cuando aparezca un patrón Hammer previamente a la señal de cruce.
3) Si las medias vuelven a cruzarse a la baja, deshacemos la posición.

El patrón Hammer es un patrón simple de cambio de tendencia. Su aparición durante una fase descendente suele indicar un cambio a tendencia alcista.

Para agilizar el estudio del patrón, nos vamos a apoyar en el uso del indicador Hammer que tienen disponible para Visual Chart. Pueden descargar este indicador desde el siguiente enlace:

Indicador Hammer

En el artículo viene explicado todo lo relativo a dicho patrón, así que no entraremos en detalles. Con respecto al sistema, las reglas que vamos a seguir van a ser las siguientes:
1) Localizar un Hammer 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 Hammer 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 el Hammer y no operaríamos.


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 SizeMaxHShadow As Double '2
Dim PeriodoCorta As Integer '5
Dim PeriodoLarga As Integer '30
'Parameters !!
Dim avcortadata As DataIdentifier
Dim avlargadata As DataIdentifier
Dim hammerdata As DataIdentifier
Dim hammersignal As Integer
Dim minhammer 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)
    hammerdata = .GetIndicatorIdentifier(HAMMER, Data, TendencyPeriod, SizeMaxHShadow, 1, 0)
    hammersignal = 0
    minhammer = 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
     
        avcortaact = .GetIndicatorValue(avcortadata)
        avlargaact = .GetIndicatorValue(avlargadata)
     
        'salidas
        If (avcortaact < avlargaact) Then
            If (.GetMarketPosition() = 1) Then
                .ExitLong AtClose, Contratos
            End If
         
            If (hammersignal = 1) Then
                If (.Low() < minhammer) Then
                    hammersignal = 0
                End If
            End If
            If (hammersignal = 0) Then
                If (.GetIndicatorValue(hammerdata) = 1) Then
                    hammersignal = 1
                    minhammer = .Low()
                End If
            End If
        'entradas
        ElseIf (avcortaact > avlargaact) Then
            If (hammersignal = 1 And .GetMarketPosition() <> 1) Then
                .Buy AtClose, Contratos
                hammersignal = 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

Como consultar el GAP % de un conjunto de valores

Bollinger Volatility Oscillator N

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