- Код: выделить все
//+------------------------------------------------------------------+
//| Book.mq5 |
//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
MarketBookAdd("EURUSD");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
MarketBookRelease("EURUSD");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| BookEvent function |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
//---
MqlBookInfo bk[];
bool res=MarketBookGet(symbol,bk);
if(res)
{
int sz=ArraySize(bk);
for(int i=0;i<sz;i++)
Print("Цена ",bk[i].price," Объем ",bk[i].volume," Тип заявки ",bk[i].type);
}
}
//+------------------------------------------------------------------+
Первое что необходимо сделать это подписаться на стакан по конкретному символу. Делается это при старте советника функций MarketBookAdd("EURUSD").
Далее при создании советника необходимо добавить событие OnBookEvent. Это событие наступает при изменении в стакане. В него передается символ для которого произошли изменения в стакане.
MqlBookInfo bk[] объявляем массив особых структур. В него будем получать данные стакана. Подробности о структуре в справке.
bool res=MarketBookGet(symbol,bk); получаем данные стакана. Функция возвращает истину в случае успеха.
Далее в цикле выводим данные стакана на вкладку терминала Эксперты Print("Цена ",bk[i].price," Объем ",bk[i].volume," Тип заявки ",bk[i].type);
И в завершении отписываемся от стакана MarketBookRelease("EURUSD");
Как видите все довольно просто. Жду ваших вопросов.