MT4 si blocca, non chiama più start() - pagina 3

 
mt4forum:

No, non uso sleep() o messagebox(), ma faccio molto lavoro nella funzione MyInit(), che richiede circa 5 secondi.

Lo si può vedere nel file di log:

2013.11.15 14:35:32 Test ridotto 1180990: USDJPY M15 DebugStart: InitialHistoryGapClosed
2013.11.15 14:35:32 Test ridotto 1180990: USDJPY M15 DebugMyInit begin: <---------- inizia il lavoro
2013.11.15 14:35:32 Test ridotto 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 1 nach CreateHistory()
2013.11.15 14:35:33 Test ridotto 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 2 nach CreateHistory()
2013.11.15 14:35:34 Test ridotto 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 3 nach CreateHistory()
2013.11.15 14:35:35 Test ridotto 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 4 nach CreateHistory()
2013.11.15 14:35:35 Test ridotto 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 5 nach CreateHistory()
2013.11.15 14:35:36 Test ridotto 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 6 nach CreateHistory()
2013.11.15 14:35:37 Test ridotto 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 7 nach CreateHistory()
2013.11.15 14:35:37 Test ridotto 1180990: USDJPY M15 DebugMyInit ritorno InitialMyInitCalls: 0 IndexCount: 8 <---------- fine lavoro
2013.11.15 14:35:37 Test ridotto 1180990: USDJPY M15 DebugStart: ultimo ritorno in InitialGapFound

Ma perché questo dovrebbe far andare MT4 in un loop dopo?

Non lo fa, ma se sbagli il filo dell'interfaccia, MT4 si blocca... non puoi fare quello che stai facendo in un EA?
 
Tutti voi parlate di loop infiniti, ma nessuno è curioso di sapere cosa fa CreateHistory(). Secondo l'output del log appare solo nell'ultima esecuzione di start().
 
Ovo:
Tutti voi parlate di loop infiniti, ma nessuno è curioso di sapere cosa fa CreateHistory(). Secondo l'output del log appare solo nell'ultima esecuzione di start().
Ho pensato che fosse una specie di funzione di salvataggio della cronologia . . . se l'OP vuole mostrarla lo farà . . . Presumo che non lo faccia e anche se lo facesse probabilmente non ci aiuterebbe ad aiutarlo. Il modo più veloce per lui è postare il suo codice in modo che qualcuno possa guardarlo con un paio di occhi nuovi. . .
 
RaptorUK:
Ho pensato che fosse una specie di funzione di salvataggio della storia... se l'OP vuole mostrarla lo farà... Presumo che non lo faccia e anche se lo facesse probabilmente non ci aiuterebbe ad aiutarlo. Il modo più veloce per lui è postare il suo codice in modo che qualcuno possa guardarlo con un paio di occhi nuovi. . .

Nessun problema, volevo sottolineare che il loop infinito potrebbe non essere l'unica ragione per cui il terminale si blocca. Soprattutto se lo script modifica alcuni file.
 

mt4forum 2013.11.16 11:14


Ma perché questo dovrebbe far andare MT4 in un loop dopo?

A giudicare dal tuo file di log sembra che fosse già in un loop. Cosa succede dopo che arriva a 8? Era in un loop, se lo era, come fai a sapere che è uscito da quel loop? E' tornato a init()?

Hai aggiunto Print("Start Started"); e non è mai apparso nel file di log quindi non è mai entrato nella funzione start(). Questo suggerisce che non è mai uscito dalla funzione init(). Mettete più dichiarazioni Print() e restringete il campo.

 

Prima di tutto, grazie per il grande interesse e scusate per la mia risposta tardiva.

Affronterò i diversi commenti nelle voci seguenti.

 
RaptorUK:
Non lo fa, ma se sbagli il filo dell'interfaccia, MT4 si blocca... non puoi fare quello che stai facendo in un EA?

Ho eseguito il programma come EA. Si blocca anche lui o manda in crash MT4.

 
mt4forum:

Ho eseguito il programma come EA. Si blocca anche lui o manda in crash MT4.

Penso che tu debba postare il tuo codice perché chiunque possa avere una buona possibilità di aiutare...
 
Ovo:
Tutti voi parlate di loop infiniti, ma nessuno è curioso di sapere cosa fa CreateHistory(). Secondo l'output del log appare solo nell'ultima esecuzione di start().

CreateHistory() fa un sacco di lavoro. Esegue un loop attraverso coppie di valute e timeframe e genera grafici offline.

Ma il file di log mostra che finisce correttamente.

 
SDC:

A giudicare dal tuo file di log sembra che fosse già in un loop. Cosa succede dopo che arriva a 8? Era in un ciclo, se lo era, come fai a sapere che è uscito da quel ciclo? E' tornato a init()?

Hai aggiunto Print("Start Started"); e non è mai apparso nel file di log quindi non è mai entrato nella funzione start(). Questo suggerisce che non è mai uscito dalla funzione init(). Mettete più dichiarazioni Print() e restringete il campo.

Dopo che arriva a 8 ritorna correttamente a init().

La seguente linea nel file di log lo dimostra: "DebugMyInit return ..." è l'ultima linea di debug in MyInit().

2013.11.15 12:33:22 Test ridotto 395052: USDJPY M15 DebugMyInit return InitialMyInitCalls: 0 IndexCount: 8

Uso la mia funzione di stampa per generare il file di log. Print("Start Started") non stampa in quel file di log.

La voce

2013.11.15 12:33:22 Test ridotto 395052: USDJPY M15 DebugStart: ultimo ritorno in InitialGapFound

mostra che è uscito dalla funzione init().

Se posso fidarmi del fatto che la mia funzione di debug registra correttamente tutte le informazioni, allora il file di log ci dice che dopo l'ultima esecuzione di start(),

start() è uscito e non è stato chiamato di nuovo. Questo è il problema.

Motivazione: