La suscripción a OnBookEvent a veces se cae - ¿existe?

 

Después de que he empezado a trabajar con la secadora y he añadido algunos indicadores firmados a OnBookEvent, he encontrado que algunos de ellos se caen silenciosamente, en particular, 1 experto y 1 indicador en diferentes símbolos. No hay errores en los registros. Las citas continuaron. Otros símbolos siguieron funcionando. Después de reiniciar manualmente los programas MQL inactivos, los eventos de la profundidad del mercado han vuelto a funcionar.

¿Alguien ha observado algo similar? ¿Cómo protegerme? Por ahora, la idea de ver el tiempo de espera entre el último evento de la copa y las nuevas garrapatas. Pero, ¿qué hacer si se supera el tiempo de espera? ¿Basta con volver a llamar aMarketBookAdd?

 

Anteriormente se llamaba "zombi", tal vez una búsqueda aún encuentre hilos antiguos.

Esto ocurre cuando los expertos/indicadores se dan de baja del tumblr más veces de las que se suscriben.

Por ejemplo, había 2 expertos, cada uno de los cuales se inscribió una vez. Luego se cerró uno y se dio de baja dos veces. El segundo experto que ha permanecido empleado deja de recibir actualizaciones.

Lo he visto varias veces.

Tras ajustar a los expertos, el problema desapareció y no ha vuelto a producirse desde hace más de un año.

 
Ilya Baranov:

Anteriormente se llamaba "zombi", tal vez una búsqueda aún encuentre hilos antiguos.

Ocurre cuando los expertos/indicadores se dan de baja de un tumblr más veces de las que se apuntan.

Estrictamente hablando, no encaja. Tengo una suscripción hecha una vez en inite y una baja hecha en deinite. Aunque no puedo descartar la posibilidad de que DeInit sea llamado más veces que OnInit.

 
Stanislav Korotky:

Estrictamente hablando, no encaja. Tengo la suscripción hecha una vez en Init y la baja en DeInit. Aunque no puedo descartar la posibilidad de que DeInit sea llamado más veces que OnInit.

Si se trata de indicadores, mira este hilo.

Последовательность выполнение Init() и DeInit()
Последовательность выполнение Init() и DeInit()
  • 2017.04.07
  • www.mql5.com
Всем привет ! Столкнулся с такой проблемой Написан индикатор или советник...
 
Sergey Savinkin:

Si se trata de los indicadores, echa un vistazo a este hilo.

Sí, hubo un tema de este tipo, incluso participé en él, pero aparentemente el problema persiste. Pero en el caso actual, un Asesor Experto también ha perdido su suscripción.

Bien, haremos el baile de la pandereta.

 
Stanislav Korotky:

Después de que he empezado a trabajar con la secadora y he añadido algunos indicadores firmados a OnBookEvent, he descubierto que algunos de ellos se caen silenciosamente, en particular, 1 experto y 1 indicador en diferentes símbolos. No hay errores en los registros. Las citas continuaron. Otros símbolos siguieron funcionando. Después de reiniciar manualmente los programas MQL inactivos, los eventos de la profundidad del mercado han vuelto a funcionar.

¿Alguien ha observado algo similar? ¿Cómo protegerme? Por ahora, la idea de ver el tiempo de espera entre el último evento de la copa y las nuevas garrapatas. Pero, ¿qué hacer si se supera el tiempo de espera? ¿Basta con volver a llamar a MarketBookAdd?

Hay dos tipos de interruptores, el de botón y el de llave. El primero envía un impulso y termina la operación, el segundo implica un cambio de modo de funcionamiento. Un ejemplo de lo primero es un timbre, que es el evento ideal. Un ejemplo de lo segundo es un interruptor de luz: lo pulsas y se enciende. Verás, no es realmente un evento, es algo más.

 
Алексей Тарабанов:

Los interruptores son de dos tipos, los pulsadores y los conmutadores. El primero envía un impulso y termina el funcionamiento, el segundo implica un cambio de modo de funcionamiento. Un ejemplo del primero es el timbre, que es el evento ideal. Un ejemplo de lo segundo es un interruptor de luz: lo pulsas y se enciende. Verás, no es realmente un evento, es algo más.

