Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 593

 

Un'altra domanda, quanto bene funziona il tester con gli EA che copiano i dati da più TF?

Se è corretto, quale TF scegliere durante i test ha importanza?

 
Juer:

Un errore di memoria esaurita appare quando si esegue un test (non parte). Come risolvere il problema?

Dopo aver riavviato il terminale, inizia il test, e poi dopo diversi test di nuovo fuori dalla memoria.

Diminuisci il numero di barre visibili e nella cronologia (ma in questo caso la cronologia delle quotazioni profonde scomparirà, quindi decidi tu cosa è più importante). È anche possibile che siano aperti troppi grafici nel terminale. A volte un utente apre circa 50 grafici con 1 milione di barre di storia. Nessuna memoria è sufficiente in questo caso.

 
Artyom Trishkin:

È qui che saranno in grado di rispondere esattamente.

Ci sono diverse decine di migliaia di linee nel codice. Nei registri errori solo dopo aver testato xxx oggetti non cancellati lasciati. Posso eseguire circa 9 test in media e poi dare un errore di memoria.

 
Ihor Herasko:

Riducete il numero di barre visibili e di barre nella storia (solo in questo caso la storia profonda delle quotazioni scomparirà, quindi decidete voi cosa è più importante). È anche possibile che ci siano troppi grafici aperti nel terminale. A volte un utente apre circa 50 grafici con 1 milione di barre di storia. Nessuna memoria è sufficiente in questo caso.

No, non aiuta né influenza nulla. Sto testando con un solo grafico e riducendo la cronologia al minimo. Ripeto, può essere testato, ma solo un numero limitato di volte. Al decimo test circa, appare un errore di memoria esaurita.

 
Juer:

Ci sono diverse decine di migliaia di linee nel codice. Nei registri errori solo dopo aver testato xxx oggetti non cancellati lasciati. In media riesco a eseguire 9 test e poi errore di memoria.

Queste sono tutte perdite di memoria. Devono essere eliminati liberando la memoria allocata a ciascuno degli oggetti tramite il comando di cancellazione.

 
Ihor Herasko:

Queste sono tutte perdite di memoria. Devono essere eliminati liberando la memoria allocata a ciascuno degli oggetti tramite il comando di cancellazione.

Per chiarire: cancella tutti gli oggetti in OnDeinit() - oggetti grafici, di classe se ce ne sono...

 
Artyom Trishkin:

Per chiarire: cancella tutti gli oggetti in OnDeinit() - oggetti grafici, di classe se ce ne sono...

Come faccio a cancellarli lì se non sono visibili...

Ho una collezione di oggetti (classe ereditata da CArrayObj), questi a loro volta sono aggiunti a una lista di oggetti simili, e quelli all'oggetto finale (anche questo ereditato da CArrayObj), che è già visibile a livello globale e che cancello in OnDeinit... E non li cancello quando li elimino, mi servono mentre il programma è in esecuzione.

 
Juer:

Come faccio a cancellarli lì se non sono visibili...

Ho una collezione di oggetti (classe ereditata da CArrayObj), questi a loro volta sono aggiunti a una lista di oggetti simili, e quelli all'oggetto finale (anche questo ereditato da CArrayObj), che è già visibile a livello globale e che cancello in OnDeinit... E non li cancello quando li elimino, mi servono mentre il programma è in esecuzione.

Non succede che gli oggetti creati siano invisibili.

Possono essere inaccessibili da una funzione o da un'altra, ma devono essere accessibili nell'oggetto stesso. Questo è l'oggetto in cui è necessario cancellare la memoria. Questo di solito viene fatto con il distruttore della classe. Per essere sicuri, mettete Prints in tutti i distruttori e in OnDeinit.

 
Per favore, chi lo sa, mi dica come determinare se c'è un pannello OCT sul grafico
 
Stanislav Dray:
Per favore, chi lo sa, mi dica come identificare la presenza di un pannello OCT su un grafico

Cos'è un pannello OCT?

Motivazione: