Curso de Programación. 8.2. El ROC Momentum como filtro de entrada.

Con éste artículo daremos por finalizado el estudio de los indicadores de momento, centrándonos en el indicador de tasa de cambio o ROC Momentum, que es como aparece en la lista de indicadores de Visual Chart.

ROC Momentum
Como comentábamos en el anterior artículo, ésta herramienta nos permite medir la tasa de cambio del precio actual sobre un precio anterior (determinado por el usuario). De modo que su valor expresa el incremento como una fracción.

La función que lo define sería la siguiente:

El indicador nos permite detectar la tendencia del mercado en función de si su valor es positivo o negativo, y en cuanto mayor sea su valor, más fuerte es la tendencia que detecta:



En la imagen, podemos ver cómo durante el proceso de acumulación del 20 de enero de 2014, el valor del indicador se encontraba muy cerca de cero, expresando por tanto que la tasa de cambio es baja y por tanto existe falta de tendencia. Sin embargo, durante los procesos de distribución del 21 de enero, vemos cómo el indicador se aleja de cero, lo cual se interpreta como la formación de tendencias fuertes.


Como vemos, el funcionamiento es muy similar al de otro tipo de osciladores, más aún del indicador Momentum que ya vimos en el anterior artículo de éste tema.

La particularidad de éste indicador es que sus resultados están expresado como fracciones, lo cual puede ser muy útil como herramienta de filtro tanto para operaciones de entrada como de salida.

En la siguiente estrategia, vamos a ver un ejemplo de cómo utilizar el indicador siguiendo estas pautas.

Estrategia Soportes y Resistencias en base al ROC
La idea que vamos a seguir es la siguiente:

1) Cuando el ROC sea mayor que cero, comprar al precio máximo más porcentaje según el ROC.
2) Cuando el ROC sea menor que cero, vender al precio mínimo menos porcentaje según el ROC.

Y además, añadiremos las siguientes reglas de salida:

1) Cerrar a las 15:00 horas.
2) Stop de Pérdidas al 15% del precio de entrada.

Es decir, se trata de un sistema tendencial pero con la particularidad de que aplicaremos un filtro respecto al valor máximo o mínimo de cada barra en función del valor del propio indicador:

En la siguiente imagen podemos ver un ejemplo de cómo se calcularía el precio de entrada:


Si el precio supera este filtro, nos posicionaremos y esperaremos a que se alcance el horario establecido o bien rompa el stop de pérdidas.

Si el precio retrocede y no termina de evolucionar a favor de la dirección del ROC, el sistema recalculará el precio de entrada nuevamente. Lo interesante de la idea es que cuanto más tarde en ejecutarse la orden de entrada, mayor será la amplitud del filtro. Si se trata de un movimiento con un ràpido desgaste, el sistema no operará, pero si el movimiento se prolonga y sigue creciendo, terminará por ejecutar la orden, siempre a favor del movimiento:



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

Código PDV


Código VBA

'¡¡ Parameters
Dim Contratos As Long '1
Dim PeriodoROC As Integer '12
Dim BandaROC As Double '0
Dim HoraCierre As Double '1500
Dim PctStopLoss As Double '15
'Parameters !!
Dim ROCData As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    ROCData = .GetIndicatorIdentifier(ROC, Data, PeriodoROC, PriceClose, BandaROC)
    .StartBar = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim ROCAct As Double
    ROCAct = .GetIndicatorValue(ROCData)
    If (.Time >= HoraCierre) Then
        If .GetMarketPosition = 1 Then
            .ExitLong AtClose, Contratos
        ElseIf .GetMarketPosition = -1 Then
            .ExitShort AtClose, Contratos
        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
        If (ROCAct > BandaROC And .GetMarketPosition <> 1) Then
            .Buy AtStop, Contratos, .High * (1 + ROCAct)
        ElseIf (ROCAct < BandaROC And .GetMarketPosition <> -1) Then
            .Sell AtStop, Contratos, .Low * (1 + ROCAct)
        End If
    End If
End With
End Sub

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