II Curso de Programación. Sistema Ejercicio 16.

Cerramos el bloque de tres ejercicios de nuestro 2º Curso de Programación para Visual Chart 5 que hemos venido publicando en las últimas semanas con la solución del ejercicio 16. En este ejercicio veíamos un sistema basado en las bandas de Bollinger. Pasemos a verlo.

Sistema Ejercicio 16: Sistema de retrocesos usando Bandas de Bollinger

La finalidad de éste ejercicio era la de repasar el diseño de sistemas con órdenes limitadas. Para ello, el sistema toma las bandas de Bollinger como referencia, buscando entrar en el momento en que el precio toque alguna de las dos bandas.

La filosofía de ésta estrategia consiste en considerar la ruptura de las bandas como un punto de agotamiento del impulso previo, de modo que cuando esto suceda, va a esperar un retroceso del precio.

Como vemos en la imagen, si la señal es fallida, la estrategia coloca un stop de pérdidas que cubra la posición.


Las reglas del sistema por tanto serían las siguientes:
1. Enviar orden Compra limitada al precio de la Banda Inferior de Bollinger.
2. Enviar orden de Venta limitada al precio de la Banda Superior de Bollinger.
3. Colocar un stop de pérdidas una vez la posición esté abierta.

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() y OnInitCalculate(). Tengan esto en cuenta a la hora de copiar el sistema).

'¡¡ Parameters
Dim Contratos As Long '1
Dim PeriodoBoll As Integer '25
Dim CoeficienteBoll As Double '2
Dim PrecioBoll As Price 'PriceClose
Dim MediaBoll As Integer '0
Dim StopPerdidas As Double '50
'Parameters !!
Dim bolldata As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP


bolldata = .GetIndicatorIdentifier(BollingerBands, Data, PeriodoBoll, CoeficienteBoll, PrecioBoll, MediaBoll)
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP

Dim bollsup As Double
Dim bollinf As Double
Dim pos_abierta As Integer
Dim pentrada As Double

bollsup = .GetIndicatorValue(bolldata, 0, 2)
bollinf = .GetIndicatorValue(bolldata, 0, 3)
pos_abierta = .GetMarketPosition()
pentrada = .GetEntryPrice()

'entradas
If (pos_abierta <> 1 And .Close() > bollinf) Then

.Buy AtLimit, Contratos, bollinf

ElseIf (pos_abierta <> -1 And .Close() > bollsup) Then

.Sell AtLimit, Contratos, bollsup

End If

'salidas
If (pos_abierta = 1) Then
.ExitLong AtStop, Contratos, pentrada - StopPerdidas
ElseIf (pos_abierta = -1) Then
.ExitShort AtStop, Contratos, pentrada + StopPerdidas
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