No, no lo sé. A juzgar por la documentación, la suscripción aumenta el contador interno, mientras que la cancelación de la suscripción lo disminuye en 1. Una vez que llega a 0, no se envía ningún evento.

Puse las huellas. Se ha conseguido reproducir el problema cuando tanto el EA como el indicador se encuentran en el mismo gráfico. Cada uno de ellos hace MarketBookAdd en OnInit y MarketBookRelease en OnDeinit. Así que, después de quitar el Asesor Experto del gráfico (una llamada de MarketBookRelease), el indicador deja de recibir la copa (aunque en idea, su propia llamada de MarketBookAdd no se cancela todavía). Por el contrario, si eliminamos el indicador, la suscripción se pierde en el Asesor Experto. Por supuesto, lo detecto y me suscribo de nuevo, pero no debería funcionar así, imho.

 
Stanislav Korotky:

No, no lo sé. Según la documentación, la suscripción aumenta el contador interno y la anulación de la suscripción lo disminuye en 1. Cuando llega a 0, no se envía ningún evento.

He colocado las impresoras en su sitio. Se ha conseguido reproducir el problema cuando tanto el EA como el indicador se encuentran en el mismo gráfico. Cada uno de ellos hace MarketBookAdd en OnInit y MarketBookRelease en OnDeinit. Así que, después de quitar el Asesor Experto del gráfico (una llamada de MarketBookRelease), el indicador deja de recibir la copa. Por el contrario, si elimino el indicador, su suscripción se pierde en el Asesor Experto. Por supuesto, lo detecto y me suscribo de nuevo, pero no debería funcionar así, imho.

Ya lo he dicho todo. No diré ni una palabra.

 
Stanislav Korotky:

No, no lo sé. Según la documentación, la suscripción aumenta el contador interno y la anulación de la suscripción lo disminuye en 1. Cuando llega a 0, no se envía ningún evento.

He colocado las impresoras en su sitio. Se ha conseguido reproducir el problema cuando tanto el EA como el indicador se encuentran en el mismo gráfico. Cada uno de ellos hace MarketBookAdd en OnInit y MarketBookRelease en OnDeinit. Así que, después de quitar el Asesor Experto del gráfico (una llamada de MarketBookRelease), el indicador deja de recibir la copa (aunque en idea, su propia llamada de MarketBookAdd no se cancela todavía). Por el contrario, si eliminamos el indicador, la suscripción se pierde en el Asesor Experto. Por supuesto, ya lo detecto y me suscribo de nuevo, pero no debería funcionar así, imho.

Se emite el evento BookEvent. Lea atentamente la descripción de OnBookEvent aquí.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Stanislav Korotky:

Después de que he empezado a trabajar con la secadora y he añadido algunos indicadores firmados a OnBookEvent, he encontrado que algunos de ellos se caen silenciosamente, en particular, 1 experto y 1 indicador en diferentes símbolos. No hay errores en los registros. Las citas continuaron. Otros símbolos siguieron funcionando. Después de reiniciar manualmente los programas MQL inactivos, los eventos de la profundidad del mercado han vuelto a funcionar.

¿Alguien ha observado algo similar? ¿Cómo protegerme? Por ahora, la idea de ver el tiempo de espera entre el último evento de la copa y las nuevas garrapatas. Pero, ¿qué hacer si se supera el tiempo de espera? ¿Basta con volver a llamar a MarketBookAdd?

Lee esto

https://www.mql5.com/ru/forum/95131

invalid book transaction
invalid book transaction
  • 2016.09.06
  • www.mql5.com
Раньше не было, появилось сегодня (реал). Что это...
 

Gracias ;-). Por supuesto que he leído la documentación y el foro. Si hay una respuesta a mi pregunta, sería muy amable articularla o destacarla aquí.

En particular, hay una frase fascinante en la documentación:

В отличие от других событий, событие BookEvent является широковещательным. Это означает, что достаточно одному эксперту подписаться на получение события BookEvent с помощью функции MarketBookAdd, все остальные эксперты, имеющие обработчик OnBookEvent(), будут получать это событие.

Salvo que deja en entredicho si hay que seguir con la analogía de que "basta con que un experto deje de recibir un evento para que todos los demás expertos también dejen de recibirlo"... No creo que pueda existir tal cosa, sería (o es) un error.