Errores, fallos, preguntas - página 1547

 
Комбинатор:
Ahora preste atención a la pregunta - ¿cómo hacer que el terminal vuelva a dibujar inmediatamente los datos que se calcularon de esta manera?

Extrae datos de los búferes que no están en OnCalculate

OnCalculate tiene un tiempo mínimo de extracción de 1 minuto

Los indicadores de tic dibujan cada tic

 
comp:
Parece que no.

Sin embargo, ChartRedraw hará el 100% del trabajo en cuatro.

Y también resultó estar bien en cinco.

Así que ChartRedraw funcionará bien en ambas plataformas.

 

Cuando llega CHARTEVENT_CHART_CHANGE, hago un cálculo que a veces dura un segundo/noche. Si durante el cálculo, por ejemplo, se mueve un gráfico, después del cálculo se vuelve a llamar a CHARTEVENT_CHART_CHANGE desde la cola.

¿Es posible saber durante el cálculo que hay algo en la cola de eventos? Entonces, ¿no podría hacer un cálculo que ya no es relevante, interrumpirlo e iniciar un nuevo cálculo?

Por ejemplo, si incluso una parte de cálculo muy pesada tiene una comprobación de IsStopped(), entonces el cierre del Asesor Experto sería instantáneo, sin esperar al cálculo.

Aquí sería algo similar, pero no con el evento de cierre, sino con ChartEvent.

 
comp:

Cuando llega CHARTEVENT_CHART_CHANGE, hago un cálculo que a veces dura un segundo/noche. Si durante el cálculo, por ejemplo, se mueve un gráfico, después del cálculo se vuelve a llamar a CHARTEVENT_CHART_CHANGE desde la cola.

¿Es posible saber durante el cálculo que hay algo en la cola de eventos? Entonces, ¿no podría hacer un cálculo que ya no es relevante, interrumpirlo e iniciar un nuevo cálculo?

Por ejemplo, si incluso una parte de cálculo muy pesada tiene una comprobación de IsStopped(), entonces el cierre del Asesor Experto sería instantáneo, sin esperar al cálculo.

Aquí sería algo similar, pero no con el evento de cierre, sino con ChartEvent.


hacer un segundo hilo de procesamiento (en forma de temporizador ms, por ejemplo)

y exactamente allí para realizar el cálculo, siempre que el flag del contador==XXX esté activado, incrementado en CHARTEVENT_CHART_CHANGE.

Así, se obtiene rápidamente toda la cola de ChartEvent, se establece una bandera y, paralelamente, el temporizador comprueba esta bandera y la calcula.

---

En el mismo temporizador, comprueba el valor del contador de banderas. Es posible detener el cálculo si el valor actual del contador es mayor que el valor con el que se inició el cálculo. Así que es como IsNewChanged

 
o_O:

por lo que se hace un barrido de toda la cola de ChartEvent muy rápidamente, se establece una bandera, y en paralelo el temporizador tira de esa bandera y la calcula.

¿Está diciendo que los eventos ChartEvent y Timer se ejecutan en paralelo?
 

El Servicio de Atención al Cliente ha hecho esta declaración

SetIndexBuffer делается однократно на вызове OnInit

¿Alguien utiliza SetIndexBuffer no en OnInit y/o repetidamente? En MT4 lo uso todo el tiempo. En MT5 no se puede hacer esto, por desgracia.

 
comp:
¿Está diciendo que los eventos ChartEvent y Timer se ejecutan en paralelo?

aunque se ejecuten secuencialmente - no se le impide usar al menos esto.

se quita al instante todo el ChartEvent y se pone sólo una orden.

---

sobre el paralelismo de los eventos del temporizador y del gráfico es una cuestión pertinente.

Pregúntale al servicedesk.

 
o_O:

aunque se ejecuten secuencialmente - no se le impide usar al menos esto.

se quita al instante todo el ChartEvent y se pone sólo una orden.

---

sobre el paralelismo de los eventos del temporizador y del gráfico es una cuestión pertinente.

Pregunte en el Servicio de Atención al Cliente.

Nadie lee la documentación...

El terminal cliente envía los eventos generados a las cartas abiertas correspondientes. También los eventos pueden ser generados por los gráficos (eventos de gráficos) o los programas mql5 (eventos personalizados). La generación de eventos de creación y eliminación de objetos gráficos en un gráfico puede activarse o desactivarse estableciendo las propiedades CHART_EVENT_OBJECT_CREATE y CHART_EVENT_OBJECT_DELETE de un gráfico. Cada programa mql5 y cada gráfico tiene su propia cola de eventos, donde se almacenan todos los nuevos eventos.

El programa sólo recibe eventos del gráfico en el que se está ejecutando. Todos los eventos se procesan uno por uno en el orden de recepción. Si ya hay un evento NewTick en la cola o si este evento está en estado de procesamiento, no se coloca un nuevo evento NewTick en la cola del programa mql5. Del mismo modo, si la cola del programa mql5 ya contiene el evento ChartEvent o se está procesando dicho evento, no se pondrá en cola un nuevo evento de este tipo. Los eventos de temporizador se manejan de acuerdo al mismo esquema - si hay un evento de temporizador en la cola o el evento de temporizador ya está manejado, un nuevo evento de temporizador no se coloca en la cola.

 
Slawa:

Nadie lee la documentación...

Entonces no hay interrupción del cálculo basado en eventos.
 
Slawa:

Nadie lee la documentación...

Ha pasado mucho tiempo