Un sistema con el que perdereis poca pasta.

El foro de los productos derivados
Responder
Avatar de Usuario
Mikelon
Mensajes: 1152
Registrado: 27 Sep 2005 16:17

Un sistema con el que perdereis poca pasta.

Mensaje por Mikelon »

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
Avatar de Usuario
Galax
Mensajes: 200
Registrado: 29 Ene 2006 22:21
Ubicación: Barcelona

Mensaje por Galax »

hola!! hay que copiar/pegar?? he creado el directorio pero me sale error no especificado. De todos modos mañana cuando tenga un ratito lo programaré en modo diseño visual y lo cuelgo. Gracias Mikelon!
Avatar de Usuario
Mikelon
Mensajes: 1152
Registrado: 27 Sep 2005 16:17

Mensaje por Mikelon »

primero creas un sistema con la plataforma de codigo,
luego lo que haces es copiar el tocho que he puesto
y lo pegas en el codigo abierto por el sistema que hayas creado,
borrando todo el codigo del sistema que hallas abierto,
le llamas como quieras, luego lo simulas.
alexx
Mensajes: 43
Registrado: 28 Feb 2005 18:15
Contactar:

no logro compilarlo

Mensaje por alexx »

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 !!
Avatar de Usuario
Mikelon
Mensajes: 1152
Registrado: 27 Sep 2005 16:17

Mensaje por Mikelon »

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.

livetrader
Mensajes: 69
Registrado: 30 Jun 2006 12:38

Mensaje por livetrader »

Me da error a mi tambien al insertarlo, y tengo experiencia en hacerlo, pero nada. Me dice que no encuentra la ruta de acceso. Podriais ver a ver que pasa?
Avatar de Usuario
Mikelon
Mensajes: 1152
Registrado: 27 Sep 2005 16:17

Mensaje por Mikelon »

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.
jordib
Mensajes: 17
Registrado: 21 Feb 2006 14:52

Mensaje por jordib »

HOLA, cuando dices mirar el maximo de antes de las 16h.
te refieres ir para atras hasta la apertura
un saludo gracias
Avatar de Usuario
Mikelon
Mensajes: 1152
Registrado: 27 Sep 2005 16:17

Mensaje por Mikelon »

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
litosnano
Mensajes: 166
Registrado: 12 Jun 2006 00:06
Ubicación: BARCELONA

Mensaje por litosnano »

Buenas tardes,

algo he heco mal, como siempre. :cry:
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
compucessory
Mensajes: 7
Registrado: 03 Ago 2006 20:11

Mensaje por compucessory »

Gracias por el trabajo Mikelon.
Soy demasiado novato para comentar nada, asi que sólo decir que yo si lo he podido compilar sin problemas.
De nuevo gracias por el trabajo y por exponerlo.
duke
Mensajes: 1
Registrado: 09 Dic 2006 09:19

sistema

Mensaje por duke »

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.
Avatar de Usuario
Mikelon
Mensajes: 1152
Registrado: 27 Sep 2005 16:17

Mensaje por Mikelon »

hola duke, espero que te funcione.

lo he renombrado a ultimahora.txt pero es ultimahora.dll

un saludo.
Adjuntos
ultimahora.txt
(39.9 KiB) Descargado 194 veces
Avatar de Usuario
Faust
Mensajes: 275
Registrado: 04 Jul 2005 17:31

Mensaje por Faust »

Hola, a mi tampoco me funciona, no puede alguien subir el archivo ya listo para compilar?
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Futuros y Opciones”