A assinatura do OnBookEvent às vezes cai - existe algo assim?

 

Depois que comecei a trabalhar com o secador e acrescentei alguns indicadores assinados à OnBookEvent, descobri que alguns deles caem silenciosamente, em particular, 1 especialista e 1 indicador em símbolos diferentes. Sem erros nos registros. As citações continuaram. Outros símbolos continuaram a funcionar. Após reiniciar manualmente os programas de MQL ociosos, os eventos da profundidade do mercado começaram a funcionar novamente.

Alguém observou algo semelhante? Como me proteger? Por enquanto, a idéia de observar o intervalo entre o último evento da taça e os novos carrapatos. Mas o que fazer se o timeout for ultrapassado? É suficiente chamarMarketBookAdd novamente?

 

Antes era chamado de "zumbi", talvez uma busca ainda encontre fios antigos.

Isto acontece quando os especialistas/indicadores cancelam a inscrição na tumblr mais vezes do que assinam.

Por exemplo, havia 2 especialistas, cada um se inscreveu uma vez. Em seguida, um foi fechado e cancelado duas vezes. O segundo especialista que permaneceu empregado deixa de receber atualizações.

Eu já vi isso várias vezes.

Depois de ajustar os especialistas, o problema desapareceu e não se repetiu por mais de um ano.

 
Ilya Baranov:

Antes era chamado de "zumbi", talvez uma busca ainda encontre fios antigos.

Acontece quando os especialistas/indicadores cancelam a inscrição de um tumblr mais vezes do que se inscrevem.

Estritamente falando, não se encaixa. Eu tenho uma assinatura feita uma vez inite e uma anulação de assinatura feita em deinite. Embora eu não possa descartar a possibilidade de que o DeInit seja de alguma forma chamado mais vezes do que o OnInit.

 
Stanislav Korotky:

Estritamente falando, não se encaixa. Eu tenho uma assinatura feita uma vez no Init e cancelo a inscrição no DeInit. Embora eu não possa descartar a possibilidade de que o DeInit seja de alguma forma chamado mais vezes do que o OnInit.

Se se trata de indicadores, verifique esta linha.

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

Se for sobre os indicadores, dê uma olhada nesta linha.

Sim, havia tal tópico, eu até participei dele, mas aparentemente o problema permanece. Mas no caso atual, um Consultor Especialista também perdeu sua assinatura.

OK, vamos fazer a dança do tamborim.

 
Stanislav Korotky:

Depois que comecei a trabalhar com o secador e acrescentei alguns indicadores assinados à OnBookEvent, descobri que alguns deles caem silenciosamente, em particular, 1 especialista e 1 indicador em símbolos diferentes. Sem erros nos registros. As citações continuaram. Outros símbolos continuaram a funcionar. Após reiniciar manualmente os programas de MQL ociosos, os eventos da profundidade do mercado começaram a funcionar novamente.

Alguém observou algo semelhante? Como me proteger? Por enquanto, a idéia de observar o intervalo entre o último evento da taça e os novos carrapatos. Mas o que fazer se o timeout for ultrapassado? É suficiente chamar MarketBookAdd novamente?

Há dois tipos de interruptores,- um botão e um interruptor. O primeiro envia um pulso e encerra a operação, o segundo envolve uma mudança no modo de operação. Um exemplo do primeiro é uma campainha, que é o evento ideal. Um exemplo do segundo é um interruptor de luz - você o pressiona e ele se acende. Veja, isto não é realmente um evento, mas algo mais.

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

Os interruptores são de dois tipos, botões de pressão e interruptores. O primeiro envia um pulso e termina a operação, o segundo envolve uma mudança do modo de operação. Um exemplo do primeiro é a campainha da porta, que é o evento ideal. Um exemplo do segundo é um interruptor de luz - você o pressiona e ele se acende. Veja, não é realmente um evento, é algo mais.

Não, eu não tenho. A julgar pela documentação, a assinatura aumenta o contador interno, enquanto que a desinscrição diminui em 1. Uma vez atingido o valor 0 - nenhum evento é enviado.

Eu coloquei as impressões digitais. Reprodução conseguida do problema quando tanto a EA como o indicador se encontram no mesmo gráfico. Cada um deles faz MarketBookAdd no OnInit e MarketBookRelease no OnDeinit. Assim, depois de remover o Expert Advisor do gráfico (uma chamada do MarketBookRelease), o indicador deixa de receber a taça (embora, na idéia, sua própria chamada do MarketBookAdd ainda não tenha sido cancelada). Pelo contrário, se apagarmos o indicador, a assinatura é perdida no Expert Advisor. É claro, eu o detecto e subscrevo novamente, mas não deveria funcionar assim, imho.

 
Stanislav Korotky:

Não, eu não tenho. De acordo com a documentação, a assinatura aumenta o contador interno e a desinserção diminui em 1. Quando chega a 0, nenhum evento é enviado.

Coloquei as impressoras no lugar. Conseguiu reproduzir o problema quando tanto a EA como o indicador estão no mesmo gráfico. Cada um deles faz MarketBookAdd no OnInit e MarketBookRelease no OnDeinit. Assim, depois de remover o Expert Advisor do gráfico (uma chamada do MarketBookRelease), o indicador deixa de receber o copo. Pelo contrário, se eu remover o indicador, sua assinatura é perdida no Expert Advisor. Claro, eu o detecto e subscrevo novamente, mas não deve funcionar dessa forma, imho.

Eu já disse tudo. Não direi uma palavra.

 
Stanislav Korotky:

Não, eu não tenho. De acordo com a documentação, a assinatura aumenta o contador interno e a desinserção diminui em 1. Quando chega a 0, nenhum evento é enviado.

Coloquei as impressoras no lugar. Conseguiu reproduzir o problema quando tanto a EA como o indicador estão no mesmo gráfico. Cada um deles faz MarketBookAdd no OnInit e MarketBookRelease no OnDeinit. Assim, depois de remover o Expert Advisor do gráfico (uma chamada do MarketBookRelease), o indicador deixa de receber a taça (embora, na idéia, sua própria chamada do MarketBookAdd ainda não tenha sido cancelada). Pelo contrário, se apagarmos o indicador, a assinatura é perdida no Expert Advisor. É claro que já o detectei e subscrevo novamente, mas não deveria funcionar desta forma, imho.

O evento BookEvent é transmitido. Leia a descrição do OnBookEvent aqui cuidadosamente.

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

Depois que comecei a trabalhar com o secador e acrescentei alguns indicadores assinados à OnBookEvent, descobri que alguns deles caem silenciosamente, em particular, 1 especialista e 1 indicador em símbolos diferentes. Sem erros nos registros. As citações continuaram. Outros símbolos continuaram a funcionar. Após reiniciar manualmente os programas de MQL ociosos, os eventos da profundidade do mercado começaram a funcionar novamente.

Alguém observou algo semelhante? Como me proteger? Por enquanto, a idéia de observar o intervalo entre o último evento da taça e os novos carrapatos. Mas o que fazer se o timeout for ultrapassado? É suficiente chamar MarketBookAdd novamente?

Leia isto

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

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

Obrigado ;-). É claro que eu li a documentação e o fórum. Se houver uma resposta à minha pergunta, seria muito gentil articulá-la ou destacá-la aqui.

Em particular, há uma frase fascinante na documentação:

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

Exceto que se deixa uma suposição para continuar ou não com a analogia de que "o suficiente para um especialista cancelar a inscrição de receber um evento, todos os outros especialistas também deixarão de recebê-lo"? Não creio que possa haver tal coisa, seria (ou é) um bicho.