El indicador MACD Momentum Ratio

 Edición Diciembre Revista Traders - Post Visual Chart

En anteriores artículos, poníamos el acento sobre ciertas herramientas de análisis técnico que nos proporcionan información relativa al ciclo de vida de los impulsos. Entre ellas, encontrábamos el oscilador de Tasa de Cambio, así como el oscilador Momentum. La información que nos proporcionan estas herramientas es especialmente interesante cuando se trata de estudiar la evolución del precio, destacando los momentos de máxima amplitud. Localizar dichos puntos es sumamente interesante, puesto que suponen el punto de partida (o fin) de un ciclo. En el presente artículo, presentamos una nueva herramienta para el estudio de la amplitud, sobre la cual destacaremos su capacidad para normalizar los resultados, independientemente de la compresión temporal o del producto financiero sobre el que la apliquemos.


El origen del indicador

El origen de éste indicador lo encontramos en el artículo de Glenn A. Barlis Signal Processing Basics, Part 3(Stocks & Commodities, Junio 2010).  En dicho artículo, el autor nos proponía buscar los puntos de giro del precio mediante osciladores. Entre ellos, destacaba el indicador Momentum, puesto que es una buena herramienta para marcar los puntos de máxima diferencia (si bien éste indicador aporta la misma información que el indicador de Tasa de Cambio o ROC, por lo que cualquiera de los dos nos sería válido).

La aportación del Momentum consiste en marcar la diferencia entre los precios dentro de un periodo de tiempo determinado. El resultado es un oscilador que traza picos y valles sobre los puntos de mayor variación.

Glenn A. Barlis proponía aplicarle un par de medias móviles con el fin de suavizar la señal dada, y de éste modo, tratar de eliminar el mayor ruido posible. Es decir, tratamos de filtrar los picos y valles facilitados por el Momentum quedándonos tan solo con los más representativos. Obviamente, al calcular las medias, se retrasa el momento de detección, pero es un riesgo asumible a cambio de mejorar la fiabilidad del indicador.

El periodo de tiempo utilizado para el cálculo de dichas medias se obtiene en base al propio periodo de estudio del Momentum. En concreto, la primera media tendrá un periodo igual al doble del periodo aplicado al Momentum (2N). En cuanto a la segunda media, su periodo siempre debe ser un valor mayor al de la primera, puesto que se trata de una media más lenta y por tanto a más largo plazo. Un buen valor que se puede aplicar es el de 3 veces el periodo del Momentum (2 ×  N = 3N).

A diferencia del estudio sobre el Momentum, en el cual observábamos los picos y valles generados por el propio indicador, en este caso nos fijaremos en el movimiento generado por la diferencia entre las medias. Por tanto, el valor a representar será la variación entre la media de menor periodo y la de mayor periodo.

Si nos fijamos, por su similitud, lo que vamos a obtener es un indicador Moving Average Convergence/Divergence (o MACD) aplicado sobre el Momentum.

Siguiendo con ésta idea, el autor consideraba la posibilidad de crear un segundo juego de medias de mayor periodo con las que obtener un nuevo indicador de tipo MACD. Este nuevo indicador suavizaría, si cabe más, los puntos de giro del Momentum. En realidad, lo que buscaremos con éste MACD de mayor periodo es usarlo como señal de alerta frente a los resultados del primer MACD.

La combinación de ambos indicadores de tipo MACDaplicados al Momentum es a lo que hemos pasado a denominar como MACD Momentum.  El cual quedaría así:

Fast MACD Momentum = MACD(Momentum, 2N, (2N) X 1.5, 1, Cierre, 0)
Slow MACD Momentum = MACD(Momentum, 4N, (4N) X 1.5 , 1, Cierre, 0)

Donde N = Periodo del indicador de momentos.

Llamaremos Fast MACD Momentum al indicador MACD que se mueve más rápido y Slow MACD Momentum al que se mueve con mayor lentitud (más suavizado).

Como vemos, el Slow MACD Momentum se calcularía aplicando cuatro veces el periodo N, mientras que la segunda media del Slow sería de 6 veces el periodo N.

Una vez hemos explicado el cálculo de la herramienta, pasemos a ver cómo es su funcionamiento.

Estudio de la señales del MACD Momentum.

Los puntos de giro que trataremos de detectar usando el MACD Momentum se basarán en los picos y valles generados por el Slow MACD.

Cuando el Slow MACDtraza un pico sobre la línea cero, pone de manifiesto el fin del impulso alcista y un movimiento posterior a la baja.

Cuando el Slow MACD traza un valle bajo la línea cero, informa del fin del impulso bajista y un movimiento posterior al alza.

El cruce del Slow MACD sobre el Fast MACD sirve de señal de confirmación

Un ejemplo de ello lo vemos en el gráfico 1. En dicho gráfico, observamos cómo en el punto E se genera la formación de un nuevo pico, lo cual tomaríamos como señal inequívoca de giro bajista. Sin embargo, el 29 de octubre se genera un gap alcista que impulsa nuevamente a los precios al alza, generando una situación de incertidumbre. Al usar el cruce de las dos líneas como punto de confirmación, en este caso habríamos esperado al punto F antes de tomar cualquier decisión.

El principal problema de éste (o de cualquier otro indicador) se presenta en las zonas de incertidumbre, periodos durante los cuales el oscilador puede alternar picos y valles de forma consecutiva. Lo interesante de ésta herramienta es que al mostrar datos especialmente suavizados, disminuye el número de ocasiones en el que puede darse esta circunstancia. No obstante, el problema sigue existiendo.

Un ejemplo lo podemos encontrar en el gráfico 2. El valle del punto B implicaría un nuevo giro al alza, si bien vemos que no es así y se inicia un proceso de congestión.

En realidad, el movimiento oscilatorio es el mismo independientemente de la amplitud del mismo, de ahí que puedan aparecer este tipo de situaciones en caso de que el movimiento lateral se alargue en el tiempo.
Una buena idea que podemos aplicar para despreciar los picos y valles poco relevantes, es establecer ciertos niveles de distancia mínima, de modo que si se genera un nuevo pico o valle, pero éste no supera dicha distancia, entonces no lo consideramos y esperamos al siguiente movimiento.
El MACD Momentum tiene un rango de valores en torno a +1 y -1. Podemos considerar como un buen punto de corte una distancia mínima de +0.5 y -0.5 como para dar por bueno un nuevo pico o valle.

Esta regla en la mayoría de los casos puede ser considerada como aceptable. No obstante, si analizamos el comportamiento del oscilador en diferentes escenarios, veremos que en ciertas ocasiones el rango de amplitud del MACD Momentum varía en base a los incrementos de volatilidad dados previamente. Así, puede ocurrir que tras un fuerte movimiento de subida que haya podido alcanzar los +1.5 puntos, seguidamente se produzcan varios picos y valles mayores de +0.5 y -0.5 asociados a un movimiento lateral, pero que tienen esta amplitud como consecuencia del movimiento previo. Para este caso, la distancia establecida no nos es válida, ya que debería ser mayor. Sin embargo, si cambiásemos el sesgo y pusiéramos una distancia mínima mayor (por ejemplo, entre +0.8 y -0.8), estaríamos dejando fuera demasiados giros potencialmente interesantes… ¿Qué hacer en tal caso?

La propuesta que vamos a hacer en éste artículo es generar una variación del MACD Momentum consistente en normalizar los resultados obtenidos. Llamaremos a éste nuevo indicador MACD Momentum Ratio.

Normalización de los niveles de distancia del MACD Momentum.

Con el MACD Momentum Ratio, como decimos, buscamos establecer que el rango de la distancia entre el Slow MACD y el Fast MACD sea siempre relativo a la amplitud obtenida en el periodo más próximo.

Para empezar, el dato que mostrará este MACD Momentum Ratio será la diferencia entre los MACD, ya que en última instancia ésta es la información que nos interesa (recordemos que esperábamos al filtro de cruce para confirmar un nuevo pico o valle). Como consecuencia,  el valor devuelto oscilará en torno a cero en base a la separación entre ambas medias: Un resultado positivo indicará que el Slow MACD está por encima del Fast MACD y que por tanto confirma una dirección alcista. Un resultado negativo, indicará un Slow MACD menor que el Fast MACD y por tanto dirección bajista.

El siguiente paso consistirá en devolver los resultados en base al rango más alto dado dentro de un determinado intervalo de tiempo. Lo que conseguimos con esto es normalizar las distancias según lo acontecido recientemente. Así, si los rangos de separación están siendo altos en un determinado momento, el resultado será el mismo que si sucede lo contrario (rangos muy bajos dentro de un intervalo de tiempo), ya que el valor que mostrará el indicador irá siempre respecto al valor más alto de cada periodo, y además, siempre oscilando en torno al mismo intervalo de puntos (+1 y -1).

