MT4 se cuelga, no vuelve a llamar a start() - página 3

 
mt4forum:

No, no uso sleep() ni messagebox(), pero hago mucho trabajo en la función MyInit(), que tarda unos 5 segundos.

Usted puede ver que en el archivo de registro:

2013.11.15 14:35:32 Prueba reducida 1180990: USDJPY M15 DebugStart: InitialHistoryGapClosed
2013.11.15 14:35:32 Prueba reducida 1180990: USDJPY M15 DebugMyInit comenzar: <---------- trabajo comienza
2013.11.15 14:35:32 Prueba reducida 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 1 nach CreateHistory()
2013.11.15 14:35:33 Prueba reducida 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 2 nach CreateHistory()
2013.11.15 14:35:34 Prueba reducida 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 3 nach CreateHistory()
2013.11.15 14:35:35 Prueba reducida 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 4 nach CreateHistory()
2013.11.15 14:35:35 Prueba reducida 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 5 nach CreateHistory()
2013.11.15 14:35:36 Prueba reducida 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 6 nach CreateHistory()
2013.11.15 14:35:37 Prueba reducida 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 7 nach CreateHistory()
2013.11.15 14:35:37 Prueba reducida 1180990: USDJPY M15 DebugMyInit retorno InitialMyInitCalls: 0 IndexCount: 8 <---------- trabajo termina
2013.11.15 14:35:37 Prueba reducida 1180990: USDJPY M15 DebugStart: último retorno en InitialGapFound

Pero, ¿por qué eso hace que MT4 entre en un bucle después de eso?

No lo hace, pero se fastidia el hilo de la interfaz y MT4 se bloquea... ¿no se puede hacer lo que se hace en un EA?
 
Todos habláis de bucles infinitos, pero nadie tiene curiosidad por saber qué hace CreateHistory(). Según la salida del registro sólo aparece en la última ejecución de start().
 
Ovo:
Todos habláis de bucles infinitos, pero nadie tiene curiosidad por saber qué hace CreateHistory(). Según la salida del log sólo aparece en la última ejecución de start().
Yo supuse que era algún tipo de función para guardar el historial... si el OP quiere mostrarlo lo hará... Asumo que no lo hace y aunque lo haga probablemente no nos va a ayudar a ayudarle. La forma más rápida es que publique su código para que alguien pueda mirarlo con un par de ojos frescos. . . .
 
RaptorUK:
Asumí que era algún tipo de función de ahorro de historia... si el OP quiere mostrarlo lo hará... Asumo que no lo hace y aunque lo haga probablemente no va a ayudarnos a ayudarle. La forma más rápida es que publique su código para que alguien pueda mirarlo con un par de ojos frescos. . . .

No hay problema, quería señalar que el bucle infinito podría no ser la única razón por la que el terminal se cuelga. Especialmente si el script modifica algunos archivos.
 

mt4forum 2013.11.16 11:14


Pero, ¿por qué eso haría que MT4 entrara en un bucle después de eso?

A juzgar por su archivo de registro parece que ya estaba en un bucle. ¿Qué pasa después de que llega a 8? ¿Estaba en un bucle si lo estaba cómo sabes que salió de ese bucle? ¿Volvió a init()?

Añadiste Print("Start Started"); y nunca apareció en el archivo de registro así que nunca entró en la función start(). Eso sugiere que nunca salió de la función init(). Pon más sentencias Print() y acota el problema.

 

En primer lugar, gracias por el gran interés, y perdón por mi tardía respuesta.

Abordaré los diferentes comentarios en las siguientes entradas.

 
RaptorUK:
No lo hace, pero se fastidia el hilo de la interfaz y MT4 se bloquea... ¿no se puede hacer lo que se hace en un EA?

He ejecutado el programa como EA. También se cuelga o se bloquea MT4.

 
mt4forum:

He ejecutado el programa como EA. También se cuelga o se bloquea MT4.

Creo que necesitas publicar tu código para que alguien pueda tener muchas posibilidades de ayudar....
 
Ovo:
Todos habláis de los bucles infinitos, pero nadie tiene curiosidad por saber qué hace CreateHistory(). Según la salida del registro, sólo aparece en la última ejecución de start().

CreateHistory() hace mucho trabajo. Hace un bucle a través de los pares de divisas y los marcos temporales y genera gráficos fuera de línea.

Pero el archivo de registro muestra que termina correctamente.

 
SDC:

A juzgar por su archivo de registro parece que ya estaba en un bucle. ¿Qué pasa después de llegar a 8? ¿Estaba en un bucle, si lo estaba, cómo sabes que salió de ese bucle? ¿Volvió a init()?

Añadiste Print("Start Started"); y nunca apareció en el archivo de registro así que nunca entró en la función start(). Eso sugiere que nunca salió de la función init(). Pon más sentencias Print() y redúcelo.

Después de llegar a 8 vuelve correctamente a init().

La siguiente línea en el archivo de registro lo demuestra. "DebugMyInit return ..." es la última línea de depuración en MyInit().

2013.11.15 12:33:22 Prueba reducida 395052: USDJPY M15 DebugMyInit return InitialMyInitCalls: 0 IndexCount: 8

Uso mi propia función de impresión para generar el archivo de registro. Print("Start Started") no imprime en ese archivo de registro.

La entrada

2013.11.15 12:33:22 Prueba reducida 395052: USDJPY M15 DebugStart: último retorno en InitialGapFound

muestra, que salió de la función init().

Si puedo confiar, que mi función de depuración registra toda la información correctamente, entonces el archivo de registro nos dice, que después de la última ejecución de start(),

start() sale y no es llamada de nuevo. Ese es el problema.

Razón de la queja: