II Curso de Programación. Sistema Ejercicio 34
Esta semana publicamos el ejercicio 34 de nuestro 2º Curso de Programación para Visual Chart 5. Los ejercicios del 33 al 35 consistieron en ejemplos diferentes entre sí que abordaban varias cuestiones y que se servían como repaso a lo visto a lo largo del seminario.
Sistema Ejercicio 34: Sistema en base a la volatilidad.
Ejercicio que servía para repasar la aplicación de bucles dentro de estrategias. La excusa para ello era estudiar la volatilidad del precio observando el tamaño de las últimas n velas y operando en base a un aumento del tamaño actual respecto al tamaño promedio. Por otro lado, para determinar el signo de la tendencia, se tomaba como referencia el indicador MACD y su estado en base a la banda central cero.
Las reglas por tanto que va a seguir la estrategia serían las siguientes:
1) Si el MACD tiene tendencia alcista (valor positivo), entonces entrar si cuerpo vela actual es al menos el doble del tamaño medio de las velas anteriores.
2) Si el MACD tiene tendencia bajista (valor negativo), entonces entrar si cuerpo vela actual es al menos el doble del tamaño medio de las velas anteriores.
El sistema no va a tener en cuenta el color de la vela, sólo su tamaño.
Por último, añadimos un stop de pérdidas (40) para los casos de señales fallidas.
El diseño del sistema quedaría así:
Código PDV
Codigo VBA
(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).
Sistema Ejercicio 34: Sistema en base a la volatilidad.
Ejercicio que servía para repasar la aplicación de bucles dentro de estrategias. La excusa para ello era estudiar la volatilidad del precio observando el tamaño de las últimas n velas y operando en base a un aumento del tamaño actual respecto al tamaño promedio. Por otro lado, para determinar el signo de la tendencia, se tomaba como referencia el indicador MACD y su estado en base a la banda central cero.
Las reglas por tanto que va a seguir la estrategia serían las siguientes:
1) Si el MACD tiene tendencia alcista (valor positivo), entonces entrar si cuerpo vela actual es al menos el doble del tamaño medio de las velas anteriores.
2) Si el MACD tiene tendencia bajista (valor negativo), entonces entrar si cuerpo vela actual es al menos el doble del tamaño medio de las velas anteriores.
El sistema no va a tener en cuenta el color de la vela, sólo su tamaño.
Por último, añadimos un stop de pérdidas (40) para los casos de señales fallidas.
El diseño del sistema quedaría así:
Código PDV
Codigo VBA
(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 HoraIni As Integer '900
Dim HoraFin As Integer '1900
Dim Periodo1MACD As Integer '12
Dim Periodo2MACD As Integer '26
Dim PeriodoMSIGMACD As Integer '9
Dim NVelas As Integer '10
Dim StopPerdidas As Double '75
'Parameters !!
Dim macddata As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
End Sub
Dim Contratos As Long '1
Dim HoraIni As Integer '900
Dim HoraFin As Integer '1900
Dim Periodo1MACD As Integer '12
Dim Periodo2MACD As Integer '26
Dim PeriodoMSIGMACD As Integer '9
Dim NVelas As Integer '10
Dim StopPerdidas As Double '75
'Parameters !!
Dim macddata As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
macddata = .GetIndicatorIdentifier(MACD, Data, Periodo1MACD, Periodo2MACD, PeriodoMSIGMACD, PriceClose, 0)
End WithEnd Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
Dim macdact As Double
Dim mesigact As Double
macdact = .GetIndicatorValue(macddata)
mesigact = .GetIndicatorValue(macddata, 0, 2)
Dim pos_abierta As Integer
Dim pentrada As Double
pos_abierta = .GetMarketPosition()
pentrada = .GetEntryPrice()
If (.Time() >= HoraIni And .Time() < HoraFin) Then
Dim mesigact As Double
macdact = .GetIndicatorValue(macddata)
mesigact = .GetIndicatorValue(macddata, 0, 2)
Dim pos_abierta As Integer
Dim pentrada As Double
pos_abierta = .GetMarketPosition()
pentrada = .GetEntryPrice()
If (.Time() >= HoraIni And .Time() < HoraFin) Then
Dim cumplevolatilidad As Boolean
Dim sumatama As Double
Dim i As Integer
For i = 1 To NVelas
Dim sumatama As Double
Dim i As Integer
For i = 1 To NVelas
sumatama = sumatama + Math.Abs(.Close(i) - .Open(i))
Next i
Dim tamamedio As Double
tamamedio = sumatama / NVelas
If (Math.Abs(.Close() - .Open()) >= tamamedio * 2) Then
Dim tamamedio As Double
tamamedio = sumatama / NVelas
If (Math.Abs(.Close() - .Open()) >= tamamedio * 2) Then
cumplevolatilidad = True
End If
If (cumplevolatilidad) Then
If (cumplevolatilidad) Then
If (pos_abierta <> 1 And macdact > mesigact) Then
.Buy AtClose, Contratos
pos_abierta = 1
pentrada = .Close()
pos_abierta = 1
pentrada = .Close()
ElseIf (pos_abierta <> -1 And macdact < mesigact) Then
.Sell AtClose, Contratos
pos_abierta = -1
pentrada = .Close()
pos_abierta = -1
pentrada = .Close()
End If
End If
If (pos_abierta = 1) Then
If (pos_abierta = 1) Then
.ExitLong AtStop, Contratos, pentrada - StopPerdidas
ElseIf (pos_abierta = -1) Then
.ExitShort AtStop, Contratos, pentrada + StopPerdidas
End If
Else
If (pos_abierta = 1) Then
.ExitLong AtClose, Contratos
ElseIf (pos_abierta = -1) Then
.ExitShort AtClose, Contratos
End If
End If
End WithEnd Sub
Comentarios
Publicar un comentario