Curso de Programación. 14.1. Ichimoku Kinko Hyo

Durante el siguiente tema de nuestro curso de programación vamos a hablar de uno de los indicadores más demandados en los últimos tiempos: El patrón Ichimoku.

Este instrumento fue desarrollado a principios del siglo XX por Goichi Hosoda, conocido popularmente por su seudónimo Ichimoku Sanjin, de ahí el nombre del indicador.

El indicador Ichimoku, cuya representación es especialmente peculiar, es una herramienta de análisis técnico muy completa que ofrece diferentes aspectos relativos al comportamiento del mercado.

La información fundamental que podemos extraer de él sería la siguiente:
  • Localización de soportes y resistencias.
  • Dirección de la tendencia.
  • Posibles puntos de entrada y salida.
  • Representación del presente, pasado y futuro.

Cabe destacar el uso del indicador como método para predecir la dirección del precio. Esto se debe al modo con el que queda representado, a través de lo que sería una nube de precios posibles (llamada Kumo). Cuando el subyacente se mueve fuera de ésta nube, alerta de un impulso lo bastante relevante como para alejar al valor de la nube de precios esperados. Este dato se considera de especial interés, especialmente porque dicha situación, desde el punto de vista visual, se detecta rápidamente.

No nos vamos a extender mucho más en el uso del indicador Ichimoku, puesto que ya hemos hablado con anterioridad sobre él en este mismo blog (ver artículo). Por lo que pasaremos directamente a comentar la estrategia a seguir según las señales del indicador.


Estrategia cruce de Tenkan y Kijun.
La definición de ésta estrategia sería la siguiente:

1) Cuando la línea Tenkan cruce al alza la línea Kijun, entrar a largo.
2) Cuando la línea Tenkan cruce a la baja la línea Kijun, entrar cortos

Además, vamos a añadir la regla de confirmación siguiente: Cierre actual mayor que cierre de hace 26 barras en el caso alcista, o menor en el caso bajista.

Esta regla de confirmación surge como consecuencia de la interpretación de la línea Chikou. Ésta línea es una proyección hacia atrás del valor actual de cierre, por lo que para la operativa en tiempo real carecería de sentido observar el valor de la línea Chikou en el momento del cruce, ya que en tal caso estaríamos solicitando obtener el valor del cierre a 26 barras en el futuro: En su lugar, se observa si en el momento del cruce el precio se mueve en la misma dirección que dicho cruce con respecto a la situación del precio en el pasado. En la siguiente imagen queda explicado este hecho:


Para el diseño de éste sistema, vamos a usar la versión 2 del indicador, por tomar la última versión como referencia. El Ichimoku 2 pueden descargarlo accediendo al siguiente enlace:

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

Diseño PDV


Diseño 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).

'¡¡ Summary
' Classification: Curso
'Summary !!
'¡¡ Parameters
Dim Contratos As Long '1
Dim HoraIni As Integer '900
Dim HoraFin As Integer '1900
Dim ChikouPeriod As Integer '26
Dim TenkanSENPeriod As Integer '9
Dim KijunSENPeriod As Integer '26
Dim SenkouSPANProjection As Integer '26
Dim SenkouSPANA As Integer '52
Dim SenkouSPANB As Integer '26
'Parameters !!
Dim ichdata As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    ichdata = .GetIndicatorIdentifier(ICHKH2, Data, ChikouPeriod, TenkanSENPeriod, KijunSENPeriod, SenkouSPANProjection, SenkouSPANA, SenkouSPANB, 0)
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    If (.Time >= HoraIni And .Time < HoraFin) Then
        Dim tenkanact As Double
        Dim kijunact As Double
        Dim tenkanant As Double
        Dim kijunant As Double
        Dim kumosup As Double
        Dim kumoinf As Double
     
        tenkanact = .GetIndicatorValue(ichdata, 0, 2)
        kijunact = .GetIndicatorValue(ichdata)
        tenkanant = .GetIndicatorValue(ichdata, 1, 2)
        kijunant = .GetIndicatorValue(ichdata, 1, 1)
        kumosup = .GetIndicatorValue(ichdata, 0, 3)
        kumoinf = .GetIndicatorValue(ichdata, 0, 4)
     
        'control valor superior kumo
        If (kumoinf > kumosup) Then
            kumosup = .GetIndicatorValue(ichdata, 0, 4)
            kumoinf = .GetIndicatorValue(ichdata, 0, 3)
        End If
     
        'entradas
        If (.GetMarketPosition <> 1 And tenkanact > kijunact And tenkanant <= kijunant) Then
            If (.Close() > .Close(ChikouPeriod)) Then
                .Buy AtClose, Contratos
            End If
        End If
        If (.GetMarketPosition <> -1 And tenkanact < kijunact And tenkanant >= kijunant) Then
            If (.Close() < .Close(ChikouPeriod)) Then
                .Sell AtClose, Contratos
            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

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

Estudio de las divergencias en el RSI