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

Esta semana finalizamos el análisis del indicador MACD, centrándonos en el comportamiento del MACD respecto a su Media Señal.

Como todas las semanas, les hemos dejado un ejercicio relacionado con este artículo en nuestro blog. Pueden acceder desde el siguiente enlace: Ejercicio 2 MACD.

3. MACD

3.6. Cruce del MACD con su Media Señal.

Ya anticipamos la semana anterior que éste método de señal del MACD es el más utilizado. La explicación a esto se debe a que el momento de señal se anticipa al dado por el cruce del MACD con la banda central, por lo que disminuye el retardo generado por las medias que sirven de base.

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

1) Si el MACD cruza al alza a la Media Señal, se mantienen posiciones largas.
2) Si el MACD cruza a la baja a la Media Señal, se mantienen posiciones cortas.

No obstante, y a diferencia de la estrategia anterior, en este caso vamos a añadir un segundo control a la regla de trading.

Realizaremos este cambio, por un lado, para filtrar el número de operaciones generadas, y por otro lado, para aprender a diseñar una estrategia más elaborada.

La regla de trading compuesta que asociaremos al método sería la siguiente:

1) Si el MACD cruza al alza a la Media Señal siempre y cuando el MACD esté por debajo de la Banda, se mantienen posiciones largas.
2) Si el MACD cruza a la baja a la Media Señal siempre y cuando el MACD esté por encima de la Banda, se mantienen posiciones cortas.


Como vemos, haciendo éste cambio, filtramos los cruces rápidos del MACD con su Media. 

Lo interesante de desarrollar esta idea es que en función del desarrollo del precio tendrá dos consecuencias: 
1) Si se confirma el cambio de dirección, nos adelantaremos al momento de giro de las medias exponenciales.
2) Pero si la tendencia continúa su curso, el cruce falso provocará que una posición tomada demasiado pronto arrastre una pérdida muy elevada como consecuencia del reajuste del propio MACD.

3.7. 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.

A diferencia de la estrategia anterior, en este caso añadimos también el parámetro PeriodoMEDSIG (9). Hacemos esto puesto que querremos permitir modificar el periodo de la Media Señal.

En esta ocasión también vamos a detectar el momento exacto del cruce. Como ahora usamos la Media Señal como referencia, tenemos que comparar el MACD con la línea 2 del indicador, que es la línea que corresponde con la Media Señal. Mucha atención a esto, ya que algunos usuarios confunden el parámetro PeriodoMEDSIG con el valor de la línea de señal (la línea 2).

En la siguiente imagen se observa el cruce del MACD con la Media señal. Seguidamente, vemos cómo comprueba si dicho cruce ocurre por encima o debajo de la Banda. De no ser así, no opera.


3.8. Código Fuente (VBA)

Nuevamente añadiremos un objeto de tipo DataIdentifier de modo que identifique al MACD, tal y como hicimos en el anterior sistema.

La diferencia respecto al caso anterior, consiste en que ahora sí que añadiremos el parámetro PeriodoME_SIG, ya que lo vamos a necesitar para calcular la media señal del MACD:

'¡¡ Summary
' Classification: User
'Summary !!
'¡¡ Parameters
Dim Contratos As Integer '1
Dim Periodo1 As Integer '12
Dim Periodo2 As Integer '26
Dim PeriodoME_SIG As Integer '9
Dim BandaMACD As Double '0
'Parameters !!
Dim MACDData As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    MACDData = .GetIndicatorIdentifier(MACD, Data, Periodo1, Periodo2, PeriodoME_SIG, PriceClose, BandaMACD)
End With
End Sub

En esta ocasión la regla de entrada estará compuesta por dos sentencias IF...ELSE anidadas. La primera, determinará el cruce del MACD con la Media Señal, y la segunda, filtrará los cruces de modo que sólo se quedará con los que cumplan la condición de la Banda Central.

Cabe destacar el modo en el que accedemos a los valores de la Media Señal: Seguimos usando la función GeIndicatorValue aplicada al MACDData, sólo que en este caso seleccionamos el valor numérico 2 para el campo Line.

El código del sistema sería el siguiente:

Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim MACDact As Double
    Dim MACDant As Double
    Dim MediaSIGact As Double
    Dim MediaSIGant As Double
    MACDact = .GetIndicatorValue(MACDData)
    MACDant = .GetIndicatorValue(MACDData, 1, 1)
    MediaSIGact = .GetIndicatorValue(MACDData, 0, 2)
    MediaSIGant = .GetIndicatorValue(MACDData, 1, 2)
    If (MACDact > MediaSIGact) And (MACDant <= MediaSIGant) Then
        If (MACDact < BandaMACD) Then
            .Buy AtClose, Contratos
        End If
    ElseIf (MACDact < MediaSIGact) And (MACDant >= MediaSIGant) Then
        If (MACDact > BandaMACD) Then
            .Sell 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