L'abonnement à OnBookEvent est parfois interrompu - existe-t-il une telle chose ?

 

Après avoir commencé à travailler avec le tumbler et ajouté quelques indicateurs signés à OnBookEvent, j'ai constaté que certains d'entre eux tombent silencieusement, en particulier, 1 expert et 1 indicateur sur des symboles différents. Aucune erreur dans les journaux. Les citations ont continué. D'autres symboles ont continué à fonctionner. Après avoir redémarré manuellement les programmes MQL inactifs, les événements de la profondeur du marché ont recommencé à fonctionner.

Quelqu'un a-t-il observé quelque chose de similaire ? Comment me protéger ? Pour l'instant, l'idée est de surveiller le délai entre le dernier événement de la coupe et les nouveaux ticks. Mais que faire si le délai est dépassé ? Est-il suffisant d'appelerMarketBookAdd à nouveau ?

 

Auparavant, il s'appelait "zombie", peut-être qu'une recherche permettra de trouver d'anciens fils de discussion.

Cela se produit lorsque les experts/indicateurs se désabonnent du tumblr plus souvent qu'ils ne s'y abonnent.

Par exemple, il y avait 2 experts, chacun s'étant inscrit une fois. Puis une a été fermée et désinscrite deux fois. Le deuxième expert qui est resté employé cesse de recevoir des mises à jour.

Je l'ai vu plusieurs fois.

Après avoir ajusté les experts, le problème a disparu et ne s'est pas reproduit depuis plus d'un an.

 
Ilya Baranov:

Auparavant, il était appelé "zombie", peut-être qu'une recherche permettra de trouver d'anciens sujets.

Cela arrive quand les experts/indicateurs se désabonnent d'un tumblr plus souvent qu'ils ne s'y inscrivent.

Strictement parlant, ça ne colle pas. J'ai un abonnement effectué une fois en inite et une désinscription effectuée en deinite. Bien que je ne puisse pas exclure la possibilité que DeInit soit en quelque sorte appelé plus souvent que OnInit.

 
Stanislav Korotky:

Strictement parlant, ça ne colle pas. L'abonnement est effectué une fois dans Init et le désabonnement dans DeInit. Bien que je ne puisse pas exclure la possibilité que DeInit soit en quelque sorte appelé plus souvent que OnInit.

Si c'est au sujet des indicateurs, consultez ce fil de discussion.

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

Si c'est au sujet des indicateurs, jetez un coup d'œil à ce fil de discussion.

Oui, il y a eu un tel sujet, j'y ai même participé, mais apparemment le problème demeure. Mais dans le cas présent, un conseiller expert a également perdu son abonnement.

OK, on va faire la danse du tambourin.

 
Stanislav Korotky:

Après avoir commencé à travailler avec le tumbler et ajouté quelques indicateurs signés à OnBookEvent, j'ai découvert que certains d'entre eux tombent silencieusement, en particulier, 1 expert et 1 indicateur sur des symboles différents. Aucune erreur dans les journaux. Les citations ont continué. D'autres symboles ont continué à fonctionner. Après avoir redémarré manuellement les programmes MQL inactifs, les événements de la profondeur du marché ont recommencé à fonctionner.

Quelqu'un a-t-il observé quelque chose de similaire ? Comment me protéger ? Pour l'instant, l'idée est de surveiller le délai entre le dernier événement de la coupe et les nouveaux ticks. Mais que faire si le délai est dépassé ? Est-il suffisant d'appeler MarketBookAdd à nouveau ?

Il existe deux types d'interrupteurs : le bouton et le commutateur. La première envoie une impulsion et met fin à l'opération, la seconde implique un changement de mode de fonctionnement. Un exemple du premier est une sonnette de porte, qui est l'événement idéal. Un exemple du second est un interrupteur - vous appuyez dessus et il s'allume. Vous voyez, ce n'est pas vraiment un événement, mais quelque chose de plus.

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

Les interrupteurs sont de deux types : les boutons-poussoirs et les interrupteurs. Le premier envoie une impulsion et met fin au fonctionnement, le second implique un changement de mode de fonctionnement. Un exemple du premier est la sonnette d'entrée, qui est l'événement idéal. Un exemple du second est un interrupteur - vous appuyez dessus et il s'allume. Vous voyez, ce n'est pas vraiment un événement, c'est quelque chose de plus.

