II Curso de Programación. Sistema Ejercicio 14.
Continuamos con la publicación de los sistemas de ejemplo que estamos elaborando a través de nuestro 2º Curso de Programación para Visual Chart 5.
En este caso, publicamos la resolución del sistema propuesto durante el ejercicio 14.
Sistema Ejercicio 14: StopLoss en Soporte y Resistencia con pérdida máxima porcentual
Durante este ejercicio, se propuso la creación de un sistema con el cual poder repasar el diseño de los stops porcentuales. Además, se planteaba un diseño de stop dinámico basado en niveles de soporte y resistencia.
Reglas de entrada.
El sistema entra cuando se produce un cruce entre dos medias de diferente periodo.
Reglas de salida.
El sistema cierra posición en base a los nuevos soportes y resistencias que se vayan generando. Además, incluye un margen porcentual de pérdida máxima, de modo que el stop de pérdida nunca puede superar dicho margen.
Para obtener los niveles de soporte y resistencia el sistema utiliza las funciones GetHighest() y GetLowest().
Para obtener la pérdida máxima, se añade el parámetro StopPerdida, que representa un tanto por ciento del precio de entrada.
El desarrollo del sistema sería el siguiente:
Código PDV
Código VBA
En este caso, publicamos la resolución del sistema propuesto durante el ejercicio 14.
Sistema Ejercicio 14: StopLoss en Soporte y Resistencia con pérdida máxima porcentual
Durante este ejercicio, se propuso la creación de un sistema con el cual poder repasar el diseño de los stops porcentuales. Además, se planteaba un diseño de stop dinámico basado en niveles de soporte y resistencia.
Reglas de entrada.
El sistema entra cuando se produce un cruce entre dos medias de diferente periodo.
Reglas de salida.
El sistema cierra posición en base a los nuevos soportes y resistencias que se vayan generando. Además, incluye un margen porcentual de pérdida máxima, de modo que el stop de pérdida nunca puede superar dicho margen.
Para obtener los niveles de soporte y resistencia el sistema utiliza las funciones GetHighest() y GetLowest().
Para obtener la pérdida máxima, se añade el parámetro StopPerdida, que representa un tanto por ciento del precio de entrada.
El desarrollo del sistema sería el siguiente:
Código PDV
Código VBA
'¡¡ Parameters
Dim Contratos As Long '1
Dim PeriodoCorta As Integer '5
Dim PeriodoLarga As Integer '30
Dim StopPerdida As Double '0.1
Dim DistanciaMaxMin As Integer '10
'Parameters !!
Dim avshortdata As DataIdentifier
Dim avlongdata As DataIdentifier
Dim preciostop As Double
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
preciostop = 0
avshortdata = .GetIndicatorIdentifier(AvExponential, Data, PeriodoCorta, PriceClose)
avlongdata = .GetIndicatorIdentifier(AvExponential, Data, PeriodoLarga, PriceClose)
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
Dim medcortaact As Double
Dim medcortaant As Double
Dim medlargaact As Double
Dim medlargaant As Double
Dim pos_abierta As Integer
Dim pentrada As Double
Dim ulsop As Double
Dim ulres As Double
Dim stopmax As Double
medcortaact = .GetIndicatorValue(avshortdata)
medcortaant = .GetIndicatorValue(avshortdata, 1, 1)
medlargaact = .GetIndicatorValue(avlongdata)
medlargaant = .GetIndicatorValue(avlongdata, 1, 1)
pos_abierta = .GetMarketPosition()
pentrada = .GetEntryPrice()
ulres = .GetHighest(Data, PriceHigh, DistanciaMaxMin)
ulsop = .GetLowest(Data, PriceLow, DistanciaMaxMin)
'entradas
If (pos_abierta <> 1 And medcortaact > medlargaact And medcortaant <= medlargaant) Then
.Buy AtClose, Contratos
pos_abierta = 1
pentrada = .Close()
preciostop = 0
ElseIf (pos_abierta <> -1 And medcortaact < medlargaact And medcortaant >= medlargaant) Then.Sell AtClose, Contratos
pos_abierta = -1
pentrada = .Close()
preciostop = 0End If
'salidas
If (pos_abierta = 1) Thenstopmax = pentrada * (1 - StopPerdida / 100)
If (preciostop = 0 Or ulsop > preciostop) Then'control pérdida máxima
If (ulsop < stopmax) Thenpreciostop = stopmaxElsepreciostop = ulsopEnd IfEnd If
.ExitLong AtStop, Contratos, preciostopElseIf (pos_abierta = -1) Thenstopmax = pentrada * (1 + StopPerdida / 100)
If (preciostop = 0 Or ulres < preciostop) Then'control pérdida máxima
If (ulres > stopmax) Thenpreciostop = stopmaxElsepreciostop = ulresEnd IfEnd If
.ExitShort AtStop, Contratos, preciostopEnd IfEnd With
End Sub
Comentarios
Publicar un comentario