Curso de Programación. 12.1. Utilización del Parabolic en sistemas.

Empezamos nuevo tema en el que hablaremos del indicador Parabólico y de su utilización como herramienta de análisis desde un sistema.

Este indicador, de uso muy extendido entre los analistas, fue desarrollado por J.Welles Wilder Jr como método para detectar la ruptura de las tendencias dominantes.

Cuando el precio rompe la línea de progresión definida por el indicador, éste se gira e inicia una nueva tendencia en sentido opuesto, de ahí su nombre Parabolic Stop And Reversal:



En Visual Chart, éste indicador tiene un modo muy particular de dibujarse, lo cual supone un impedimento a la hora de incluirlo en el código de los sistemas. Para solventar éste problema, se ha desarrollado una herramienta alternativa que será la que debemos utilizar a la hora de aplicar el parabólico a una nueva estrategia. La herramienta en cuestión se llama Ultimate Parabolic y pueden descargarla desde el siguiente enlace de nuestro blog:

Artículo acerca del Ultimate Parabolic.


En dicho artículo se trata con profundidad las diferencias existentes con respecto al indicador Parabolic original, por lo que no nos pararemos en esto y procederemos directamente a plantear una estrategia de ejemplo que haga uso del indicador.

Estrategia Cruce con Parabolic
La estrategia que vamos a diseñar se basará en el cruce del precio con el indicador. Las reglas a seguir serían las siguientes:

1) Cuando el precio esté por encima del Parabólico, tomar posiciones largas.
2) Cuando el precio esté por debajo del Parabólico, tomar posiciones cortas.

Además, vamos a aplicar un segundo Parabólico más acelerado para el cierre de posiciones abiertas.

Por tanto, el sistema contará con dos parabólicos:

Uno, más suavizado, que definirá las reglas de entrada, con parámetros 0.002, 0.002 y 0.2.

Otro, más acelerado, con el que definiremos las reglas de salida, con parámetros 0.004, 0.004 y 0.2.

Como vemos, al usar unos valores de aceleración más altos, el parabólico asociado a las salidas se moverá más rápido y por tanto cruzará antes con el precio.

Por último, vamos a añadir un horario de operativa entre las 9:00 y las 19:00, puesto que el sistema será intradiario.

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

Código PDV


(NOTA: Recuerden que el código aquí expuesto sólo incluye los métodos OnCalculateBar() y OnInitCalculate(). Tengan esto en cuenta a la hora de copiar el sistema).

Código VBA

'¡¡ Parameters
Dim Contratos As Long '1
Dim HoraIni As Integer '900
Dim HoraFin As Integer '1900
Dim AccStartENT As Double '0.02
Dim AccIncENT As Double '0.02
Dim AccMaxENT As Double '0.2
Dim AccStartSAL As Double '0.04
Dim AccIncSAL As Double '0.04
Dim AccMaxSAL As Double '0.2
'Parameters !!
Dim parabentdata As DataIdentifier
Dim parabsaldata As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    parabentdata = .GetIndicatorIdentifier(PARABOLICU, Data, AccStartENT, AccIncENT, AccMaxENT)
    parabsaldata = .GetIndicatorIdentifier(PARABOLICU, Data, AccStartSAL, AccIncSAL, AccMaxSAL)
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    If (.Time >= HoraIni And .Time < HoraFin) Then
        Dim parabentact As Double
        Dim parabentant As Double
        Dim parabsalact As Double
     
        parabentact = .GetIndicatorValue(parabentdata)
        parabentant = .GetIndicatorValue(parabentdata, 1)
        parabsalact = .GetIndicatorValue(parabsaldata)
     
        If (.GetMarketPosition = 1) Then
            'salida largos
            If (.Close() < parabsalact) Then
                .ExitLong AtClose, Contratos
            End If
        ElseIf (.GetMarketPosition = -1) Then
            'salida cortos
            If (.Close() > parabsalact) Then
                .ExitShort AtClose, Contratos
            End If
        End If
        'entradas
        If (.Close() > parabentact And .Close(1) <= parabentant) Then
            .Buy AtClose, Contratos
        ElseIf (.Close() < parabentact And .Close(1) >= parabentant) Then
            .Sell AtClose, Contratos
        End If
    Else
        If (.GetMarketPosition = 1) Then
            .ExitLong AtClose, Contratos
        ElseIf (.GetMarketPosition = -1) Then
            .ExitShort 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