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

 
Stanislav Korotky:

顺便说一下,所有其他 类型的事件 都是广播事件,只是它们不需要连接或断开--一切都在脚本初始化时自动沟通。

OnChartEvent有广播事件 - 以及普通事件。

如果你能在那里做普通的 - 你也可以在这里做。

 
A100:

完全没有--OnChartEvent接收广播事件--以及普通事件。

如果你能在那里做广播,你也可以在这里做广播。

那么其他事件OnTick或OnCalculate呢?对他们的广播有反对意见吗?OnChartEvent 也是广播式的,尽管有附件。如果反对的是 "所有 "这个词,我就用 "许多 "来代替。问题是,到目前为止,所有的选择都排除了别人禁用的可能性。

我们将看看是否会有修正。

 
prostotrader:

好消息。

那是关于哪个错误?我看到关于残疾交易的帖子完全一样。

 
prostotrader:

由于无效的图书交易 错误,您的订阅失败了

失败的原因是间接调用MarketBookRelease--奇怪的是,你现在还没有发现这一点。
 
prostotrader:
我没有调用MarketBookRelease,但当无效的图书交易出现在日志中时

OnBookEvent停止拨号(你可以说订阅 "脱落")。

这是一个完全不同的错误原因,与本主题中讨论的错误原因不同。如果你消除了一个原因,另一个原因就不会自己消失。

就像这里https://www.mql5.com/ru/forum/1111/page2237#comment_8159123,错误在形式上是一样的,但解决一个问题的方式不适合另一个问题--所以原因是不同的。

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.07.23
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
prostotrader:

我确信这就是出现错误的原因。

开发人员已经修复了它,当新的版本出来时,我们将检查 "你的 "错误。

测试的例子很简单:在第一个专家顾问中调用MarketBookAdd( x ),然后在第二个专家顾问中调用MarketBookRelease( x )...。然后在第一个专家中等待OnBookEvent( x ) 事件。
 
A100:
检查的例子很简单:在第一个EA中调用MarketBookAdd( x ),然后在第二个EA中调用MarketBookRelease( x )...。并等待1个事件

如果你在同一个符号上做了你所写的事情,自然订阅的内容就会在同一个终端上被那个符号所破坏!

而这是正确的。

由以下人员添加

你只需要正确使用订阅。

//+------------------------------------------------------------------+
//|                                                        Books.mq5 |
//|                                      Copyright 2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    is_book = false;
//--- Add books
    if(!MarketBookAdd(Symbol()))
    {
      MessageBox("Не добавлен стакан фьючерса!", "Ошибка", MB_OK | MB_ICONHAND);
      return(INIT_FAILED);
    } 
    else is_book = true;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
    if(is_book = true) MarketBookRelease(Symbol());
   
  }

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
   if(symbol == Symbol())
   {
     //Plece you code here
   }
   
  }
//+------------------------------------------------------------------+
 
prostotrader:

如果你在同一个符号上做了你所写的事情,自然订阅的内容就会在同一个终端上被那个符号所破坏!

而这是正确的。

然后做以下工作:在第一个EA中调用MarketBookAdd( x ),然后在第二个EA中调用MarketBookAdd( x )和MarketBookRelease( x )。然后在第一个专家中等待OnBookEvent( x ) 事件。
 
A100:
然后做以下工作:在第一个专家中调用MarketBookAdd( x ),然后在第二个专家中调用MarketBookAdd( x )和MarketBookRelease( x )。然后在第一个专家中等待OnBookEvent( x ) 事件。

使用我的代码,你就不会有订阅的问题。

 
prostotrader:

使用我的代码,你的订阅就不会有问题。

明天我将检查你的代码的魔力......与此同时,我想听听你的意见打开/关闭玻璃 的功能能否与订阅/取消订阅该玻璃上的事件的功能相结合,还是应该将它们分开。