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).

'¡¡ 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
macddata = .GetIndicatorIdentifier(MACD, Data, Periodo1MACD, Periodo2MACD, PeriodoMSIGMACD, PriceClose, 0)
End With
End 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 cumplevolatilidad As Boolean
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
cumplevolatilidad = True
End If

If (cumplevolatilidad) Then
If (pos_abierta <> 1 And macdact > mesigact) Then
.Buy AtClose, Contratos
pos_abierta = 1
pentrada = .Close()
ElseIf (pos_abierta <> -1 And macdact < mesigact) Then
.Sell AtClose, Contratos
pos_abierta = -1
pentrada = .Close()
End If
End If

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 With
End Sub

Comentarios

Entradas populares de este blog

Como consultar el GAP % de un conjunto de valores

MANEJO DE PLANTILLAS. Eliminar plantilla de un gráfico activa

Estudio de las divergencias en el RSI