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:

きっとこれがバグの原因なのでしょう。

開発者が修正しましたので、新しいビルドが出たら、その時に「あなたの」エラーを確認します。

テスト例は簡単で、1番目のExpert AdvisorでMarketBookAdd( x )を呼び出し、2番目のExpert AdvisorでMarketBookRelease( x )を呼び出す...というものです。でOnBookEvent( x ) イベントを待ち、1つ目のエキスパートで
 
A100:
チェックの例は簡単で、1番目のEAでMarketBookAdd( x )を呼び出し、2番目の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:

同じシンボルに書いたことを実行すると、当然、同じ端末でそのシンボルによってサブスクリプションが破壊されることになります

そして、これは正しいのです。

そして、次のようにします。1番目のEAでMarketBookAdd( x )を呼び出し、2番目のEAでMarketBookAdd( x )とMarketBookRelease( x )を呼び出す...。でOnBookEvent( x ) イベントを待ち、1つ目のエキスパートで
 
A100:
次に、1つ目のエキスパートでMarketBookAdd( x )を呼び出し、2つ目のエキスパートでMarketBookAdd( x )とMarketBookRelease( x )を呼び出す...というようにします。でOnBookEvent( x ) イベントを待ち、1つ目のエキスパートで

私のコードを使用すれば、購読に関する問題は発生しません。

 
prostotrader:

私のコードを使用すれば、問題なく購読できます。

明日、あなたのコードの魔力を確認します...その間に、あなたの意見を聞かせてください。ガラスを開く/閉じる 機能と、そのガラス上のイベントの購読/非購読の機能を組み合わせることができるのか、それとも分離すべきなのか。