Un sistema con el que perdereis poca pasta.
Un sistema con el que perdereis poca pasta.
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
no logro compilarlo
hola mikelon !
no controlo el manejo de la plataforma visual basic en visual chart .
lo poco de programacion que he hecho es la PDV .
explica despacito los pasos para poder compilarlo y ver el funcionamiento
del sistema por fav ... !!
bye !!
no controlo el manejo de la plataforma visual basic en visual chart .
lo poco de programacion que he hecho es la PDV .
explica despacito los pasos para poder compilarlo y ver el funcionamiento
del sistema por fav ... !!
bye !!
Hola, aunque no lo creas he estado escribiendo 35 minutos y he enviado y entonces el servidor se ha cortado.
Asi que, resumiendo:
En Visual Chart,
Vas a Sistemas,
y abres la opcion de Crear Sistema con Visual Basic,
aqui te pedira el nombre que da Visual Chart a los sistemas y el nombre del archivo en Disco, se los pones , los nombres que quieras, pero anotas el del sistema para que no se te olvide.
Una vez realizado este paso el Visual Chart te abrira una pantalla de Visual Basic que tendra un codigo ya hecho, pues borras ese codigo antes que nada, y copias el codigo de visual Basic del primer post:
una vez que lo hayas copiado vas a la opcion del menu Debug y pinchas en Compile, si no da fallos de Compilacion, luego pinchas en Publish,
una vez hecho esto ya podras integrarlo en tus graficos de 5 minutos.
El codigo tiene algunos parametros como la fecha de inicio de simulación y la fecha de fin, estas son las constantes:
Const Dia_Inicio As Long = 20020101
Const Dia_Fin As Long = 20061130
Puedes modificarlas para los periodos de tiempo que prefieras.
Yo he probado con DJ Euro Stoxx y el futuro del Ibex.
Un saludo.
Asi que, resumiendo:
En Visual Chart,
Vas a Sistemas,
y abres la opcion de Crear Sistema con Visual Basic,
aqui te pedira el nombre que da Visual Chart a los sistemas y el nombre del archivo en Disco, se los pones , los nombres que quieras, pero anotas el del sistema para que no se te olvide.
Una vez realizado este paso el Visual Chart te abrira una pantalla de Visual Basic que tendra un codigo ya hecho, pues borras ese codigo antes que nada, y copias el codigo de visual Basic del primer post:
una vez que lo hayas copiado vas a la opcion del menu Debug y pinchas en Compile, si no da fallos de Compilacion, luego pinchas en Publish,
una vez hecho esto ya podras integrarlo en tus graficos de 5 minutos.
El codigo tiene algunos parametros como la fecha de inicio de simulación y la fecha de fin, estas son las constantes:
Const Dia_Inicio As Long = 20020101
Const Dia_Fin As Long = 20061130
Puedes modificarlas para los periodos de tiempo que prefieras.
Yo he probado con DJ Euro Stoxx y el futuro del Ibex.
Un saludo.
-
- Mensajes: 69
- Registrado: 30 Jun 2006 12:38
Hola,
puede ser que no hayas creado el directorio c:\bolsa\sistemas\,
o sea,
con windows tienes que crear una carpeta llamada bolsa dentro de la unidad de disco C y otra sistemas dentro de ella.
A ver si tengo tiempo y reduzco el codigo a lo minimo, por que ese codigo tiene muchas cosas que sirven para otras simulaciones pero
no para esta.
Un saludo.
puede ser que no hayas creado el directorio c:\bolsa\sistemas\,
o sea,
con windows tienes que crear una carpeta llamada bolsa dentro de la unidad de disco C y otra sistemas dentro de ella.
A ver si tengo tiempo y reduzco el codigo a lo minimo, por que ese codigo tiene muchas cosas que sirven para otras simulaciones pero
no para esta.
Un saludo.
Eso es,
miras el maximo desde las 9 hasta las 1600,
luego lo comparas con el maximo desde las 1600 hasta las 1630,
si este segundo maximo supera al anterior, compras a las 1630,
y mantienes hasta las 1735,
en el Ibex es complicado cerrarlo a esa hora por que se suele cerrar el dia en ese punto
y igual no tienes tiempo para ejecutar,
pero decia que tambien funciona bien en el Euro Stoxx 50 y este cierra mas tarde.
Ya he quitado parte del codigo de Visual Basic que puede estorbar:
'¡¡ Parameters
'Parameters !!
Option Explicit
Const Data As Long = 0
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 Dia_Ant As Long
Dim Hora_Max As Long
Dim Hora_Min As Long
Dim Abierto_Dia As Long
Dim Max_Dia As Long
Dim Min_Dia As Long
Dim Escrito As Boolean
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
Max_Dia = 0
Min_Dia = 1000000
Max_Dia = 0
Min_Dia = 999999
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>= 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
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
End Sub
Private Sub SysUserAppInstance_OnConnection(ByVal Application As SysUserApp, ByVal MTDllInst As Object, Custom() As Variant)
Set APP = Application
End Sub
miras el maximo desde las 9 hasta las 1600,
luego lo comparas con el maximo desde las 1600 hasta las 1630,
si este segundo maximo supera al anterior, compras a las 1630,
y mantienes hasta las 1735,
en el Ibex es complicado cerrarlo a esa hora por que se suele cerrar el dia en ese punto
y igual no tienes tiempo para ejecutar,
pero decia que tambien funciona bien en el Euro Stoxx 50 y este cierra mas tarde.
Ya he quitado parte del codigo de Visual Basic que puede estorbar:
'¡¡ Parameters
'Parameters !!
Option Explicit
Const Data As Long = 0
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 Dia_Ant As Long
Dim Hora_Max As Long
Dim Hora_Min As Long
Dim Abierto_Dia As Long
Dim Max_Dia As Long
Dim Min_Dia As Long
Dim Escrito As Boolean
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
Max_Dia = 0
Min_Dia = 1000000
Max_Dia = 0
Min_Dia = 999999
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>= 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
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
End Sub
Private Sub SysUserAppInstance_OnConnection(ByVal Application As SysUserApp, ByVal MTDllInst As Object, Custom() As Variant)
Set APP = Application
End Sub
Buenas tardes,
algo he heco mal, como siempre.
Me sale que compre el 13/10, una ralla en diagonal hacia arriba hasta el día de hoy.
Vaya caquita, soy lo peor.
Voy a volver a intentar.
Feliz trading
algo he heco mal, como siempre.

Me sale que compre el 13/10, una ralla en diagonal hacia arriba hasta el día de hoy.
Vaya caquita, soy lo peor.
Voy a volver a intentar.
Feliz trading
"No es lo que ignoramos lo que nos impide prosperar; nuestro mayor obstáculo es lo que creemos que sabemos y no es así" Josh Billings
-
- Mensajes: 7
- Registrado: 03 Ago 2006 20:11
sistema
Hola mikelon he intentado pegar el codigo que has puesto en segundo lugar y aunque no da errores al compilar no funciona pues no da entradas probando el fibex intradia durante el año 2006. Si pudiras pasarlo compilado te lo agradeceria y de todas maneras gracias por compartirlo.
hola duke, espero que te funcione.
lo he renombrado a ultimahora.txt pero es ultimahora.dll
un saludo.
lo he renombrado a ultimahora.txt pero es ultimahora.dll
un saludo.
- Adjuntos
-
- ultimahora.txt
- (39.9 KiB) Descargado 199 veces
Si te ha gustado este hilo del Foro, ¡compártelo en redes!