Los datos dados por el MACD Momentum Ratio se calcularán en tanto por uno y la ecuación que los representa sería la siguiente:

MACDMom Ratio = S x (Abs(SlowMACD-FastMACD)) / MAX(Abs(SlowMACD-FastMACD), N)

De donde:
S = Signo de la diferencia entre SlowMACD y FastMACD
N = Periodo de tiempo durante el cual buscamos la diferencia mayor (en valor absoluto).

En el gráfico 3 podemos ver dibujado el MACD Momentum Ratio aplicado sobre el gráfico de 20 minutos de GDF Suez. Asimismo, vemos también dibujado el MACD Momentum. De éste gráfico destacamos dos puntos:

Primero, que sobre compresiones temporales menores, vemos cómo el intervalo de distancia del MACD Momentum es diferente, oscilando entre +0.2 y -0.2, mientras que el MACD Momentum Ratio mantiene su intervalo fijo en torno a +1/-1.

Y segundo, que el MACD Momentum Ratio se adapta a cada situación. Si nos fijamos, los picos dados en el punto D y en el punto E tienen la misma amplitud real, tal y como se muestra en el MACD Momentum. Sin embargo, el otro indicador los dibuja con una amplitud menor, puesto que en términos relativos, se trata de movimientos de menor fuerza. En el punto G tendríamos un ejemplo similar. Esto permite filtrar mejor las típicas zonas laterales que aparecen tras procesos fuertes de distribución.

Generación de señales en base al MACD Momentum Ratio.

A continuación, vamos a plantear una serie de reglas a través de las cuales estableceremos criterios de tendencia en base al indicador.

Como lo que nos interesa es aprovechar los giros de tendencia generados por picos y valles que hayan sido relevantes, la estrategia a seguir sería la siguiente:

Establecemos como nivel de distancia mínima un +/-0.5 (recordemos, en tanto por uno).

Cada vez que se genere un tope que supere los +0.5 puntos, tomamos como señal vendedora el posterior cruce bajista.

En el lado opuesto, cada vez que se sobrepase los -0.5 puntos, tomamos como señal compradora el posterior cruce alcista.

En el gráfico 3 podemos ver un ejemplo de la aplicación de éstas señales. El pico del punto A llega a alcanzar el +1, por lo que damos por bueno este punto de giro, de modo que cuando se produce el cruce con la línea cero (recordemos, esto implica el cruce del Fast MACD con el Slow MACD) tendríamos una señal bajista. La señal de compra posterior al punto B termina siendo falsa, debido a que tras la señal bajista se produce un proceso de congestión. Tras el giro del punto D, tendríamos una nueva señal bajista (la cual podríamos también considerar como falsa). Por último, el valle del punto F genera la señal alcista siguiente.

Conclusiones.

Si bien es cierto que en el ejemplo del gráfico 3 algunas de las señales no son válidas, también lo es que el criterio utilizado permite filtrar notablemente las zonas laterales.

También cabe destacar que, una vez establezcamos los parámetros más acordes con los que obtener el mayor número de señales acertadas, podemos exportar dicho conjunto de parámetros a otros activos y a otras compresiones temporales, gracias a la normalización de los resultados.

El MACD Momentum Ratio permite, por tanto, aprovechar la información relativa a los ciclos propios del Ratio de Cambio, la suavización de señales del MACD y por último, la normalización de los datos típica de osciladores como el RSI.

  
G1) Indicador MACD Momentum en Volkswagen Diario.



En éste gráfico de Volkswagen a 1 día, hemos aplicado el indicador MACD Momentum(5,2,1.5,4,1.5). El punto A marca un nuevo pico lo suficientemente separado de cero como para considerarlo relevante. El punto B establece la señal de confirmación al cruzarse las dos líneas del indicador. No obstante, la señal resulta falsa, el precio retrocede y se inicia un periodo lateral. El punto C marca un nuevo valle confirmado en el punto D. En esta ocasión, la señal sí implica un punto de giro. E n el punto E se refleja la importancia de esperar a la confirmación del cruce, el cual aparece en el punto F.
Fuente: Visual Chart

  
G2) Indicador MACD Momentum en Telefónica Diario.



En éste gráfico de Telefónica Diario, queda reflejado el problema de las etapas laterales. El pico generado en el punto A marca correctamente la zona de giro, pero seguidamente se inicia un proceso con poco movimiento que genera los picos y valles desde el punto B hasta el punto F. Los puntos C y D quedan filtrados por la regla del cruce de medias, pero el resto de puntos sí están confirmados.
Fuente: Visual Chart

   
G3) Señales del MACD Momentum Ratio en GDF Suez a 20 minutos.



El siguiente gráfico vemos aplicado tanto el MACD Momentum como el MACD Momentum Ratio. El pico del punto A genera la señal de venta siguiente (una vez cruzan las medias), ya que lo consideramos un punto de giro relevante. El valle del punto B genera la señal de compra siguiente. El punto C marca un nuevo pico, si bien la señal no se confirma con el cruce de las medias y es el  pico del punto D el que genera la señal. El pico del punto G no genera una nueva señal de venta porque no cumple la distancia mínima exigida (situada en +0.5 puntos).
Fuente: Visual Chart


Código de programación


MACD MOMENTUM RATIO PARA VISUAL CHART 5.
'¡¡ Parameters
Dim MomPeriod As Integer '5
Dim MACD1_N1 As Integer '2
Dim MACD1_N2 As Double '1.5
Dim MACD2_N1 As Integer '6
Dim MACD2_N2 As Double '1.25
Dim N As Integer '100
'Parameters !!
Dim momdata As DataIdentifier
Dim macd1data As DataIdentifier
Dim macd2data As DataIdentifier
Dim dif() As Double
Dim dif2() As Double
Dim lastbar As Long
Option Explicit
Public APP As OscUserApp
Implements Indicator
Public Sub Indicator_OnInitCalculate()
With APP
    momdata = .GII(Momentum, Data, MomPeriod, PriceClose, 100)
    macd1data = .GII(MACD, momdata, MACD1_N1 * MomPeriod, (MACD1_N1 * MomPeriod) * MACD1_N2, 1, PriceClose, 0)
    macd2data = .GII(MACD, momdata, MACD2_N1 * MomPeriod, (MACD2_N1 * MomPeriod) * MACD2_N2, 1, PriceClose, 0)
    ReDim dif(N - 1)
    lastbar = -1
    .SetLineName 1, "macdmom_r"
End With
End Sub
Public Sub Indicator_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim curmacd2 As Double
    Dim curmacd1 As Double   
    curmacd2 = .GIV(macd2data)
    curmacd1 = .GIV(macd1data)   
    If (curmacd2 <> NullValue)  Then
        If lastbar <> Bar Then
            dif2 = dif
        Else
            dif = dif2
        End If   
        Dim i As Integer
        For i = N - 1 To 1 Step -1
            dif(i) = dif(i - 1)
        Next i   
        Dim ippos As IndicatorPosition
        Dim signal As Integer       
        If (curmacd1 > curmacd2) Then
            ippos = ipBull
            signal = 1
        Else
            ippos = ipBear
            signal = -1
        End If       
        dif(0) = Math.Abs((curmacd1 - curmacd2))       
        Dim ratio As Double
        Dim maxdif As Double       
        maxdif = GetMaxDif()       
        If maxdif <> 0 Then
            ratio = dif(0) / maxdif           
            .SetIndicatorValue signal * ratio, Position:=ippos
            .SetBarRepresentation 0, 1, irVolume
        End If
    End If   
    lastbar = Bar
End With
End Sub
Public Sub Indicator_OnSetParameters(ParamArray ParamList() As Variant)
'¡¡ Parameters initialization
'Parameters initialization !!
End Sub
Public Sub Indicator_OnCalculateRange(ByVal StartBar As Long, ByVal FinalBar As Long)
    Dim i As Long
    i = APP.StartBar
    If StartBar > i Then
        i = StartBar
    End If
    While Not APP.ShouldTerminate And i <= FinalBar
        APP.CurrentBar = i
        Indicator_OnCalculateBar i
        i = i + 1
    Wend
End Sub
Private Sub OscUserAppInstance_OnConnection(ByVal Application As OscUserApp, ByVal MTDllInst As Object, Custom() As Variant)
    Set APP = Application
End Sub
Private Function GetMaxDif() As Double
    Dim max As Double
    Dim i As Integer
   
    max = dif(0)
    For i = 1 To N - 1
        If dif(i) > max Then
            max = dif(i)
        End If
    Next i
    GetMaxDif = max
End Function

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