Un sistema con el que perdereis poca pasta.
Publicado: 03 Nov 2006 21:58
Pero no ganarais mucha.
De las 16:00 a las 16:30 comprobar el maximo de esta franja de tiempo en el futuro del EuroStoxx 50, si este maximo es mayor que el maximo antes de las 16:00, comprar en el cierre de las 16:30 , mantener la posicion hasta las 17:35 y vender a cierre.
Sin Stop Loss.
Simulando desde el 2002 hasta ahora un 63% de eficacia.
1 hora de trading cada 5 dias aproximadamente.
No es el Santo Grial pero si teneis mas sistemas que os de pasta este os puede complementar, con el Ibex tambien va bien, y con el Dax no va tan bien.
Os paso el codigo para el Visual Chart,hay que tener el directorio c:\bolsa\sistemas
Hay que ejecutarlo en barras de 5 minutos.
'¡¡ Parameters
'Parameters !!
Option Explicit
Const Data As Long = 0
Const Fichero_Log As String = "dif_cierres.txt"
Const Hora_Inicio_Dia As Long = 905
Const Dia_Inicio As Long = 20020101
Const Dia_Fin As Long = 20061130
Const Perdida_Max As Integer = 60
Const Puntos_Limite As Integer = 10
Const Inicio_Periodo1 As Long = 1600
Const Inicio_Periodo2 As Long = 1630
Const Cierre_Dia As Long = 1735
Dim Cierre_Periodo1 As Long
Dim Cierre_Periodo2 As Long
Dim Maximo_Periodo1 As Boolean
Dim Maximo_Periodo2 As Boolean
Dim Maximo_Del_Periodo1 As Long
Dim Maximo_Del_Periodo2 As Long
Dim Cierres_Mayor_Periodo2 As Long
Dim Numero_Maximos_Periodo1 As Long
Dim Numero_Maximos_Periodo2 As Long
Dim Puntos_Totales As Long
Dim Periodo1_Dado As Boolean
Dim Periodo2_Dado As Boolean
Dim Ganancia As Long
Dim Cierre_Uno As Long
Dim Cierre_Dos As Long
Dim Puntos_Totales1 As Long
Dim Dado_Cierre1 As Boolean
Dim Numero_Dias As Long
Dim Minimo_Periodo1 As Boolean
Dim Fecha As Date
Dim Abierto As Boolean
Dim FSO, Linea
Dim Rango_Diario As Long
Dim Abierto_Dia As Long
Dim Max_Dia As Long
Dim Min_Dia As Long
Dim Numero_Max_Dia As Integer
Dim Numero_Min_Dia As Integer
Dim Numero_Dias_Computados As Integer
Dim Numero_Max_Total As Long
Dim Numero_Min_Total As Long
Dim Diferencia_Media As Long
Dim Suma_Diferencias As Double
Dim Numero_Elementos_Rango As Integer
Dim Dia_Semana As Integer
Dim Numero_Barras As Integer
Dim Stop_Loss As Long
Dim Precio_Compra As Long
Dim Precio_Apertura As Long
Dim Numero_Pasadas As Double
Dim Numero_Pasadas_Totales As Double
Dim Arriba As Boolean
Dim Suma_Desviaciones As Double
Dim Limite_Inferior, Limite_Superior As Long
Dim Numero_Elementos_Entre_Limites As Integer
Dim Numero_Elementos_Bajistas As Integer
Dim R1 As Long
Dim S1 As Long
Dim Distancia As Long
Dim Comprado As Boolean
Dim Operacion As Boolean
Dim Indicador_Momentum As Long
Dim Momentum As Long
Dim Dia_Ant As Long
Dim Max_Local As Long
Dim Min_Local As Long
Dim Pasadas_0
Dim Array_Pasadas_0(400) As Long
Dim Array_Pasadas_1(400) As Long
Dim Indice_0
Dim Dif_Pasada_0
Dim Hora_Max As Long
Dim Hora_Min As Long
Dim Escrito As Boolean
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
Set FSO = CreateObject("Scripting.FilesystemObject")
Set Linea = FSO.CreateTextFile("c:\bolsa\sistemas\" & Fichero_Log)
Max_Dia = 0
Min_Dia = 1000000
Numero_Max_Dia = 0
Numero_Min_Dia = 0
Numero_Dias_Computados = 0
Numero_Max_Total = 0
Numero_Min_Total = 0
Suma_Diferencias = 0
Numero_Elementos_Rango = 0
Abierto = False
Numero_Barras = 0
Numero_Pasadas = 0
Numero_Pasadas_Totales = 0
Suma_Desviaciones = 0
Numero_Elementos_Entre_Limites = 0
Limite_Inferior = -200
Limite_Superior = 22
Numero_Elementos_Bajistas = 0
Max_Dia = 0
Min_Dia = 999999
Distancia = 20
escribir ("empieza la simulacion")
Indice_0 = 0
Numero_Maximos_Periodo1 = 0
Numero_Maximos_Periodo2 = 0
Cierres_Mayor_Periodo2 = 0
Puntos_Totales = 0
Puntos_Totales1 = 0
Periodo1_Dado = False
Periodo2_Dado = False
Dado_Cierre1 = False
Puntos_Totales1 = 0
Numero_Dias = 0
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
If .Date > Dia_Inicio And .Date < Dia_Fin Then
If (.Date <> Dia_Ant) Then
Max_Dia = .Open
Min_Dia = .Open
Hora_Max = .Time
Hora_Min = .Time
Escrito = False
'escribir ("nuevo dia " & .Date & " " & .Time)
End If
If (.High > Max_Dia) Then
Max_Dia = .High
Hora_Max = .Time
End If
If (.Low < Min_Dia) Then
Min_Dia = .Low
Hora_Min = .Time
End If
If (.Time >= Inicio_Periodo1 And .Time <= Inicio_Periodo2 And .High >= Max_Dia And Not Maximo_Periodo1) Then
Maximo_Periodo1 = True
Numero_Maximos_Periodo1 = Numero_Maximos_Periodo1 + 1
'escribir ("Dia = " & .Date & " maximo = " & .High)
End If
If (.Time >= Inicio_Periodo1 And .Time <= Inicio_Periodo2 And .Low <= Min_Dia And Not Minimo_Periodo1) Then
Minimo_Periodo1 = True
Numero_Maximos_Periodo1 = Numero_Maximos_Periodo1 + 1
'escribir ("Dia = " & .Date & " maximo = " & .High)
End If
If (Maximo_Periodo1 And .Time = Inicio_Periodo2) Then
Cierre_Periodo1 = .Close
.Buy AtClose
End If
If (Maximo_Periodo1 And .Time = Cierre_Dia) Then
Cierre_Periodo2 = .Close
.ExitLong AtClose
End If
'If (Minimo_Periodo1 And .Time = Inicio_Periodo2 And Not Maximo_Periodo1) Then
' Cierre_Periodo1 = .Close
' .Sell AtClose
'End If
'If (Minimo_Periodo1 And .Time = Cierre_Dia And Not Maximo_Periodo1) Then
' Cierre_Periodo2 = .Close
' .ExitShort AtClose
'End If
If (.Time = Inicio_Periodo1) Then
Periodo1_Dado = True
End If
If (.Time = Inicio_Periodo2) Then
Periodo2_Dado = True
End If
If (.Time = Inicio_Periodo2) Then
Dado_Cierre1 = True
Cierre_Uno = .Close
End If
If (.Time = Cierre_Dia) Then
Cierre_Dos = .Close
End If
If (.Time >= Cierre_Dia And Not (Escrito)) Then
Escrito = True
If (Cierre_Periodo2 > Cierre_Periodo1 And Maximo_Periodo1 And Periodo1_Dado And Periodo2_Dado) Then
Cierres_Mayor_Periodo2 = Cierres_Mayor_Periodo2 + 1
End If
If (Maximo_Periodo1 And Periodo1_Dado And Periodo2_Dado) Then
Ganancia = Cierre_Periodo2 - Cierre_Periodo1
Puntos_Totales = Puntos_Totales + Ganancia
escribir (.Date & " Cierre " & Inicio_Periodo2 & " = " & Cierre_Periodo1 & " Cierre " & Cierre_Dia & " = " & Cierre_Periodo2 & " P/G Dia : " & Ganancia & " Total : " & Puntos_Totales)
escribir ("")
End If
Maximo_Periodo1 = False
Minimo_Periodo1 = False
Periodo1_Dado = False
Periodo2_Dado = False
If Dado_Cierre1 Then
Puntos_Totales1 = Puntos_Totales1 + (Cierre_Dos - Cierre_Uno)
Numero_Dias = Numero_Dias + 1
End If
Dado_Cierre1 = False
End If
Dia_Ant = .Date
End If
End With
End Sub
Public Sub System_OnSetParameters(ParamArray ParamList() As Variant)
'¡¡ Parameters initialization
'Parameters initialization !!
End Sub
Public Sub System_OnCalculateRange(ByVal StartBar As Long, ByVal FinalBar As Long)
Dim i As Long
i = APP.StartBar
If StartBar > i Then
i = StartBar
End If
While Not APP.ShouldTerminate And i <= FinalBar
APP.CurrentBar = i
System_OnCalculateBar i
i = i + 1
Wend
escribir ("numero maximos en el periodo1 = " & Numero_Maximos_Periodo1)
escribir ("numero de cierres mayores periodo2 = " & Cierres_Mayor_Periodo2)
escribir ("puntos totales = " & Puntos_Totales)
escribir ("puntos totales = " & Puntos_Totales1)
escribir ("numero dias = " & Numero_Dias)
cerrar
End Sub
Private Sub SysUserAppInstance_OnConnection(ByVal Application As SysUserApp, ByVal MTDllInst As Object, Custom() As Variant)
Set APP = Application
End Sub
Public Sub escribir(S1 As String)
Linea.WriteLine (S1)
'Linea.Close
End Sub
Public Sub cerrar()
Linea.Close
End Sub
De las 16:00 a las 16:30 comprobar el maximo de esta franja de tiempo en el futuro del EuroStoxx 50, si este maximo es mayor que el maximo antes de las 16:00, comprar en el cierre de las 16:30 , mantener la posicion hasta las 17:35 y vender a cierre.
Sin Stop Loss.
Simulando desde el 2002 hasta ahora un 63% de eficacia.
1 hora de trading cada 5 dias aproximadamente.
No es el Santo Grial pero si teneis mas sistemas que os de pasta este os puede complementar, con el Ibex tambien va bien, y con el Dax no va tan bien.
Os paso el codigo para el Visual Chart,hay que tener el directorio c:\bolsa\sistemas
Hay que ejecutarlo en barras de 5 minutos.
'¡¡ Parameters
'Parameters !!
Option Explicit
Const Data As Long = 0
Const Fichero_Log As String = "dif_cierres.txt"
Const Hora_Inicio_Dia As Long = 905
Const Dia_Inicio As Long = 20020101
Const Dia_Fin As Long = 20061130
Const Perdida_Max As Integer = 60
Const Puntos_Limite As Integer = 10
Const Inicio_Periodo1 As Long = 1600
Const Inicio_Periodo2 As Long = 1630
Const Cierre_Dia As Long = 1735
Dim Cierre_Periodo1 As Long
Dim Cierre_Periodo2 As Long
Dim Maximo_Periodo1 As Boolean
Dim Maximo_Periodo2 As Boolean
Dim Maximo_Del_Periodo1 As Long
Dim Maximo_Del_Periodo2 As Long
Dim Cierres_Mayor_Periodo2 As Long
Dim Numero_Maximos_Periodo1 As Long
Dim Numero_Maximos_Periodo2 As Long
Dim Puntos_Totales As Long
Dim Periodo1_Dado As Boolean
Dim Periodo2_Dado As Boolean
Dim Ganancia As Long
Dim Cierre_Uno As Long
Dim Cierre_Dos As Long
Dim Puntos_Totales1 As Long
Dim Dado_Cierre1 As Boolean
Dim Numero_Dias As Long
Dim Minimo_Periodo1 As Boolean
Dim Fecha As Date
Dim Abierto As Boolean
Dim FSO, Linea
Dim Rango_Diario As Long
Dim Abierto_Dia As Long
Dim Max_Dia As Long
Dim Min_Dia As Long
Dim Numero_Max_Dia As Integer
Dim Numero_Min_Dia As Integer
Dim Numero_Dias_Computados As Integer
Dim Numero_Max_Total As Long
Dim Numero_Min_Total As Long
Dim Diferencia_Media As Long
Dim Suma_Diferencias As Double
Dim Numero_Elementos_Rango As Integer
Dim Dia_Semana As Integer
Dim Numero_Barras As Integer
Dim Stop_Loss As Long
Dim Precio_Compra As Long
Dim Precio_Apertura As Long
Dim Numero_Pasadas As Double
Dim Numero_Pasadas_Totales As Double
Dim Arriba As Boolean
Dim Suma_Desviaciones As Double
Dim Limite_Inferior, Limite_Superior As Long
Dim Numero_Elementos_Entre_Limites As Integer
Dim Numero_Elementos_Bajistas As Integer
Dim R1 As Long
Dim S1 As Long
Dim Distancia As Long
Dim Comprado As Boolean
Dim Operacion As Boolean
Dim Indicador_Momentum As Long
Dim Momentum As Long
Dim Dia_Ant As Long
Dim Max_Local As Long
Dim Min_Local As Long
Dim Pasadas_0
Dim Array_Pasadas_0(400) As Long
Dim Array_Pasadas_1(400) As Long
Dim Indice_0
Dim Dif_Pasada_0
Dim Hora_Max As Long
Dim Hora_Min As Long
Dim Escrito As Boolean
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
Set FSO = CreateObject("Scripting.FilesystemObject")
Set Linea = FSO.CreateTextFile("c:\bolsa\sistemas\" & Fichero_Log)
Max_Dia = 0
Min_Dia = 1000000
Numero_Max_Dia = 0
Numero_Min_Dia = 0
Numero_Dias_Computados = 0
Numero_Max_Total = 0
Numero_Min_Total = 0
Suma_Diferencias = 0
Numero_Elementos_Rango = 0
Abierto = False
Numero_Barras = 0
Numero_Pasadas = 0
Numero_Pasadas_Totales = 0
Suma_Desviaciones = 0
Numero_Elementos_Entre_Limites = 0
Limite_Inferior = -200
Limite_Superior = 22
Numero_Elementos_Bajistas = 0
Max_Dia = 0
Min_Dia = 999999
Distancia = 20
escribir ("empieza la simulacion")
Indice_0 = 0
Numero_Maximos_Periodo1 = 0
Numero_Maximos_Periodo2 = 0
Cierres_Mayor_Periodo2 = 0
Puntos_Totales = 0
Puntos_Totales1 = 0
Periodo1_Dado = False
Periodo2_Dado = False
Dado_Cierre1 = False
Puntos_Totales1 = 0
Numero_Dias = 0
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
If .Date > Dia_Inicio And .Date < Dia_Fin Then
If (.Date <> Dia_Ant) Then
Max_Dia = .Open
Min_Dia = .Open
Hora_Max = .Time
Hora_Min = .Time
Escrito = False
'escribir ("nuevo dia " & .Date & " " & .Time)
End If
If (.High > Max_Dia) Then
Max_Dia = .High
Hora_Max = .Time
End If
If (.Low < Min_Dia) Then
Min_Dia = .Low
Hora_Min = .Time
End If
If (.Time >= Inicio_Periodo1 And .Time <= Inicio_Periodo2 And .High >= Max_Dia And Not Maximo_Periodo1) Then
Maximo_Periodo1 = True
Numero_Maximos_Periodo1 = Numero_Maximos_Periodo1 + 1
'escribir ("Dia = " & .Date & " maximo = " & .High)
End If
If (.Time >= Inicio_Periodo1 And .Time <= Inicio_Periodo2 And .Low <= Min_Dia And Not Minimo_Periodo1) Then
Minimo_Periodo1 = True
Numero_Maximos_Periodo1 = Numero_Maximos_Periodo1 + 1
'escribir ("Dia = " & .Date & " maximo = " & .High)
End If
If (Maximo_Periodo1 And .Time = Inicio_Periodo2) Then
Cierre_Periodo1 = .Close
.Buy AtClose
End If
If (Maximo_Periodo1 And .Time = Cierre_Dia) Then
Cierre_Periodo2 = .Close
.ExitLong AtClose
End If
'If (Minimo_Periodo1 And .Time = Inicio_Periodo2 And Not Maximo_Periodo1) Then
' Cierre_Periodo1 = .Close
' .Sell AtClose
'End If
'If (Minimo_Periodo1 And .Time = Cierre_Dia And Not Maximo_Periodo1) Then
' Cierre_Periodo2 = .Close
' .ExitShort AtClose
'End If
If (.Time = Inicio_Periodo1) Then
Periodo1_Dado = True
End If
If (.Time = Inicio_Periodo2) Then
Periodo2_Dado = True
End If
If (.Time = Inicio_Periodo2) Then
Dado_Cierre1 = True
Cierre_Uno = .Close
End If
If (.Time = Cierre_Dia) Then
Cierre_Dos = .Close
End If
If (.Time >= Cierre_Dia And Not (Escrito)) Then
Escrito = True
If (Cierre_Periodo2 > Cierre_Periodo1 And Maximo_Periodo1 And Periodo1_Dado And Periodo2_Dado) Then
Cierres_Mayor_Periodo2 = Cierres_Mayor_Periodo2 + 1
End If
If (Maximo_Periodo1 And Periodo1_Dado And Periodo2_Dado) Then
Ganancia = Cierre_Periodo2 - Cierre_Periodo1
Puntos_Totales = Puntos_Totales + Ganancia
escribir (.Date & " Cierre " & Inicio_Periodo2 & " = " & Cierre_Periodo1 & " Cierre " & Cierre_Dia & " = " & Cierre_Periodo2 & " P/G Dia : " & Ganancia & " Total : " & Puntos_Totales)
escribir ("")
End If
Maximo_Periodo1 = False
Minimo_Periodo1 = False
Periodo1_Dado = False
Periodo2_Dado = False
If Dado_Cierre1 Then
Puntos_Totales1 = Puntos_Totales1 + (Cierre_Dos - Cierre_Uno)
Numero_Dias = Numero_Dias + 1
End If
Dado_Cierre1 = False
End If
Dia_Ant = .Date
End If
End With
End Sub
Public Sub System_OnSetParameters(ParamArray ParamList() As Variant)
'¡¡ Parameters initialization
'Parameters initialization !!
End Sub
Public Sub System_OnCalculateRange(ByVal StartBar As Long, ByVal FinalBar As Long)
Dim i As Long
i = APP.StartBar
If StartBar > i Then
i = StartBar
End If
While Not APP.ShouldTerminate And i <= FinalBar
APP.CurrentBar = i
System_OnCalculateBar i
i = i + 1
Wend
escribir ("numero maximos en el periodo1 = " & Numero_Maximos_Periodo1)
escribir ("numero de cierres mayores periodo2 = " & Cierres_Mayor_Periodo2)
escribir ("puntos totales = " & Puntos_Totales)
escribir ("puntos totales = " & Puntos_Totales1)
escribir ("numero dias = " & Numero_Dias)
cerrar
End Sub
Private Sub SysUserAppInstance_OnConnection(ByVal Application As SysUserApp, ByVal MTDllInst As Object, Custom() As Variant)
Set APP = Application
End Sub
Public Sub escribir(S1 As String)
Linea.WriteLine (S1)
'Linea.Close
End Sub
Public Sub cerrar()
Linea.Close
End Sub