对OnBookEvent的订阅有时会脱落--有这种情况吗?

 

在我开始使用滚揉机并添加了一些签署在OnBookEvent上的指标后,我发现其中一些指标悄悄地脱落了,特别是不同符号上的1个专家和1个指标。日志中没有错误。报价一直在进行。其他符号继续工作。在手动重新启动闲置的MQL-程序后,市场深度的事件又开始工作了。

有没有人观察到类似的情况?如何保护自己?目前,观察杯子的最后一个事件和新刻度之间的超时的想法。但是,如果超过了超时,该怎么办? 再次调用MarketBookAdd 就可以了吗?

 

以前它被称为 "僵尸",也许搜索一下仍能找到旧的主题。

这种情况发生在专家/指标的退订次数多于他们的订阅。

例如,有2位专家,每人都签了一次名。然后有一个被关闭了,并被取消了两次订阅。第二位一直被雇用的专家停止接受更新。

我已经看过好几次了。

在调整了专家后,问题消失了,一年多来没有再出现过。

 
Ilya Baranov:

以前它被称为 "僵尸",也许搜索一下仍能找到旧的主题。

当专家/指标员取消订阅的次数比他们注册的次数多时,就会发生这种情况。

严格说来,这并不合适。我在inite中做了一次订阅,在deinite中做了一次取消订阅。虽然我不能排除DeInit在某种程度上比OnInit被调用的次数多的可能性。

 
Stanislav Korotky:

严格说来,这并不合适。我在Init中做了一次订阅,在DeInit中取消了订阅。虽然我不能排除DeInit在某种程度上比OnInit被调用的次数多的可能性。

如果是关于指标的问题,请看这个 主题。

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

如果是关于指标的问题,可以看一下这个 主题。

是的,有这样一个话题,我甚至参与其中,但显然问题仍然存在。但在目前的情况下,有一个专家顾问也失去了订阅。

好,我们来跳手鼓舞。

 
Stanislav Korotky:

在我开始使用滚揉机并添加了一些签署在OnBookEvent上的指标后,我发现其中一些指标悄悄地脱落了,特别是不同符号上的1个专家和1个指标。日志中没有错误。报价一直在进行。其他符号继续工作。在手动重新启动闲置的MQL-程序后,市场深度的事件又开始工作了。

有没有人观察到类似的情况?如何保护自己?目前,观察杯子的最后一个事件和新刻度之间的超时的想法。但是,如果超过了超时,该怎么办呢? 再次调用MarketBookAdd就可以了吗?

有两种类型的开关,一种是按钮,一种是开关。前者发送一个脉冲并终止操作,后者涉及操作模式的改变。第一个例子是门铃,这是一个理想的事件。第二个例子是一个电灯开关--你按下它,它就会亮起来。你看,这并不是一个真正的事件,它是更多的东西。

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

开关有两种类型,按钮和开关。前者发送一个脉冲并终止操作,后者涉及操作模式的改变。第一个例子是门铃,这是最理想的事件。第二个例子是一个电灯开关--你按下它,它就会亮起来。你看,这并不是一个真正的事件,它是更多的东西。

不,我不知道。根据文档判断,订阅会增加内部计数器,而取消订阅则会减少1。一旦达到0--没有事件被发送出去。

我把版画放进去了。当EA和指标都在同一个图表上时,实现了问题的再现。他们每个人都在OnInit做MarketBookAdd,在OnDeinit做MarketBookRelease。因此,在我从图表中删除专家顾问(调用MarketBookRelease 一次)后,该指标停止获得杯子(尽管在想法中,它自己对MarketBookAdd的调用还没有被取消)。相反,如果我们删除该指标,专家顾问中的订阅就会丢失。当然,我检测到它并再次订阅,但它不应该像这样工作,我认为。

 
Stanislav Korotky:

不,我不知道。根据文档,订阅会增加内部计数器,取消订阅则会减少1。当它达到0时,没有事件被发送出去。

我已经把打印机放好了。当EA和指标都在同一个图表上时,实现了问题的再现。他们每个人都在OnInit做MarketBookAdd,在OnDeinit做MarketBookRelease。因此,在我把专家顾问从图表中删除后(调用 一次MarketBookRelease),该指标就不再得到杯子。相反,如果我删除该指标,它的订阅就会在专家顾问中丢失。当然,我检测到它并再次订阅,但它不应该以这种方式工作,我认为。

我已经说过了。我不会说一个字。

 
Stanislav Korotky:

不,我不知道。根据文档,订阅会增加内部计数器,取消订阅则会减少1。当它达到0时,没有事件被发送出去。

我已经把打印机放好了。当EA和指标都在同一个图表上时,实现了问题的再现。他们每个人都在OnInit做MarketBookAdd,在OnDeinit做MarketBookRelease。因此,在我从图表中删除专家顾问(调用MarketBookRelease 一次)后,该指标停止获得杯子(尽管在想法中,它自己对MarketBookAdd的调用还没有被取消)。相反,如果我们删除该指标,专家顾问中的订阅就会丢失。当然,我已经检测到它并再次订阅,但它不应该这样工作,我认为。

BookEvent事件被广播。仔细阅读这里 的OnBookEvent的描述。

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

在我开始使用滚揉机并添加了一些签署在OnBookEvent上的指标后,我发现其中一些指标悄悄地脱落了,特别是不同符号上的1个专家和1个指标。日志中没有错误。报价一直在进行。其他符号继续工作。在手动重新启动闲置的MQL-程序后,市场深度的事件又开始工作了。

有没有人观察到类似的情况?如何保护自己?目前,观察杯子的最后一个事件和新刻度之间的超时的想法。但是,如果超过了超时,该怎么办呢? 再次调用MarketBookAdd就可以了吗?

阅读此文

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

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

谢谢;-)。当然,我已经阅读了文件和论坛。如果对我的问题有答案,请在此阐明或强调它,这将是非常有益的。

特别是,在文件中,有一个迷人的短语。

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

除了让人猜测是否要继续类比 "只要有一个专家退订接收事件,所有其他专家也会停止接收"?我认为不可能有这样的事情,这将是(或者说是)一个错误。