II Curso de Programación. Sistemas Temas 2 y 3.

Continuamos con la publicación de los sistemas de ejemplo que estamos elaborando a través de nuestro 2º Curso de Programación para Visual Chart 5.

Sistema Tema 2: Ruptura niveles de soporte y resistencia

Con éste sistema tratamos de explicar cómo desarrollar sistemas con órdenes de entrada en stop. Para ello, nos basamos en el uso de dos funciones que nos facilitan el precio de los últimos niveles de soporte y resistencia en base a una distancia determinada: Estas funciones son GetHighest y GetLowest.


Las reglas del sistema eran las siguientes:
1. Comprar al tocar un nivel de resistencia.
2. Vender al tocar un nivel de soporte.

Además, incluimos la condición de que fuera un sistema intradia (sólo operativo durante un intervalo horario).

Por último, incluimos la opción de que la distancia para calcular los niveles de resistencia y soporte fueran independientes: 
1. El cálculo de los niveles de resistencia iría en base a las últimas T barras (T = 20).
2. El cálculo de los niveles de soporte iría en base a las últimas P barras (P = 50).



El desarrollo de éste sistema sería el siguiente:

Código PDV

Código VBA

'¡¡ Parameters
Dim HoraInicio As Integer '900
Dim HoraFin As Integer '1930
Dim T As Integer '20
Dim P As Integer '50
'Parameters !!
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    If (.Time() >= HoraInicio And .Time() < HoraFin) Then
        Dim myprice As Double
        myprice = .GetHighest(Data, PriceHigh, T)
        If (.Close() < myprice) Then
            If (.GetMarketPosition() <> 1) Then
                .Buy AtStop, 1, myprice
            End If
        End If
        myprice = .GetLowest(Data, PriceLow, P)
        If (.Close() > myprice) Then
            If (.GetMarketPosition() <> -1) Then
                .Sell AtStop, 1, myprice
            End If
        End If
    Else
        If (.GetMarketPosition() = 1) Then
            .ExitLong AtClose, 1
        Else
            .ExitShort AtClose, 1
        End If
    End If
End With
End Sub

Sistema Tema 3: Ruptura inversa niveles de soporte y resistencia (antitendencia).

El siguiente sistema que diseñamos era exactamente igual que el visto anteriormente, con la salvedad de que en esta ocasión se trata de un sistema antitendencial, ya que opera en sentido opuesto a la dirección del precio.

Las reglas eran las siguientes:
1. Vender al tocar un nivel de resistencia.
2. Comprar al tocar un nivel de soporte.

En este caso, veíamos un ejemplo de sistema en el que se utilizaban órdenes de entrada limitadas.

Además, incluimos en el sistema un control de pérdidas, puesto que al ser un sistema con mucho riesgo, es necesario controlar las posibles señales falsas.

La regla de salida era la siguiente:
1. Si estamos abiertos, esperamos X barras.
2. Pasadas X barras:
- Si es compra entonces Cerrar si Cierre < Precio Entrada.
- Si es venta entonces Cerrar si Cierre > Precio Entrada.


El desarrollo de éste sistema sería el siguiente:

Código PDV
Código VBA

'¡¡ Parameters
Dim NBarras As Integer '5
Dim NBEspera As Integer '10
'Parameters !!
Dim esperacompra As Boolean
Dim esperaventa As Boolean
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    esperacompra = False
    esperaventa = False
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim myprice As Double
  
    If (.GetMarketPosition() = 1) Then
        esperacompra = False
        If (.GetBarsSinceEntry() > NBEspera) Then
            If (.Close() < .GetEntryPrice()) Then
                .ExitLong AtClose, 1
                esperaventa = True
            End If
        End If
    End If
    If (.GetMarketPosition() = -1) Then
        esperaventa = False
        If (.GetBarsSinceEntry() > NBEspera) Then
            If (.Close() > .GetEntryPrice()) Then
                .ExitShort AtClose, 1
                esperacompra = True
            End If
        End If
    End If
  
    myprice = .GetLowest(Data, PriceLow, NBarras)
  
    If (.Close() > myprice And Not esperaventa) Then
        If (.GetMarketPosition() <> 1) Then
            .Buy AtLimit, 1, myprice
        End If
      
    End If
  
    myprice = .GetHighest(Data, PriceHigh, NBarras)
  
    If (.Close() < myprice And Not esperacompra) Then
        If (.GetMarketPosition() <> -1) Then
            .Sell AtLimit, 1, myprice
        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