Обрабатывается ли событие OnBookEvent в тестере.

 
Собственно вопрос в заголовке. Подскажите как можно протестировать советник обрабатывающий событие OnBookEvent ? В тестере только тики на сколько я понимаю и озаглавленное событие вовсе не тестируется. Так же нет не какого намека на стакан цен.
 

Админы, Модераторы и Эксперты!

У меня схожий вопрос: Как простестировать советник написанный с использованием OnBookEvent?

Ответьте, пожалуйста, или дайте ссылку если это уже обсуждалось.

 

А что, нельзя самому проверить?

//+------------------------------------------------------------------+
//|                                                          aaa.mq5 |
//|                                      Copyright 2020 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    is_book = MarketBookAdd(Symbol());
    if(is_book == false)
    {
      return(INIT_FAILED);
    }
//---
   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())
    {
      Print(__FUNCTION__, ": It's work!");
    }  
  }
 
Если ничего не поменялось в последних билдах, то события по order book в тестере не транслируются. Нужно либо самостоятельно их сохранять в онлайне и потом "воспроизводить" в тестере, либо пользоваться готовыми продуктами, которые это делают.
 
prostotrader:

А что, нельзя самому проверить?

Я рад, что вы такой умный и сообразительный. Однако здесь не все обладают одинаковым уровнем знания языка и возможностей терминала. Мой код, как в прочем и ваш, не зашёл в OnBookEvent во время тестирования, я подумал, что где-то мог накосячить вот и задал вопрос.

 
Stanislav Korotky:
Если ничего не поменялось в последних билдах, то события по order book в тестере не транслируются. Нужно либо самостоятельно их сохранять в онлайне и потом "воспроизводить" в тестере, либо пользоваться готовыми продуктами, которые это делают.

Станислав, спасибо за совет! Могли бы вы подсказать статью о том как самостоятельно воспроизводить события по order book в тестере, или дать ссылку на готовый продукт? Спасибо

 
iiivasyaiii:

Станислав, спасибо за совет! Могли бы вы подсказать статью о том как самостоятельно воспроизводить события по order book в тестере, или дать ссылку на готовый продукт? Спасибо

Что взамен :)?
Есть решение с крайне эффективным использованием оперативки, использует dll, исходник, можно внедрять в свой проект.
 
iiivasyaiii:

Станислав, спасибо за совет! Могли бы вы подсказать статью о том как самостоятельно воспроизводить события по order book в тестере, или дать ссылку на готовый продукт? Спасибо

Ссылки на продукты здесь давать запрещено. Вы можете посмотреть у меня в профиле.

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

 

Моделирование стакана в тестере можно сделать с применением базы данных.

1. Собираем срезы стакана в базу данных. Каждому срезу назначаем уникальную метку времени, соответствующую времени последнего тика.
2. При моделировании в тестере стратегий получаем из базы данных срез стакана, соответствующий времени тика.

Во вложении пример сборщика срезов стакана, советник моделирующий стакан в тестере и база данных по фьючерсу VTBR-6.20 за 9 июня 2020 г.
(Для тестирования советника или для сбора данных по стакану необходимо положить файл базы данных в общую папку).

Недостатки предложенного варианта: Собираются не 100% срезов стакана, а только те, которые соответствуют самому последнему уникальному тику. Сбор идет по событию OnTick.
Преимущества варианта: Простой и быстрый способ сбора и получения срезов стакана в тестере.

Можно усложнить сбор. Собирать все срезы стакана по событию  OnBookEvent. Но в этом случае одному событию OnTick, моделируемому в тестере, может соответствовать несколько срезов стакана.
Нужно будет выбирать какой срез стакана выводить.

Самый сложный способ - это синхронизировать оба потока, поток сделок (событий OnTick) и поток срезов стакана (событий OnBokkEvent) через событие OnTimer.

Файлы:
test_orderbook.zip  5013 kb