Sì, è un ciclo senza fine, ma questa è l'idea.
Per continuare a scorrere tutti i simboli.
Il codice qui sotto spara ogni 3 secondi.
Ecco un frammento di codice (è tutto in un metodo per scopi dimostrativi):
void OnTimer() { // Find next symbol long symbolsTotal = SymbolsTotal(false); long count = GlobalVariableGet("testmem"); if(count >= symbolsTotal) { count = 0; } string newSymbol = SymbolName(count, false); SymbolSelect(newSymbol, true); count++; GlobalVariableSet("testmem", count); // Change chart symbol ChartSetSymbolPeriod(0, newSymbol, Period()); // Remove other symbols from Market Watch CArrayString *symbols = new CArrayString(); for(int i = 0; i < SymbolsTotal(true); i++) { string symbol = SymbolName(i, true); // Get name from local market watch symbols.Add(symbol); } int total = symbols.Total(); for(int i = 0; i < total; i++) { string symbolToRemove = symbols.At(i); // Is the symbol not the current chart or about to // be added? if(newSymbol != symbolToRemove) { // Remove from Market Watch SymbolSelect(symbolToRemove, false); } } delete symbols; }
Non sono sicuro di cosa intendi per "simboli" ma il codice qui sopra è in un nuovo Expert Advisor con ExecuteTimer() impostato a 3 secondi.
Ecco il codice (questo è in un EA):
int OnInit()
{
//--- crea il timer
EventSetTimer(3);
//---
return(INIT_SUCCEED);
}
Ho aggiunto lo script completo nel file allegato "ForumQuestion1.mq5".
Passi per ricreare l'errore:
- Aprire lo script allegato in Metaeditor (è sicuro) per Metatrader 5
- Aprire Task Manager in Windows
- Cercare "Metatrader 5 Client Terminal" e notare la quantità di memoria
- Eseguire lo script e guardare la colonna della memoria in Task Manager
La memoria aumenta lentamente man mano che lo script scorre i simboli.
Ciao,
Ho aggiunto lo script completo nel file allegato "ForumQuestion1.mq5".
Passi per ricreare l'errore:
- Aprire lo script allegato in Metaeditor (è sicuro) per Metatrader 5
- Aprire Task Manager in Windows
- Cercare "Metatrader 5 Client Terminal" e notare la quantità di memoria
- Esegui lo script e guarda la colonna della memoria in Task Manager
La memoria aumenta lentamente man mano che lo script passa attraverso i simboli.
Ho provato il tuo codice e non ho problemi di memoria.
MT5 Build 1325.
Ciao Alain,
Grazie per la risposta.
Sono sulla stessa build. L'aumento della memoria è lento. Ci vuole qualche minuto. Fondamentalmente aumenta gradualmente.
Vedi il file allegato "Memory increase.docx.png", ho alcuni screenshot che mostrano l'aumento nel tempo.
Sono sulla stessa build "MT5 Build 1325"
Informazioni sulla macchina:
- Windows 8.1 Enterprise
- 64bit OS
- 16Gb RAM
- processore i7
Grazie
Ciao Alain,
grazie per la risposta.
Sono sulla stessa build. L'aumento della memoria è lento. Ci vogliono alcuni minuti. Fondamentalmente aumenta gradualmente.
Vedi il file allegato "Memory increase.docx.png", ho alcuni screenshot che mostrano l'aumento nel tempo.
Sono sulla stessa build "MT5 Build 1325".
Informazioni sulla macchina:
- Windows 8.1 Enterprise
- 64bit OS
- 16Gb RAM
- processore i7
Grazie
Sono su Windows 10 se questo fa qualche differenza.
Il tuo script è in esecuzione da alcuni minuti prima del mio post precedente. Attualmente l'utilizzo della memoria è inferiore a quando l'ho avviato (280 Mb contro 300 Mb).
EDIT: Ho appena controllato di nuovo ed è ora 189 Mb!!! ancora in diminuzione :D
EDIT2: In esecuzione su Metaquotes Demo-Server.
Grazie per il feedback.
Penso che aggiornerò a Windows 10 e vedrò se questo fa la differenza.
L'ho messo su Windows Server 12 R2 e anche questo spinge la memoria in alto.
Lasciatemi monitorare questo per un po' e dare un feedback su questo thread.

- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ho un Expert Advisor che è stato impostato per ciclare attraverso i simboli e mastica molta memoria.
Ho notato che è quando i simboli vengono caricati dentro e fuori dal Market Watch che la memoria aumenta lentamente, quindi non è il grafico che cicla attraverso gli elementi esistenti nel Market Watch, ma più quando vengono caricati e rimossi nuovi simboli.
È impostato per fare quanto segue:
Quando rimuovo tutto il codice personalizzato possibile e uso solo i passi di cui sopra per ciclare un grafico attraverso i simboli disponibili, noto che l'utilizzo della memoria sulla mia macchina continua ad aumentare.
La CPU rimane e un tasso costante ma la memoria schizza verso l'alto.
Domande:
(per esempio aprire un nuovo grafico con ChartOpen() invece di usare il grafico esistente con ChartSetSymbolPeriod())
(cioè questo è solo il modo in cui funziona)
Grazie mille