Non, je ne le fais pas. D'après la documentation, l'abonnement augmente le compteur interne, tandis que le désabonnement le diminue de 1. Lorsqu'il atteint 0, aucun événement n'est envoyé.

J'ai mis les empreintes. J'ai réussi à reproduire le problème lorsque l'EA et l'indicateur se trouvent sur le même graphique. Chacun d'entre eux fait MarketBookAdd dans OnInit et MarketBookRelease dans OnDeinit. Ainsi, après avoir retiré le conseiller expert du graphique (un appel de MarketBookRelease), l'indicateur cesse de recevoir la coupe (bien qu'en fait, son propre appel de MarketBookAdd ne soit pas encore annulé). Au contraire, si nous supprimons l'indicateur, l'abonnement est perdu dans le conseiller expert. Bien sûr, je le détecte et je me réabonne, mais cela ne devrait pas fonctionner comme ça, je pense.

 
Stanislav Korotky:

Non, je ne le fais pas. Selon la documentation, l'abonnement augmente le compteur interne et le désabonnement le diminue de 1. Lorsqu'il atteint 0, aucun événement n'est envoyé.

J'ai mis les imprimantes en place. J'ai réussi à reproduire le problème lorsque l'EA et l'indicateur se trouvent sur le même graphique. Chacun d'entre eux fait MarketBookAdd dans OnInit et MarketBookRelease dans OnDeinit. Ainsi, après avoir retiré le conseiller expert du graphique (un appel de MarketBookRelease), l'indicateur cesse de recevoir la coupe. Au contraire, si je supprime l'indicateur, son abonnement est perdu dans le Conseiller Expert. Bien sûr, je le détecte et je m'abonne à nouveau, mais cela ne devrait pas fonctionner de cette façon, selon moi.

J'ai déjà tout dit. Je ne dirai pas un mot.

 
Stanislav Korotky:

Non, je ne le fais pas. Selon la documentation, l'abonnement augmente le compteur interne et le désabonnement le diminue de 1. Lorsqu'il atteint 0, aucun événement n'est envoyé.

J'ai mis les imprimantes en place. J'ai réussi à reproduire le problème lorsque l'EA et l'indicateur se trouvent sur le même graphique. Chacun d'entre eux fait MarketBookAdd dans OnInit et MarketBookRelease dans OnDeinit. Ainsi, après avoir retiré le conseiller expert du graphique (un appel de MarketBookRelease), l'indicateur cesse de recevoir la coupe (bien qu'en fait, son propre appel de MarketBookAdd ne soit pas encore annulé). Au contraire, si nous supprimons l'indicateur, l'abonnement est perdu dans le conseiller expert. Bien sûr, je l'ai déjà détecté et je me suis réabonné, mais cela ne devrait pas fonctionner de cette façon, je pense.

L'événement BookEvent est diffusé. Lisez attentivement la description de OnBookEvent ici.

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

Après avoir commencé à travailler avec le tumbler et ajouté quelques indicateurs signés à OnBookEvent, j'ai constaté que certains d'entre eux tombent silencieusement, en particulier, 1 expert et 1 indicateur sur des symboles différents. Aucune erreur dans les journaux. Les citations ont continué. D'autres symboles ont continué à fonctionner. Après avoir redémarré manuellement les programmes MQL inactifs, les événements de la profondeur du marché ont recommencé à fonctionner.

Quelqu'un a-t-il observé quelque chose de similaire ? Comment me protéger ? Pour l'instant, l'idée est de surveiller le délai entre le dernier événement de la coupe et les nouveaux ticks. Mais que faire si le délai est dépassé ? Est-il suffisant d'appeler MarketBookAdd à nouveau ?

Lire la suite

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

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

Merci ;-). Bien sûr, j'ai lu la documentation et le forum. S'il existe une réponse à ma question, il serait très aimable de la formuler ou de la mettre en évidence ici.

En particulier, il y a une phrase fascinante dans la documentation :

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

Si ce n'est qu'elle laisse planer le doute quant à la poursuite de l'analogie selon laquelle "il suffit qu'un expert se désinscrive de la réception d'un événement pour que tous les autres experts cessent également de le recevoir" ? Je ne pense pas qu'une telle chose puisse exister, ce serait (ou c'est) un bug.

Raison: