MT4 se bloque, n'appelle pas start() à nouveau - page 3

 
mt4forum:

Non, je n'utilise pas sleep() ou messagebox(), mais je fais beaucoup de travail dans la fonction MyInit(), qui prend environ 5 secondes.

Vous pouvez le constater dans le fichier journal :

2013.11.15 14:35:32 Test réduit 1180990 : USDJPY M15 DebugStart : InitialHistoryGapClosed
2013.11.15 14:35:32 Test réduit 1180990 : USDJPY M15 DebugMyInit begin : <---------- travail commence
2013.11.15 14:35:32 Test réduit 1180990 : USDJPY M15 DebugMyInit InitialMyInitCalls : 0 IndexCount : 1 nach CreateHistory()
2013.11.15 14:35:33 Test réduit 1180990 : USDJPY M15 DebugMyInit InitialMyInitCalls : 0 IndexCount : 2 nach CreateHistory()
2013.11.15 14:35:34 Test réduit 1180990 : USDJPY M15 DebugMyInit InitialMyInitCalls : 0 IndexCount : 3 nach CreateHistory()
2013.11.15 14:35:35 Test réduit 1180990 : USDJPY M15 DebugMyInit InitialMyInitCalls : 0 IndexCount : 4 nach CreateHistory()
2013.11.15 14:35:35 Test réduit 1180990 : USDJPY M15 DebugMyInit InitialMyInitCalls : 0 IndexCount : 5 nach CreateHistory()
2013.11.15 14:35:36 Test réduit 1180990 : USDJPY M15 DebugMyInit InitialMyInitCalls : 0 IndexCount : 6 nach CreateHistory()
2013.11.15 14:35:37 Test réduit 1180990 : USDJPY M15 DebugMyInit InitialMyInitCalls : 0 IndexCount : 7 nach CreateHistory()
2013.11.15 14:35:37 Test réduit 1180990 : USDJPY M15 DebugMyInit retour InitialMyInitCalls : 0 IndexCount : 8 <---------- fin du travail
2013.11.15 14:35:37 Test réduit 1180990 : USDJPY M15 DebugStart : dernier retour dans InitialGapFound

Mais pourquoi cela fait-il que MT4 passe en boucle après cela ?

Ce n'est pas le cas, mais si vous bousillez le fil de l'interface, MT4 se bloque... Ne pouvez-vous pas faire ce que vous faites dans un EA ?
 
Vous parlez tous de boucles infinies, mais personne n'est curieux de savoir ce que fait CreateHistory(). D'après le journal, elle n'apparaît que dans la dernière exécution de start().
 
Ovo:
Vous parlez tous de boucles infinies, mais personne n'est curieux de savoir ce que fait CreateHistory(). D'après le journal, elle n'apparaît que lors de la dernière exécution de start().
J'ai supposé que c'était une sorte de fonction de sauvegarde de l'historique... si le PO veut le montrer, il le fera.... Je suppose qu'il ne le fait pas et même s'il le fait, cela ne nous aidera probablement pas à l'aider. Le moyen le plus rapide est qu'il poste son code pour que quelqu'un puisse le regarder avec une nouvelle paire d'yeux.... . .
 
RaptorUK:
J'ai supposé que c'était une sorte de fonction de sauvegarde de l'historique... Si le PO veut le montrer, il le fera... Je suppose qu'il ne le fait pas et même s'il le fait, cela ne va probablement pas nous aider à l'aider. Le moyen le plus rapide est qu'il poste son code pour que quelqu'un puisse le regarder avec une nouvelle paire d'yeux.... . .

Pas de problème, je voulais souligner que la boucle infinie pourrait ne pas être la seule raison pour laquelle le terminal se bloque. Surtout si le script modifie certains fichiers.
 

mt4forum 2013.11.16 11:14


Mais pourquoi MT4 se mettrait-il ensuite en boucle ?

A en juger par votre fichier journal, il semble qu'il était déjà en boucle. Que se passe-t-il après avoir atteint 8 ? Etait-il dans une boucle ? Si oui, comment savez-vous qu'il est sorti de cette boucle ? Est-il retourné à init() ?

Vous avez ajouté Print("Start Started") ; et cela n'est jamais apparu dans le fichier journal, donc il n'est jamais entré dans la fonction start(). Cela suggère qu'il n'est jamais sorti de la fonction init(). Mettez plus d'instructions Print() et réduisez le champ.

 

Tout d'abord, merci pour votre grand intérêt, et désolé pour ma réponse tardive.

Je vais aborder les différents commentaires dans les entrées suivantes.

 
RaptorUK:
Ce n'est pas le cas, mais si vous bousillez le fil de l'interface, MT4 se bloque... Ne pouvez-vous pas faire ce que vous faites dans une EA ?

J'ai exécuté le programme en tant qu'EA. Soit il se bloque, soit il fait planter MT4.

 
mt4forum:

J'ai exécuté le programme en tant qu'EA. Soit il se bloque, soit il fait planter MT4.

Je pense que vous devez poster votre code pour que l'on puisse avoir une chance d'aider....
 
Ovo:
Vous parlez tous de boucles infinies, mais personne ne se demande ce que fait CreateHistory(). D'après le journal, elle n'apparaît que dans la dernière exécution de start().

CreateHistory() fait beaucoup de travail. Elle passe en boucle les paires de devises et les horizons temporels et génère des graphiques hors ligne.

Mais le fichier journal montre qu'elle se termine correctement.

 
SDC:

A en juger par votre fichier journal, il semble qu'il était déjà dans une boucle. Que se passe-t-il après qu'il soit arrivé à 8 ? Etait-il dans une boucle si c'est le cas, comment savez-vous qu'il est sorti de cette boucle ? Est-il retourné à init() ?

Vous avez ajouté Print("Start Started") ; et cela n'est jamais apparu dans le fichier journal, donc il n'est jamais entré dans la fonction start(). Cela suggère qu'il n'est jamais sorti de la fonction init(). Mettez plus d'instructions Print() et réduisez le champ.

Après être arrivé à 8, il retourne correctement à init().

La ligne suivante du fichier journal le montre : "DebugMyInit return ..." est la dernière ligne de débogage dans MyInit().

2013.11.15 12:33:22 Test réduit 395052 : USDJPY M15 DebugMyInit return InitialMyInitCalls : 0 IndexCount : 8

J'utilise ma propre fonction print pour générer le fichier journal. Print("Start Started") n'imprime pas dans ce fichier journal.

L'entrée

2013.11.15 12:33:22 Test réduit 395052 : USDJPY M15 DebugStart : dernier retour dans InitialGapFound

montre qu'il a quitté la fonction init().

Si je peux faire confiance, que ma fonction de débogage enregistre correctement toutes les informations, alors le fichier journal nous indique, qu'après la dernière exécution de start(),

start() est sortie et n'est pas appelée à nouveau. C'est là le problème.

Raison: