1 de octubre de 2013

Curso de Programación. 3. MACD (Parte 1)

Una vez visto el funcionamiento básico de las medias móviles, cambiamos de tercio para pasar a analizar un nuevo indicador, el indicador Moving Average Convergence Divergence o como comúnmente se conoce, MACD.

Antes de proceder a la teoría, cabe recordar que pueden encontrar un ejercicio relacionado con éste artículo pulsando el siguiente enlace: Ejercicio MACD.

3. MACD

3.1. Definición

El MACD es un método de seguimiento de tendencias que muestra la correlación entre dos medias móviles exponenciales. Este indicador fue desarrollado por Gerald Appel a finales de los 70.

Por norma general, los parámetros que se utilizan para calcular el MACD suelen ser una media exponencial de 26 días y otra media exponencial de 12 días. Con estos dos valores, se calcula la diferencia entre medias cuyo valor representa el propio oscilador MACD.

Obtenida dicha diferencia, se calcula su media exponencial (normalmente de periodo 9). Este resultado se conoce comúnmente como Línea de Señal.


3.2. Interpretación del MACD

Existen tres métodos como los más populares para analizar las señales aportadas por el MACD. Estos métodos son los siguientes:

1) Cruces
Este método consiste en estudiar el cruce de la línea del MACD con su Media de Señal o bien con la Banda Central (línea cero). Ambos cruces implican una confirmación del cambio de tendencia, puesto que representan el cambio de dirección a corto plazo frente a la tendencia previa a largo plazo.

El método más utilizado es el del cruce con la Media de Señal, aunque en el presente artículo nos centraremos en el otro cruce (más sencillo de interpretar).

2) SobreCompra/SobreVenta
Este método consiste en detectar los puntos de retorno o agotamiento de tendencia a través de la búsqueda de los picos y valles del MACD.

3) Divergencias
Este método consiste en detectar cambios de tendencia mediante la divergencia entre la dirección de los precios y la dirección del MACD. Cuando ocurre esto, la dirección del MACD marca el inicio de la posible nueva tendencia.


3.3. Estrategia Cruce del MACD con Banda Central

Como hemos dicho, en esta ocasión nos centraremos en el cruce del MACD con su banda, ya que es el método más sencillo de interpretar y por tanto de programar.

Este método es más conservador que el otro tipo de cruce con la Media de Señal, lo que implica pérdida de ganancias frente a una mayor probabilidad de acierto.

La regla de trading asociada a éste método sería la siguiente:

1) Si el MACD cruza al alza a la banda central, se mantienen posiciones largas.
2) Si el MACD cruza a la baja a la banda central, se mantienen posiciones cortas.

Por otro lado, existe un modo mucho más correcto de definir ésta estrategia, consistente en operar sólo cuando se produzca el momento justo del cruce. Para ello, es necesario que usemos tanto el valor del MACD en la barra actual, como el valor del MACD en la barra anterior.

La idea consiste en lo siguiente: Si en la barra anterior el MACD estaba, por ejemplo, bajo la banda central, y en la barra actual está sobre dicha banda, quiere decir que estamos justo en el momento del cruce: Ni antes ni después. De modo que estamos siendo bastante precisos.


Veamos a continuación cómo diseñar éste sistema.

3.4. Código Fuente (PDV)

Para trasladar ésta estrategia a un sistema en PDV, lo primero que tenemos que hacer es añadir a nuestro sistema el indicador MACD.

Hecho esto, ya podemos añadir las condiciones de entrada a largo y corto. En la siguiente imagen podemos ver como quedaría el diseño siguiendo la idea base que hemos planteado:


Sin embargo, si queremos detectar el momento exacto del cruce, en la siguiente imagen podemos ver cómo sería el diseño de la estrategia realizando éste cambio:



3.5. Código Fuente (VBA)

Lo primero que debemos hacer es definir un objeto de tipo DataIdentifier de modo que identifique al MACD. El proceso es similar al visto en el tema 2, sólo que en este caso usamos el MACD y sus correspondientes parámetros. 

Como no vamos a usar ni el PeriodoME_SIG ni el PriceSource, dejamos estos valores fijos y el resto los definimos como parámetros del sistema:

'¡¡ Parameters
Dim Contratos As Integer '1

Dim PeriodoME_1MACD As Long '12
Dim PeriodoME_2MACD As Long '26
Dim BandaMACD As Double '0
'Parameters !!
Dim MACDData As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    BarraCruce = 0
    SignoCruce = 0
    MACDData = .GetIndicatorIdentifier(MACD, Data, PeriodoME_1MACD, PeriodoME_2MACD, 9, PriceClose, BandaMACD)
    .StartBar = 0
End With
End Sub

El código del sistema para detectar cuando el MACD esté por encima o debajo de su banda sería el siguiente:

Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    If .GetIndicatorValue(MACDData) > MACDDataBandValue Then
        .Buy AtClose, Contratos
    End If
    If .GetIndicatorValue(MACDData) < MACDDataBandValue Then
        .Sell AtClose, Contratos
    End If

Si queremos detectar el momento exacto del cruce, el código del sistema quedaría de la siguiente forma:

Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    If .GetIndicatorValue(MACDData) > MACDDataBandValue Then
        If .GetIndicatorValue(MACDData, 1, 1) <= MACDDataBandValue Then
            .Buy AtClose, Contratos
        End If
    End If
    If .GetIndicatorValue(MACDData) < MACDDataBandValue Then
        If .GetIndicatorValue(MACDData, 1, 1) >= MACDDataBandValue Then
            .Sell AtClose, Contratos
        End If
    End If

No hay comentarios:

Publicar un comentario