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:
(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).
'¡¡ 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


No hay comentarios:
Publicar un comentario