Подписка на OnBookEvent иногда отваливается - есть такое? - страница 4

 
Stanislav Korotky:

Между прочим, все прочие типы событий - как раз широковещательные, только их не надо ни подключать, ни отключать - все связывается при инициализации скрипта автоматически.

Ничего подобного - в OnChartEvent поступают как широковещательные события - так и обычные

А если обычные можно было сделать там - значит можно и здесь

 
A100:

Ничего подобного - в OnChartEvent поступают как широковещательные события - так и обычные

А если обычные можно было сделать там - значит можно и здесь

Ну а другие события OnTick или OnCalculate? Против их широковещательности есть возражения? OnChartEvent тоже используется широковещательно, несмотря на довески. Если претензия к слову "все", я заменю на "многие". Суть в том, что все варианты до сих пор исключали возможность отключения по чужой инициативе.

Посмотрим, будет ли исправление.

 
prostotrader:

Хорошая новость

Это про какую ошибку? Точно такой же пост вижу про инвалидную транзакцию.

 
prostotrader:

У Вас "отваливается" подписка именно из-за ошибки invalid book transaction

Отваливается из-за косвенного вызова MarketBookRelease - странно что Вы этого до сих пор не поняли 
 
prostotrader:
Я не вызываю MarketBookRelease но когда в журнале появляется invalid book transaction

OnBookEvent перестаёт наботать (можно сказать подписка "отваливается") 

Это совсем другая причина возникновения ошибки нежели обсуждаемая в этой ветке. Если одну причину устранить, то другая сама собой не исчезнет

Так же как и здесь https://www.mql5.com/ru/forum/1111/page2237#comment_8159123 ошибки по форме совпадали, но способ устранения одной не подошёл для другой - значит причины разные

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

Уверен, что причина именно в этой ошибке.

Разработчики её исправили и когда выйдет новый билд, - тогда и проверим "Вашу" ошибку.

Проверочный пример простой: вызвать в 1-ом эксперте MarketBookAdd( x ), далее вызвать во 2-ом эксперте MarketBookRelease( x )... и далее ждать в 1-ом эксперте события OnBookEvent( x )
 
A100:
Проверочный пример простой: вызвать в 1-ом советнике 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-ом эксперте MarketBookAdd( x ), далее вызвать во 2-ом эксперте MarketBookAdd( x ) и MarketBookRelease( x )... и далее ждать в 1-ом эксперте события OnBookEvent( x )
 
A100:
Тогда так: вызвать в 1-ом эксперте MarketBookAdd( x ), далее вызвать во 2-ом эксперте MarketBookAdd( x ) и MarketBookRelease( x )... и далее ждать в 1-ом эксперте события OnBookEvent( x )

Воспользуйтесь моим кодом и у Вас не будет проблем с подпиской.

 
prostotrader:

Воспользуйтесь моим кодом и у Вас не будет проблем с подпиской.

Завтра проверю волшебную силу Вашего кода... а пока хотелось бы услышать Ваше мнение по поводу того... может ли функция открытия/закрытия стакана быть совмещена с функцией подписки/отписки на/от события по этому стакану или же их следует разделить