L'iscrizione a OnBookEvent a volte cade - esiste una cosa del genere?

 

Dopo aver iniziato a lavorare con il tumbler e aver aggiunto alcuni indicatori firmati a OnBookEvent, ho scoperto che alcuni di essi cadono silenziosamente, in particolare, 1 esperto e 1 indicatore su diversi simboli. Nessun errore nei log. Le citazioni continuavano. Altri simboli hanno continuato a lavorare. Dopo aver riavviato manualmente i programmi MQL inattivi, gli eventi della profondità del mercato hanno ripreso a funzionare.

Qualcuno ha osservato qualcosa di simile? Come proteggermi? Per ora, l'idea di guardare il timeout tra l'ultimo evento della tazza e i nuovi tick. Ma cosa fare se il timeout viene superato? È sufficiente chiamare nuovamenteMarketBookAdd?

 

Prima si chiamava "zombie", forse una ricerca troverà ancora vecchi thread.

Questo succede quando gli esperti/indicatori si cancellano dal tumblr più volte di quanto si iscrivono.

Per esempio c'erano 2 esperti, ognuno iscritto una volta. Poi uno è stato chiuso e cancellato due volte. Il secondo esperto che è rimasto impiegato smette di ricevere aggiornamenti.

L'ho visto diverse volte.

Dopo aver regolato gli esperti il problema è scomparso e non si è ripresentato per più di un anno.

 
Ilya Baranov:

Prima si chiamava "zombie", forse una ricerca troverà ancora vecchi argomenti.

Succede quando gli esperti/indicatori si cancellano da un tumblr più volte di quanto si iscrivono.

In senso stretto, non ci sta. Ho una sottoscrizione fatta una volta in inite e una cancellazione fatta in deinite. Anche se non posso escludere la possibilità che DeInit sia in qualche modo chiamato più volte di OnInit.

 
Stanislav Korotky:

In senso stretto, non ci sta. Ho fatto la sottoscrizione una volta in Init e la cancellazione in DeInit. Anche se non posso escludere la possibilità che DeInit sia in qualche modo chiamato più volte di OnInit.

Se si tratta di indicatori, guardate questo thread.

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

Se si tratta degli indicatori, date un'occhiata a questo thread.

Sì, c'è stato un tale argomento, vi ho anche partecipato, ma apparentemente il problema rimane. Ma nel caso attuale, anche un Expert Advisor ha perso la sua sottoscrizione.

Ok, faremo la danza del tamburello.

 
Stanislav Korotky:

Dopo aver iniziato a lavorare con il tumbler e aggiunto alcuni indicatori firmati a OnBookEvent, ho scoperto che alcuni di loro cadono silenziosamente, in particolare, 1 esperto e 1 indicatore su simboli diversi. Nessun errore nei log. Le citazioni continuavano. Altri simboli hanno continuato a lavorare. Dopo aver riavviato manualmente i programmi MQL inattivi, gli eventi della profondità del mercato hanno ripreso a funzionare.

Qualcuno ha osservato qualcosa di simile? Come proteggermi? Per ora, l'idea di guardare il timeout tra l'ultimo evento della tazza e i nuovi tick. Ma cosa fare se il timeout viene superato? È sufficiente chiamare nuovamente MarketBookAdd?

Ci sono due tipi di interruttori, un pulsante e un interruttore. Il primo invia un impulso e termina l'operazione, il secondo comporta un cambio di modalità operativa. Un esempio del primo è un campanello, che è l'evento ideale. Un esempio del secondo è un interruttore della luce - lo premi e si accende. Vedete, questo non è veramente un evento, ma qualcosa di più.

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

Gli interruttori sono di due tipi, pulsanti e interruttori. Il primo invia un impulso e termina il funzionamento, il secondo comporta un cambio di modalità operativa. Un esempio del primo è il campanello, che è l'evento ideale. Un esempio del secondo è un interruttore della luce - lo premi e si accende. Vedete, non è proprio un evento, è qualcosa di più.

No, non lo so. A giudicare dalla documentazione, la sottoscrizione aumenta il contatore interno, mentre la cancellazione della sottoscrizione lo diminuisce di 1. Una volta che raggiunge lo 0 - nessun evento viene inviato.

Ho messo le stampe. Ottenuta la riproduzione del problema quando sia l'EA che l'indicatore si trovano sullo stesso grafico. Ognuno di loro fa MarketBookAdd in OnInit e MarketBookRelease in OnDeinit. Così, dopo aver rimosso l'Expert Advisor dal grafico (una chiamata di MarketBookRelease), l'indicatore smette di ricevere la coppa (anche se in idea, la sua stessa chiamata di MarketBookAdd non è ancora cancellata). Al contrario, se cancelliamo l'indicatore, l'iscrizione si perde nell'Expert Advisor. Naturalmente, lo rilevo e mi iscrivo di nuovo, ma non dovrebbe funzionare così, imho.

 
Stanislav Korotky:

No, non lo so. Secondo la documentazione, la sottoscrizione aumenta il contatore interno e la cancellazione della sottoscrizione lo diminuisce di 1. Quando raggiunge lo 0, nessun evento viene inviato.

Ho messo a posto le stampanti. Ottenuta la riproduzione del problema quando sia l'EA che l'indicatore si trovano sullo stesso grafico. Ognuno di loro fa MarketBookAdd in OnInit e MarketBookRelease in OnDeinit. Così, dopo aver rimosso l'Expert Advisor dal grafico (una chiamata di MarketBookRelease), l'indicatore smette di ricevere la tazza. Al contrario, se rimuovo l'indicatore, la sua sottoscrizione si perde nell'Expert Advisor. Naturalmente, lo rilevo e mi iscrivo di nuovo, ma non dovrebbe funzionare così, imho.

Ho già detto tutto. Non dirò una parola.

 
Stanislav Korotky:

No, non lo so. Secondo la documentazione, la sottoscrizione aumenta il contatore interno e la cancellazione della sottoscrizione lo diminuisce di 1. Quando raggiunge lo 0, nessun evento viene inviato.

Ho messo a posto le stampanti. Ottenuta la riproduzione del problema quando sia l'EA che l'indicatore si trovano sullo stesso grafico. Ognuno di loro fa MarketBookAdd in OnInit e MarketBookRelease in OnDeinit. Così, dopo aver rimosso l'Expert Advisor dal grafico (una chiamata di MarketBookRelease), l'indicatore smette di ricevere la coppa (anche se in idea, la sua stessa chiamata di MarketBookAdd non è ancora cancellata). Al contrario, se cancelliamo l'indicatore, l'iscrizione si perde nell'Expert Advisor. Certo, lo rilevo già e mi iscrivo di nuovo, ma non dovrebbe funzionare così, imho.

L'evento BookEvent viene trasmesso. Leggete attentamente la descrizione di OnBookEvent qui.

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

Dopo aver iniziato a lavorare con il tumbler e aver aggiunto alcuni indicatori firmati a OnBookEvent, ho scoperto che alcuni di essi cadono silenziosamente, in particolare, 1 esperto e 1 indicatore su diversi simboli. Nessun errore nei log. Le citazioni continuavano. Altri simboli hanno continuato a lavorare. Dopo aver riavviato manualmente i programmi MQL inattivi, gli eventi della profondità del mercato hanno ripreso a funzionare.

Qualcuno ha osservato qualcosa di simile? Come proteggermi? Per ora, l'idea di guardare il timeout tra l'ultimo evento della tazza e i nuovi tick. Ma cosa fare se il timeout viene superato? È sufficiente chiamare nuovamente MarketBookAdd?

Leggi questo

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

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

Grazie ;-). Naturalmente ho letto la documentazione e il forum. Se c'è una risposta alla mia domanda, sarebbe molto gentile ad articolarla o evidenziarla qui.

In particolare, c'è una frase affascinante nella documentazione:

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

A parte il fatto che lascia indovinare se continuare o meno con l'analogia che "basta che un esperto si disiscriva dal ricevere un evento, anche tutti gli altri esperti smetteranno di riceverlo"? Non credo che possa esistere una cosa del genere, sarebbe (o è) un bug.

Motivazione: