¿Por qué los indicadores (líneas, flechas, histogramas) parpadean en el terminal MT5? - página 6

 
Andrey Khatimlianskii: Se me ocurrió una idea. El recálculo completo (y el redibujado) se produce si prev_calculated = 0. Intente insertar una impresión OnCalculate al principio para este caso y vea si las impresiones aparecen cuando se produce el parpadeo. Si es así, tienes que averiguar qué es lo que está provocando que el terminal ponga el contador a 0 (y puedes escribir al servicio técnico sobre ello). Si no es así, se trata de un fallo aún mayor y se puede enviar al servicio técnico un simple indicador de prueba, condiciones de reproducción y un breve vídeo de demostración.

Usted sugirió una solución similar arriba - insertar la impresión en la función OnCalculate(), lo añadí, nada inesperado apareció en el registro, hay un proceso normal de entrada y procesamiento de nuevas barras. Los contadores no se reinician, pero se producen parpadeos.

 
Andrey Khatimlianskii:

Ha surgido una idea.

El recálculo completo (y el redibujado) ocurre si prev_calculated = 0. Intente insertar una impresión OnCalculate al principio para este caso y vea si las impresiones aparecen al parpadear.

Si es así, tienes que averiguar qué es lo que está provocando que el terminal ponga el contador a 0 (y puedes escribir al servicio técnico sobre ello).

Si no es así, se trata de un fallo aún mayor y se puede enviar al servicio técnico un simple indicador de prueba, condiciones de reproducción y un breve vídeo de demostración.

Breve historia:

Hace tiempo intenté reescribir el indicador que recoge los ticks up y los ticks down por separado en tiempo real de mql4 a mql5 pero no funcionó porque el indicador reinicia periódicamente los datos ya acumulados. Comenté este tema con SD y me aseguraron que el reinicio viene de que prev_calculated se pone a 0 y se recalcula todo el historial, y el reinicio se produce por la pérdida de conexión con el servidor.

Los experimentos que hice ayer:

En primer lugar poner Print() por condición... No lo esperé y empecé a crear artificialmente la pérdida de conexión. Se ejecuta Print(), pero el indicador no parpadea.

También puse a cero prev_calculated haciendo clic en el gráfico y "Actualizar" desde el menú contextual, pero el indicador no parpadea. He decidido ver cómo afecta ChartRedraw al recálculo de los indicadores, pero el resultado es cero . No tiene ningún efecto , ni en el propio indicador, ni en el indicador que trabaja en paralelo con la llamada ChartRedraw.

Intenté encontrar el reemplazo de prev_calculated. Si se llama a algún indicador técnico, prev_calculated puede ser sustituido por BarsCalculated(handle), pero si no... no se encuentra. En el caso de esta sustitución, cuando prev_calculated se pone a cero, el indicador no se recalcula y no pierde sus cálculos.

De todos modos, no conseguí encontrar nada útil...

Esto es una suposición delirante:

¿No puede ser que se pierdan algunos ticks, luego se carguen con algún retraso y en ese momento se produzca el guiño?

 

¿A alguien le parece queeste indicador de acciones de histograma basado en ticks parpadea?

Conseguí ver el parpadeo de un indicador constante sólo una vez (en la apertura del mercado) y sólo en el panel CTRL+D, los histogramas mismos no mostraron ningún parpadeo (probablemente debido a la falta de GPU). No ha sido posible reproducir la grabación de vídeo.


El efecto de cambio debe observarse en un mercado rápido. Es necesario esperar a que la bolsa se ponga en marcha, entonces, lo más probable es que se pueda grabar el parpadeo. Como alternativa, sugiero poner el terminal en una grabación continua de varias horas. Y luego recorta el trozo en el que el parpadeo es particularmente notable.

 
No hay que confundir que la puesta a cero del contador (o la edición "retroactiva" del tick) es el único caso en el que el terminal redibuja el gráfico. La lógica allí probablemente tiene en cuenta un montón de otros factores que no conocemos. He dado en el clavo con este problema debido a la aleatoriedad de la reproducción y a la dificultad de comunicación que suele darse en el servicio de atención al cliente.
 
Stanislav Korotky: No hay que confundir que la puesta a cero del contador es el único caso en el que el terminal redibuja el gráfico. La lógica allí probablemente tiene en cuenta un montón de otros factores que no conocemos. He dado con este problema debido a la aleatoriedad de la repetición y a las dificultades de comunicación que suelen surgir en un servicio de atención al cliente.

Estoy llegando a la misma conclusión. Lo más probable es que se trate de un asunto interno que no van a publicitar y nunca sabremos la verdadera razón. Y los desarrolladores expresaron implícitamente su actitud ante la pregunta, pero no aparecieron ni una sola vez en este hilo. Aunque podrían haber dejado claro...

 

El indicador ZZ de la entrega desapareció fuera de línea durante un par de segundos, así que no se trata de los ticks.

 
Eugene Myzrov:

Usted sugirió una solución similar arriba - insertar la impresión en la función OnCalculate(), la añadí, no apareció nada inesperado en el registro, hay un proceso normal de entrada y procesamiento de nuevas barras. Los contadores no se ponen a cero, pero se producen parpadeos.


No he leído las páginas anteriores, ¿se ha respondido a su pregunta? Si no es así, aquí tienes la solución, prueba a aumentar el número de buffers, tienes el número equivocado, por eso los parpadeos.
 
Roman Vashchilin:

No he leído las páginas anteriores, ¿se ha respondido a su pregunta? Si no es así, aquí está la solución, intenta aumentar el número de buffers, tienes el número equivocado, por eso está parpadeando.

¿El número de topes también es erróneo en la zona estándar?
 
Roman Vashchilin: No he leído las páginas anteriores, ¿se ha respondido a su pregunta? Si no es así, aquí tienes una solución, intenta aumentar el número de buffers, tienes el número equivocado, por eso está parpadeando.

¿Por qué crees que "el número de búferes es incorrecto, por eso parpadea"? Si utilizo 2 buffers y 2 arrays, entonces lo especificaré en consecuencia.

#property   indicator_buffers 2
#property   indicator_plots   2

¿Por qué debo especificar más topes de los que necesito, es decir, más de dos?

 
Eugene Myzrov:

¿Por qué crees que "el número de búferes es incorrecto, por eso parpadea"? Si utilizo 2 buffers y 2 arrays, entonces lo especificaré en consecuencia.

¿Por qué debo especificar más topes de los que necesito, es decir, más de dos?


Y, si coinciden, no es necesario cambiar.