II Curso de Programación. Sistema Ejercicios 23 al 26
Los ejercicios del 23 al 26 de nuestro 2º Curso de Programación estuvieron dedicados a la utilización de métodos de consulta de fecha y hora. El conjunto de ellos quedó recogido en un mismo sistema cuyo diseño publicamos a continuación.
Sistema Ejercicio 23: Sistema Una Entrada por Día
Como decíamos, la finalidad de éste grupo de ejercicios era la de ver con diferentes ejemplos cómo podemos acceder a los datos de fecha y hora así como las distintas consultas que podemos llevar a cabo. El punto de partida consistía en un sistema que opera en base a la tendencia determinada por una media móvil simple de periodo 15. La particularidad del sistema reside en que sólo queremos realizar un negocio por sesión. Para añadir este filtro, deberemos acceder al campo de fecha de cada barra y controlar que sólo puede hacer un nuevo negocio si se produce un cambio de día.
Como vemos en el ejemplo, tras cerrar cada negocio, el sistema no ejecuta uno nuevo hasta que no se produce el cambio de día, lo que da lugar a que todos los negocios se abran en la barra de apertura de sesión.
Además de esto, añadimos tres filtros temporales más al sistema:
Modificación 1 (ejercicio 24). Añadir filtro Operar sólo los viernes
Añadimos un parámetro con el cual poder activar/desactivar este filtro (filtro SoloViernes).
Si SoloViernes valía 1, entonces activábamos el filtro y por tanto sólo se podían realizar negocios los viernes.
La finalidad del ejercicio consistía en mostrar cómo podemos extraer el número de mes del campo de fecha.
El desarrollo del sistema sería el siguiente:
Código PDV:
Observen que la principal particularidad de éste sistema es que las funciones que no están implementadas para la Plataforma Visual pueden añadirse entrecomillando la función dentro de un elemento de tipo sentencia.
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).
Sistema Ejercicio 23: Sistema Una Entrada por Día
Como decíamos, la finalidad de éste grupo de ejercicios era la de ver con diferentes ejemplos cómo podemos acceder a los datos de fecha y hora así como las distintas consultas que podemos llevar a cabo. El punto de partida consistía en un sistema que opera en base a la tendencia determinada por una media móvil simple de periodo 15. La particularidad del sistema reside en que sólo queremos realizar un negocio por sesión. Para añadir este filtro, deberemos acceder al campo de fecha de cada barra y controlar que sólo puede hacer un nuevo negocio si se produce un cambio de día.
Como vemos en el ejemplo, tras cerrar cada negocio, el sistema no ejecuta uno nuevo hasta que no se produce el cambio de día, lo que da lugar a que todos los negocios se abran en la barra de apertura de sesión.
Además de esto, añadimos tres filtros temporales más al sistema:
Modificación 1 (ejercicio 24). Añadir filtro Operar sólo los viernes
Añadimos un parámetro con el cual poder activar/desactivar este filtro (filtro SoloViernes).
Si SoloViernes valía 1, entonces activábamos el filtro y por tanto sólo se podían realizar negocios los viernes.
Conseguimos gracias a esto tener un ejemplo de referencia para poder filtrar negocios en base a un día concreto de la semana.
Modificación 2 (ejercicio 25). Añadir filtro Operar sólo la segunda quincena
Modificación 3 (ejercicio 26). Añadir filtro Operar sólo los meses pares.
Modificación 2 (ejercicio 25). Añadir filtro Operar sólo la segunda quincena
Añadimos un parámetro con el cual poder activar/desactivar este filtro (filtro SoloSegundaQuincena).
Si SoloSegundaQuincena valía 1, entonces activábamos el filtro y por tanto sólo se podían realizar negocios a partir del día 15 de cada mes.
Si SoloSegundaQuincena valía 1, entonces activábamos el filtro y por tanto sólo se podían realizar negocios a partir del día 15 de cada mes.
La finalidad del ejercicio consistía en mostrar cómo podemos extraer el número de día del campo de fecha.
Modificación 3 (ejercicio 26). Añadir filtro Operar sólo los meses pares.
Añadimos un parámetro con el cual poder activar/desactivar este filtro (filtro SoloMesPar).
Si SoloMesPar valía 1, entonces activábamos el filtro y por tanto sólo se podían realizar negocios en meses pares (febrero, abril, junio, ...).
Si SoloMesPar valía 1, entonces activábamos el filtro y por tanto sólo se podían realizar negocios en meses pares (febrero, abril, junio, ...).
La finalidad del ejercicio consistía en mostrar cómo podemos extraer el número de mes del campo de fecha.
El desarrollo del sistema sería el siguiente:
Código PDV:
Observen que la principal particularidad de éste sistema es que las funciones que no están implementadas para la Plataforma Visual pueden añadirse entrecomillando la función dentro de un elemento de tipo sentencia.
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 SoloViernes As Integer '1
Dim SoloSegundaQuincena As Integer '1
Dim SoloMesPar As Integer '1
Dim Periodo As Integer '15
Dim StopInicial As Double '75
Dim TrailingStop As Double '65
Dim HoraEntrada As Integer '800
Dim HoraSalida As Integer '2200
'Parameters !!
Dim avdata As DataIdentifier
Dim preciots As Double
Dim activarts As Boolean
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
avdata = .GetIndicatorIdentifier(AvSimple, Data, Periodo, PriceClose)
activarts = False
preciots = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
Dim medact As Double
medact = .GetIndicatorValue(avdata)
Dim pos_abierta As Integer
Dim pentrada As Double
pos_abierta = .GetMarketPosition()
pentrada = .GetEntryPrice()
If (.Time() >= HoraEntrada And .Time() < HoraSalida) Then
If (pos_abierta = 0) ThenDim nuevaentrada As Boolean
If (.NumberOfTrades() = 0) Thennuevaentrada = TrueElseIf (.Date(.GetBarsSinceExits(1)) <> .Date()) Thennuevaentrada = TrueEnd IfEnd If
If (nuevaentrada) Then'solo viernes
If (SoloViernes = 1) ThenIf Weekday(.TimeEx(), vbMonday) <> 5 Thennuevaentrada = FalseEnd IfEnd If
'solo segunda quincena
If (SoloSegundaQuincena = 1) ThenIf DatePart("d", .TimeEx()) < 15 Thennuevaentrada = FalseEnd IfEnd If
'solo mes par
If (SoloMesPar = 1) ThenIf DatePart("m", .TimeEx()) Mod 2 <> 0 Thennuevaentrada = FalseEnd IfEnd If
If (nuevaentrada) ThenIf (.Close() > medact) Then.Buy AtClose, Contratos
pos_abierta = 1
pentrada = .Close()
activarts = FalseElseIf (.Close() < medact) Then.Sell AtClose, Contratos
pos_abierta = -1
pentrada = .Close()
activarts = FalseEnd IfEnd IfEnd IfEnd If
If (pos_abierta = 1) ThenIf (activarts = False) ThenIf (.Close() - pentrada) >= TrailingStop Thenactivarts = True
preciots = .Close()End IfEnd If
If (activarts) ThenIf (.Close() > preciots) Thenpreciots = .Close()End If.ExitLong AtStop, Contratos, preciots - TrailingStopElse.ExitLong AtStop, Contratos, pentrada - StopInicialEnd IfElseIf (pos_abierta = -1) ThenIf (activarts = False) ThenIf (pentrada - .Close()) >= TrailingStop Thenactivarts = True
preciots = .Close()End IfEnd If
If (activarts) ThenIf (.Close() < preciots) Thenpreciots = .Close()End If
.ExitShort AtStop, Contratos, preciots + TrailingStopElse.ExitShort AtStop, Contratos, pentrada + StopInicialEnd IfEnd IfElseIf (pos_abierta = 1) Then.ExitLong AtClose, ContratosElseIf (pos_abierta = -1) Then.ExitShort AtClose, ContratosEnd IfEnd IfEnd With
End Sub
Comentarios
Publicar un comentario
¡Gracias!