II Curso de Programación. Sistema Tema 1.

A petición de nuestros usuarios, iremos subiendo a nuestro blog los códigos de programación de los sistemas de ejemplo que se van a ir desarrollando a lo largo de nuestro 2º Curso de Programación para Visual Chart 5.

A través de estos artículos, explicaremos las reglas de cada uno de los sistemas y mostraremos el diseño. Vamos a incluir tanto el desarrollo de estos sistemas en VBA como a través de la Plataforma Visual (PDV).

Sistema Tema 1: Cruces con una media simple

Éste primer sistema de iniciación se basaba en el cruce de los precios con respecto a una media móvil simple. Las reglas base del sistema eran las siguientes:

1. Comprar cuando el precio esté por encima de una media simple.
2. Entrar cortos cuando el precio esté por debajo de dicha media.

Además, incluimos la opción de poder elegir entre utilizar una media simple o bien utilizar una media exponencial.

Por último, incluimos dos condiciones más a las reglas base del sistema:
1. Incluir un horario de operativa, de modo que no hubiera posiciones abiertas fuera del intervalo horario.
2. Incluir una regla de salida en base a una segunda media más corta. De modo que al cruzar dicha media el sistema cerrase a mercado.




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

Código PDV

Código VBA
'¡¡ Parameters
Dim HoraInicio As Integer '900
Dim HoraFin As Integer '2200
Dim NumeroContratos As Long '1
Dim PeriodoMedia As Integer '30
Dim PrecioMedia As Price 'PriceClose
Dim TipoMedia As Integer '0
Dim PeriodoCorta As Integer '10
'Parameters !!
Dim MediaData As DataIdentifier
Dim MediaCortaData As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    If TipoMedia = 0 Then
        MediaData = .GetIndicatorIdentifier(AvSimple, Data, PeriodoMedia, PrecioMedia)
    Else
        MediaData = .GetIndicatorIdentifier(AvExponential, Data, PeriodoMedia, PrecioMedia)
    End If
    MediaCortaData = .GetIndicatorIdentifier(AvSimple, Data, PeriodoCorta, PrecioMedia)
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
 
    If (.Time() >= HoraInicio And .Time() < HoraFin) Then
        '<reglas de entrada y salida>
        If (.GetMarketPosition() = 1) Then
            If (.Close() < .GetIndicatorValue(MediaCortaData)) Then
                .ExitLong AtClose, NumeroContratos
            End If
        End If
     
        If (.GetMarketPosition() = -1) Then
            If (.Close() > .GetIndicatorValue(MediaCortaData)) Then
                .ExitShort AtClose, NumeroContratos
            End If
        End If
 
        If (.Close() > .GetIndicatorValue(MediaData) And .Close(1) <= .GetIndicatorValue(MediaData, 1)) Then
            If (.Close() > .GetIndicatorValue(MediaCortaData)) Then
                .Buy AtClose, NumeroContratos
            End If
        ElseIf (.Close() < .GetIndicatorValue(MediaData) And .Close(1) >= .GetIndicatorValue(MediaData, 1)) Then
            If (.Close() < .GetIndicatorValue(MediaCortaData)) Then
                .Sell AtClose, NumeroContratos
            End If
        End If
    Else
        If (.GetMarketPosition() = 1) Then
            .ExitLong AtClose, NumeroContratos
        ElseIf (.GetMarketPosition() = -1) Then
            .ExitShort AtClose, NumeroContratos
        End If
    End If
End With
End Sub

Comentarios

Entradas populares de este blog

Trading Tools: Descarga de históricos para Visual Chart 6

KDJ - Indicador Stochastic %J

El indicador Relative Strength Mansfield with Index