Для биржевых инструментов
доступно окно "Очереди заявок", в котором можно посмотреть текущие
заявки на покупку и продажу. Для каждой заявки указано желаемое
направление торговой операции, требуемый объем и запрашиваемая цена.
Для получения информации о
текущем состоянии стакана цен средствами языка MQL5 предназначена
функция MarketBookGet(),
которая помещает "снимок стакана" в массив структур MqlBookInfo.
Каждый элемент этого массива в поле type содержит
информацию о направлении заявки – это значение из перечисления
ENUM_BOOK_TYPE.
ENUM_BOOK_TYPE
Идентификатор
Описание
BOOK_TYPE_BUY
Заявка
на покупку
BOOK_TYPE_SELL
Заявка
на продажу
Смотри также
Поясняю в чем вопрос
Вот небольшой пример (два кажется правильных варианта), но это только кажется.
Первый из них работает, а второй глючит..
1. работает, поскольку ArrayMarketBookInfo[i].type и BOOK_TYPE_SELL = 2
for(i=0;i<SizeBook;i++)
{
if(ArrayMarketBookInfo[i].type==BOOK_TYPE_SELL)
//Подсчет даных по коротким позициям
{
}
else//Подсчет данных по длинным позициям
{
}
}
2. не работает, поскольку ArrayMarketBookInfo[i].type равно 1, а как я понимаю BOOK_TYPE_BUY = 0
for(i=0;i<SizeBook;i++)
{
if(ArrayMarketBookInfo[i].type==BOOK_TYPE_BUY)
//Подсчет даных по коротким позициям
{
}
else//Подсчет данных по длинным позициям
{
}
}
Для биржевых инструментов
доступно окно "Очереди заявок", в котором можно посмотреть текущие
заявки на покупку и продажу. Для каждой заявки указано желаемое
направление торговой операции, требуемый объем и запрашиваемая цена.
Для получения информации о
текущем состоянии стакана цен средствами языка MQL5 предназначена
функция MarketBookGet(),
которая помещает "снимок стакана" в массив структур MqlBookInfo.
Каждый элемент этого массива в поле type содержит
информацию о направлении заявки – это значение из перечисления
ENUM_BOOK_TYPE.
ENUM_BOOK_TYPE
Идентификатор
Описание
BOOK_TYPE_BUY
Заявка
на покупку
BOOK_TYPE_SELL
Заявка
на продажу
Смотри также
Давно уже говорю, что в справочнике нужно приводить числовые коды для
таких вещей. как это было в справке по MQL4...
Вот небольшой пример (два кажется правильных варианта), но это только кажется.
Первый из них работает, а второй глючит..
1. работает, поскольку ArrayMarketBookInfo[i].type и BOOK_TYPE_SELL = 2
2. не работает, поскольку ArrayMarketBookInfo[i].type равно 1, а как я понимаю BOOK_TYPE_BUY = 0
Приводите, пожалуйста, код, который можно понять. Вы показали кусок кода, из которого не очевидно, что проблема в языке MQL5, а не в Вашем коде. Мы же не можем догадываться, что Вы имеете в виду.
Rosh: Приводите, пожалуйста, код, который можно понять. Вы показали кусок кода, из которого не очевидно, что проблема в языке MQL5, а не в Вашем коде. Мы же не можем догадываться, что Вы имеете в виду.
А что тут догадываться, все просто и очевидно (сам язык тут не причем, все дело в цифровом представлении идентификатора BOOK_TYPE_BUY).
По логике вещей BOOK_TYPE_BUY =1, а BOOK_TYPE_SELL = 2. И MarketBookGet(symbol,ArrayMarketBookInfo) подразумевает имено такой итог.
Но вот на практике BOOK_TYPE_BUY = 0 (ошибочно, по видимому). MarketBookGet в ArrayMarketBookInfo (которое по сути является массивом с типом MqlBookInfo) возвращает 1 (для Buy)и 2 (для Sell).
При этом поскольку BOOK_TYPE_SELL = 2 все работает, а вот с BOOK_TYPE_BUY с проблемка (поскольку возвращается 1, а сам BOOK_TYPE_BUY = 0).
Во втором случае на данный момент в ArrayMarketBookInfo (читай MqlBookInfo) тип никогда не будет равен MqlBookInfo идетификатору BOOK_TYPE_BUY (поскольку он ошибочно принимается за 0), в итоге все будет обработано как короткие позиции.
Вот попробуйте получить нормальный результат вот от этого кода... :)
//Пытаемся загрцзить данные стакана цен
Res = MarketBookGet(symbol,ArrayMarketBookInfo);
if(Res)
//Данные успешно получены
{
//Определяем количество записей в стакане цен
SizeBook=ArraySize(ArrayMarketBookInfo);
for(i=0;i<SizeBook;i++)
{
if(ArrayMarketBookInfo[i].type==BOOK_TYPE_BUY)
//Подсчет данных по длинным позициям
{
//Этот блок не выполнится при любом исходе, поскольку 1(как MqlBookInfo[i].type) != 0 (как BUY)
}
else//Подсчет данных по коротким позициям
{
//В этом блоке обработается весь стакан (поскольку и BOOK_TYPE_BUY и BOOK_TYPE_SELL != 1)
}
}
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Естественно, при проверке чтения выяснилось, что читается всё криво :)
Выкладываю более-менее рабочий вариант.
Дык давно появился, я еще с 7 чтсла прошу и тут его организовать (если мона). А в ответ тишина...
Ну раз разработчики не отслеживают изменения в заявке придется тут повториться:
Я что-то в толк не возьму, почему BOOK_TYPE_BUY = 0, а не 1?
PS
Хорошо, что еще опыт позволил быстро сообразить где собака убита... :)
Давно говорю, что в справке нужно и числовые коды опубликовывать, тогда всем проще будет.
Vladimir:
А вот вы уверены в том что BOOK_TYPE_BUY = 1, а не скажем 0?
Не ясно о чем вопрос - https://www.mql5.com/ru/docs/constants/tradingconstants/enum_book_type
Виды заявок в стакане цен
Для биржевых инструментов доступно окно "Очереди заявок", в котором можно посмотреть текущие заявки на покупку и продажу. Для каждой заявки указано желаемое направление торговой операции, требуемый объем и запрашиваемая цена.
Для получения информации о текущем состоянии стакана цен средствами языка MQL5 предназначена функция MarketBookGet(), которая помещает "снимок стакана" в массив структур MqlBookInfo. Каждый элемент этого массива в поле type содержит информацию о направлении заявки – это значение из перечисления ENUM_BOOK_TYPE.
ENUM_BOOK_TYPE
Идентификатор
Описание
BOOK_TYPE_BUY
Заявка на покупку
BOOK_TYPE_SELL
Заявка на продажу
Смотри также
Поясняю в чем вопрос
Вот небольшой пример (два кажется правильных варианта), но это только кажется.
Первый из них работает, а второй глючит..
1. работает, поскольку ArrayMarketBookInfo[i].type и BOOK_TYPE_SELL = 2
2. не работает, поскольку ArrayMarketBookInfo[i].type равно 1, а как я понимаю BOOK_TYPE_BUY = 0
Vladimir:
А вот вы уверены в том что BOOK_TYPE_BUY = 1, а не скажем 0?
Не ясно о чем вопрос - https://www.mql5.com/ru/docs/constants/tradingconstants/enum_book_type
Виды заявок в стакане цен
Для биржевых инструментов доступно окно "Очереди заявок", в котором можно посмотреть текущие заявки на покупку и продажу. Для каждой заявки указано желаемое направление торговой операции, требуемый объем и запрашиваемая цена.
Для получения информации о текущем состоянии стакана цен средствами языка MQL5 предназначена функция MarketBookGet(), которая помещает "снимок стакана" в массив структур MqlBookInfo. Каждый элемент этого массива в поле type содержит информацию о направлении заявки – это значение из перечисления ENUM_BOOK_TYPE.
ENUM_BOOK_TYPE
Идентификатор
Описание
BOOK_TYPE_BUY
Заявка на покупку
BOOK_TYPE_SELL
Заявка на продажу
Смотри также
Давно уже говорю, что в справочнике нужно приводить числовые коды для таких вещей. как это было в справке по MQL4...
Поясняю в чем вопрос
Вот небольшой пример (два кажется правильных варианта), но это только кажется.
Первый из них работает, а второй глючит..
1. работает, поскольку ArrayMarketBookInfo[i].type и BOOK_TYPE_SELL = 2
2. не работает, поскольку ArrayMarketBookInfo[i].type равно 1, а как я понимаю BOOK_TYPE_BUY = 0
Приводите, пожалуйста, код, который можно понять. Вы показали кусок кода, из которого не очевидно, что проблема в языке MQL5, а не в Вашем коде. Мы же не можем догадываться, что Вы имеете в виду.
А что тут догадываться, все просто и очевидно (сам язык тут не причем, все дело в цифровом представлении идентификатора BOOK_TYPE_BUY).
По логике вещей BOOK_TYPE_BUY =1, а BOOK_TYPE_SELL = 2. И MarketBookGet(symbol,ArrayMarketBookInfo) подразумевает имено такой итог.
Но вот на практике BOOK_TYPE_BUY = 0 (ошибочно, по видимому). MarketBookGet в ArrayMarketBookInfo (которое по сути является массивом с типом MqlBookInfo) возвращает 1 (для Buy)и 2 (для Sell).
При этом поскольку BOOK_TYPE_SELL = 2 все работает, а вот с BOOK_TYPE_BUY с проблемка (поскольку возвращается 1, а сам BOOK_TYPE_BUY = 0).
Во втором случае на данный момент в ArrayMarketBookInfo (читай MqlBookInfo) тип никогда не будет равен MqlBookInfo идетификатору BOOK_TYPE_BUY (поскольку он ошибочно принимается за 0), в итоге все будет обработано как короткие позиции.
Вот попробуйте получить нормальный результат вот от этого кода... :)
Естественно, при проверке чтения выяснилось, что читается всё криво :)
Разработчикам.
Можно будет снова подключить стакан, месяца на два-три?
Желательно по всем символам которые торгуются на чемпионате...