II Curso de Programación. Sistema Ejercicio 15.

Siguiendo con el artículo de la semana pasada, procedemos a través de éste artículo a publicar la resolución del sistema propuesto durante el ejercicio 15 de nuestro 2º Curso de Programación para Visual Chart 5.

Sistema Ejercicio 15: Sistema con Estocástico y Media Exponencial
La finalidad de éste ejercicio era la de poder repasar el uso combinado de varias herramientas. En concreto, del oscilador estocástico y de la media móvil exponencial.

El sistema tomaba como referencia para entrar los cruces de las líneas del estocástico (línea Sk y línea Sd). Posteriormente, utilizaba a la media como filtro de señal.


Reglas de entrada.
Opera a Largo si:
1. Cruce alcista. Línea Sk del estocástico (línea 1) mayor que Línea Sd del estocástico (línea 2).
2. Tendencia alcista. Cierres por encima de la Media exponencial.

Opera a Corto si:
1. Cruce bajista. Línea Sk del estocástico (línea 1) menor que Línea Sd del estocástico (línea 2).
2. Tendencia bajista. Cierres por debajo de la Media exponencial.

Reglas de salida
El sistema deshace posición si se produce un cruce del estocástico y la media exponencial no confirma la señal.

El desarrollo del sistema sería el siguiente:



Código PDV


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

'¡¡ Parameters
Dim Contratos As Long '1
Dim PeriodoMedia As Integer '30
Dim PeriodoSTOC As Integer '14
Dim PeriodoSk As Integer '3
Dim PeriodoSd As Integer '3
Dim MediaSTOC As Integer '1
'Parameters !!
Dim avdata As DataIdentifier
Dim stocdata As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP

avdata = .GetIndicatorIdentifier(AvExponential, Data, PeriodoMedia, PriceClose)
stocdata = .GetIndicatorIdentifier(Stochastic, Data, PeriodoSTOC, PeriodoSk, PeriodoSd, MediaSTOC, 80, 20)
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
Dim medact As Double
Dim skact As Double
Dim sdact As Double
Dim pos_abierta As Integer

medact = .GetIndicatorValue(avdata)
skact = .GetIndicatorValue(stocdata)
sdact = .GetIndicatorValue(stocdata, 0, 2)
pos_abierta = .GetMarketPosition()

'tendencia positiva
If (.Close() > medact) Then
If (pos_abierta <> 1 And skact > sdact) Then
.Buy AtClose, Contratos
ElseIf (pos_abierta = 1 And skact < sdact) Then
.ExitLong AtClose, Contratos
End If
'tendencia negativa
ElseIf (.Close() < medact) Then
If (pos_abierta <> -1 And skact < sdact) Then
.Sell AtClose, Contratos
ElseIf (pos_abierta = -1 And skact > sdact) 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

Bollinger Volatility Oscillator N

Estudio de las divergencias en el RSI