Errores, fallos, preguntas - página 2723
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Puedes decirme qué ocurre y cómo acelerar la actualización del gráfico? La función ChartRedraw se llama desde el Asesor Experto, pero todavía hay un par de minutos de retraso.
ChartRedraw es necesario sólo para dibujar (actualizar) objetos gráficos, no necesitamos ChartRedraw para un indicador normal que dibuje por buffers de indicadores
creo que deberías buscar el problema en el indicador, quizás el cálculo de los buffers en cada tick no es correcto, hay "autores" que calculan todo el historial en cada tick
ZZY: No puedo confirmarlo, pero tal vez ChartRedraw actualiza todo el gráfico con el historial sincronizado, si es así, en realidad se reinicia el indicador con un cálculo completo de todo el historial cada vez
UPD: tratar de limitar la historia en el gráfico a un menor número de barras 10 000 es suficiente, en MT4 hubo un caso en el que un indicador pesado "engulló" toda la memoria y luego buscó por qué EA no funcionó correctamente (funcionó entonces no). Aunque en MT5 es poco probable que se haya utilizado toda la memoria .... pero ocurre
ChartRedraw es necesario sólo para dibujar (actualizar) objetos gráficos, no se necesita ChartRedraw para un indicador normal que dibuje por medio de buffers de indicadores
creo que deberías buscar el problema en el indicador, quizás el cálculo de los buffers en cada tick no es correcto, hay "autores" que calculan todo el historial en cada tick
ZZY: No puedo confirmarlo, pero tal vez ChartRedraw actualiza todo el gráfico con el historial sincronizado, si es así, realmente se reinicia el indicador con un cálculo completo de todo el historial cada vez
UPD: tratar de limitar la historia en el gráfico a un menor número de barras 10 000 es suficiente, en MT4 hubo un caso en el que un indicador pesado "engulló" toda la memoria y luego buscó por qué EA no funcionó correctamente (funcionó entonces no). Aunque en MT5 es poco probable que se utilice toda la memoria.... pero puede ocurrir.
He intentado optimizar el cálculo y he probado la versión anterior del indicador. He calculado cada 1000 barras antes y ahora estoy esperando a que se abra una nueva barra.
Si esta es la razón, todavía debería estar muy sorprendido. ¿1k barras de cálculos no muy fuertes ralentizan el dibujo del gráfico durante 2 minutos?
Si esa es la razón, todavía vale la pena una gran sorpresa. ¿1 barra de cálculos no muy fuertes ralentiza el dibujo del gráfico durante 2 minutos?
no puede ser, en mi opinión, el terminal descargará tal indicador con un mensaje diciendo " cálculo demasiado largo en el indicador xxx".
el tiempo de ejecución de la MT (4/5) es muy rápido, por supuesto que puedes calcular los mismos datos varias veces, pero imho, tienes que probarlo mucho
Creo que el autor del indicador no está familiarizado con el cálculo económico de los topes de los indicadores, y se olvida de calcular correctamente las últimas barras... vete a QB a estudiar cómo se escribe un indicador ;)
¿Estos dos programas están en el mismo terminal o en dos terminales diferentes?
El código para reproducir el problema está publicado aquí. https://www.mql5.com/en/forum/332849
Es necesario ejecutar el código al menos 2 veces para reproducirlo.
No es necesario en absoluto. ¿Por qué C? ¿Qué tal C#? - Está más cerca de C# en términos de significado.
Probablemente porque µl c++ es similar, y las estructuras llegaron allí desde c.
Todo lo que se dice sobre las estructuras pasivas son nociones arcaicas, en mi opinión.
Si necesitas constructores, usa clases o vete a Sharp. ¿Por qué debemos privar a las estructuras de esta connotación? Esto sólo hará que los programas sean más expresivos. Puedo tomar el código de alguien y ver que tiene una estructura en lugar de una clase y obtener mucha información de una sola palabra. No conseguirás nada, estudiarás diligentemente el código fuente para obtener el mismo resultado, que yo conseguí en un abrir y cerrar de ojos. En mi experiencia - esta convención de estructuras se respeta, bueno tal vez una especie de marginalismo nihilista al viento.
Creo que, como mínimo, cada tipo debería tener un constructor. Los campos no inicializados son malos y deben evitarse.
No hay maldad ahí, te parece. Vaughn incluso arrastró a la norma: la lectura de unsigned char y std::byte sin inicializar no es un comportamiento indefinido. Puede utilizar la inicialización agregada para POD. Y no olvides que toda esta inicialización no es gratuita, es un consumo real de recursos (CPU, memoria, tamaño de un ejecutable). Si te importa un carajo con tu máquina de hacer números, en el caso de algún microcontrolador puede ser importante. Al fin y al cabo, C/C++ no es sólo una baraja de Windows como Sharp.
La inicialización de una sola variable aumentó el tamaño de la instrucción en un 30%.En un terminal. El experto escribe los datos, el indicador los lee. Colgados en gráficos diferentes, pero obviamente podrían estar en el mismo (si es que eso importa). Construye 2380.
El Asesor Experto que lee el archivo debe mantener este archivo cerrado.
La peculiaridad de la implementación de los archivos en MQL5 es que mantienen al máximo los datos de los archivos en sus propios buffers. Si la cantidad de información es tan grande que no cabe en el buffer, entonces tu truco de mover el puntero al principio y luego al final del archivo puede funcionar.
Así que en este punto, abre el archivo, comprueba el contenido y vuelve a cerrarlo
Un Asesor Experto que lee un archivo debe mantenerlo cerrado.
La peculiaridad de la implementación de los archivos en MQL5 es que mantienen los datos de los archivos en sus propios buffers tanto como sea posible. Si la cantidad de información es tan grande que no cabe en el buffer, entonces tu truco de mover el puntero al principio y luego al final del archivo puede funcionar.
Así que en este punto, abre el archivo, comprueba el contenido y vuelve a cerrarlo
¿Así que FileFlush () es inútil?
No. Hay que hacer FileFlush si se quiere que otra persona pueda leer el archivo modificado
El problema es que el programa MQL5 lee el archivo en su propio buffer cuando lo abre. No sabrá nada de los cambios en el archivo hasta que lo vuelva a leer. El archivo sólo puede ser leído de nuevo cerrando y abriendo el archivo
No. Hay que hacer FileFlush si se quiere que otra persona pueda leer el archivo modificado
¿Incluso si se cierra el archivo?
¿Incluso si se cierra el archivo?
A eso me refiero exactamente. Cerrar y volver a abrir
¿O se refiere a FileFlush antes de cerrar el archivo?