Sí, es un bucle interminable, pero esa es la idea.
Para mantener el ciclo a través de todos los símbolos.
El código de abajo dispara cada 3 segundos.
Aquí está el fragmento de código (es todo en un método para fines de demostración):
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; }
No estoy seguro de lo que quieres decir con "símbolos", pero el código anterior está en un nuevo Asesor Experto con el ExecuteTimer() establecido en 3 segundos.
Aquí está el código (esto es en un EA):
int OnInit()
{
//--- crear temporizador
EventSetTimer(3);
//---
return(INIT_SUCCEED);
}
He añadido el script completo en el archivo adjunto "ForumQuestion1.mq5".
Pasos para recrear el error:
- Abrir el script adjunto en Metaeditor (es seguro) para Metatrader 5
- Abra el Administrador de Tareas en Windows
- Busque "Metatrader 5 Client Terminal" y anote la cantidad de memoria
- Ejecute el script y observe la columna de memoria en el Administrador de Tareas
La memoria aumenta lentamente a medida que el script recorre los símbolos.
Hola,
He añadido el script completo en el archivo adjunto "ForumQuestion1.mq5".
Pasos para recrear el error:
- Abrir el script adjunto en Metaeditor (es seguro) para Metatrader 5
- Abra el Administrador de Tareas en Windows
- Busque "Metatrader 5 Client Terminal" y anote la cantidad de memoria
- Ejecute el script y observe la columna de memoria en el Administrador de Tareas
La memoria aumenta lentamente a medida que el script recorre los símbolos.
He probado tu código y no tengo problemas de memoria.
MT5 Build 1325.
Hola Alain,
Gracias por la respuesta.
Estoy en la misma build. El aumento de la memoria es lento. Tarda unos minutos. Básicamente aumenta gradualmente.
Vea el archivo adjunto "Memory increase.docx.png", tengo algunas capturas de pantalla que muestran el aumento en el tiempo.
Estoy en la misma build "MT5 Build 1325"
Información de la máquina:
- Windows 8.1 Enterprise
- Sistema operativo de 64 bits
- 16Gb RAM
- procesador i7
Gracias
Hola Alain,
Gracias por la respuesta.
Estoy en la misma build. El aumento de la memoria es lento. Tarda unos minutos. Básicamente aumenta gradualmente.
Ver el archivo adjunto "Memory increase.docx.png", tengo algunas capturas de pantalla en la que se muestra la acumulación en el tiempo.
Estoy en la misma build "MT5 Build 1325"
Información de la máquina:
- Windows 8.1 Enterprise
- Sistema operativo de 64 bits
- 16Gb RAM
- Procesador i7
Gracias
Estoy en Windows 10 si eso hace alguna diferencia.
Tu script está funcionando desde unos minutos antes de mi post anterior. Actualmente el uso de la memoria es menor que cuando lo inicié (280 Mb contra 300 Mb).
EDIT: Acabo de comprobar againt y es ahora 189 Mb !!! sigue disminuyendo :D
EDIT2: Funcionando en el servidor de demostración de Metaquotes.
Gracias por los comentarios.
Creo que voy a actualizar a Windows 10 y ver si eso hace una diferencia.
Lo he puesto en Windows Server 12 R2 y eso también hace subir la memoria.
Déjame monitorear esto por un tiempo y dar retroalimentación en este hilo.
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Tengo un Asesor Experto que ha sido configurado para recorrer los símbolos y consume mucha memoria.
Me he dado cuenta de que esto ocurre cuando los símbolos se cargan y se sacan de la vigilancia del mercado, lo que aumenta lentamente, así que no es el gráfico el que recorre los elementos existentes en la vigilancia del mercado, sino más bien cuando se cargan y eliminan nuevos símbolos.
Está configurado para hacer lo siguiente:
Cuando elimino todo el código personalizado posible y sólo utilizo los pasos anteriores para hacer un ciclo de un gráfico a través de los símbolos disponibles, noto que el uso de la memoria en mi máquina sigue aumentando.
La CPU se mantiene a un ritmo constante pero la memoria se dispara.
Preguntas:
(por ejemplo, abrir un nuevo gráfico con ChartOpen() en lugar de utilizar el gráfico existente con ChartSetSymbolPeriod())
(es decir, ¿es así como funciona?)
Gracias, se agradece mucho