Curso de Programación. 8.1. ROC Momentum

Esta semana hablaremos del indicador de momento (Momentum Indicator).

Además de introducir el uso de éste indicador, veremos cómo trabajar con dos series de datos con el mismo sistema, un proceso muy utilizado entre los inversores para distintos fines.

Pero vayamos paso a paso. Empezaremos hablando del indicador en cuestión.

Momentum Indicator
El indicador de momento nos permite mostrar la relación de precios entre el cierre actual y el de hace N periodos (valor parametrizable).

Este resultado se multiplica por 100, de modo que el índice oscila en torno a éste valor. En función de su posición, obtenemos las siguientes consideraciones relativas a la tendencia:
1) Cuando el Momentum está sobre 100, indica un crecimiento en los precios.
2) Cuando el Momentum está bajo 100, indica que los precios han bajado.

Es lógico pensar que cuanto más alejado esté el resultado del Momentum respecto a la banda de 100, mayor será la tasa de movimiento que se está dando, tanto en un sentido como en otro:



En la siguiente imagen, podemos ver cómo en el primer movimiento bajista el valor del Momentum se distancia con mayor intensidad de la banda central que en el segundo de los movimientos bajistas: Esto refleja que el cambio de dirección se ha producido de forma acelerada, mientras que en el segundo caso ha sido un movimiento bajista más atenuado.

ROC Momentum (Ratio Of Change)
Puesto que están íntimamente relacionados, cabe destacar también al indicador Ratio Of Change o ROC Momentum. Este indicador representa la variación en tanto por uno entre el cierre actual y el de hace N periodos.

En éste caso, el valor oscila alrededor de cero, con valores máximos en uno y menos uno.

Su interpretación y funcionalidad es idéntica a la del Momentum, variando únicamente en la escala sobre la que se mueve:



En el ejemplo, se observa claramente cómo el ROC Momentum replica el movimiento del otro indicador pero a diferente escala, de ahí que indiquemos la igualdad existente entre ambos.

La semana que viene desarrollaremos un ejemplo que haga uso del ROC Momentum. En el presente artículo, vamos a centrarnos en diseñar una estrategia que use el Momentum Indicator pero aplicado a una segunda serie de datos.

Estrategia Dos Series de datos
Como decimos, la particularidad de la estrategia que vamos a tratar es que se basa en las señales dadas por un segundo gráfico.

Las reglas del sistema van a ser las siguientes:
1) Cuando el Momentum sobre el IBEX-35 FUTURO suba hasta 105, entrar a largo en TELEFONICA FUTURO.
2) Cuando el Momentum sobre IBEX-35 FUTURO baje hasta 95, entrar a corto en TELEFONICA FUTURO.
3) Filtrar con una Media Exponencial de 100 aplicada al gráfico de TELEFONICA.
4) Incluir un Stop de Pérdidas al 15% del precio de entrada.

Esto quiere decir que el indicador Momentum va a estar aplicado a una segunda serie de datos. ¿Cómo hacer esto? Existen varios métodos para gestionar dos series de datos desde un sistema, pero nosotros vamos a optar por la más sencilla, consistente en insertar el sistema en una ventana con dos gráficos, tal que así:



El proceso a seguir para preparar este escenario está debidamente explicado en nuestro artículo Utilización de varios gráficos en un sistema, por lo que pasaremos directamente a mostrar cómo quedaría el diseño del sistema en cuestión:

Código PDV


Código VBA

'¡¡ Parameters
Dim Contratos As Long '1
Dim PeriodoMom As Integer '12
Dim BandaCompra As Double '110
Dim BandaVenta As Double '90
Dim PeriodoMedia As Integer '100
Dim PctStopLoss As Double '0.5
Dim Inverso As Integer '0
'Parameters !!
Dim MomData As DataIdentifier
Dim AvExpData As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    MomData = .GetIndicatorIdentifier(Momentum, Data2, PeriodoMom, PriceClose, 100)
    AvExpData = .GetIndicatorIdentifier(AvExponential, Data, PeriodoMedia, PriceClose)
    .StartBar = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim MomAct As Double
    Dim MomAnt As Double
    Dim AvExpAct As Double
    MomAct = .GetIndicatorValue(MomData)
    MomAnt = .GetIndicatorValue(MomData, 1)
    AvExpAct = .GetIndicatorValue(AvExpData)
    If Inverso = 1 Then
        If .GetMarketPosition = 1 Then
            .ExitLong AtLimit, Contratos, .GetEntryPrice * (1 + PctStopLoss / 100)
        ElseIf .GetMarketPosition = -1 Then
            .ExitShort AtLimit, Contratos, .GetEntryPrice * (1 - PctStopLoss / 100)
        End If
    Else
        If .GetMarketPosition = 1 Then
            .ExitLong AtStop, Contratos, .GetEntryPrice * (1 - PctStopLoss / 100)
        ElseIf .GetMarketPosition = -1 Then
            .ExitShort AtStop, Contratos, .GetEntryPrice * (1 + PctStopLoss / 100)
        End If
    End If
    If (MomAnt <= BandaCompra And MomAct > BandaCompra) Then
        If (.Close() > AvExpAct) Then
            If Inverso = 0 Then
                .Buy AtClose, Contratos
            Else
                .Sell AtClose, Contratos
            End If
        End If
    ElseIf (MomAnt >= BandaVenta And MomAct < BandaVenta) Then
        If (.Close < AvExpAct) Then
            If Inverso = 0 Then
                .Sell AtClose, Contratos
            Else
                .Buy AtClose, Contratos
            End If
        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