Обсуждение статьи "Биржевые данные без посредников: подключаем MetaTrader 5 к MOEX через ISS API"

 

Опубликована статья Биржевые данные без посредников: подключаем MetaTrader 5 к MOEX через ISS API:

В статье предложено решение для интеграции MetaTrader 5 с веб-сервисом MOEX ISS. Прилагаются утилиты для автоматической генерации исходных кодов на основе справочника API и индекса основных элементов сервиса.

Предлагаю воспользоваться открытыми веб-сервисами MOEX, которые станет легко... или, по крайней мере, не так уж и сложно... интегрировать с терминалом после прочтения данной статьи. В ней речь пойдет о самом простом и доступном бесплатно сервисе ISS — Информационно-статистическом сервере Московской Биржи. Говоря научным языком — это связка интернет-протокола HTTP и технологии REST-сервиса, а по-простому — то, что мы можем запросить в виде удобочитаемых веб-страниц из обычного браузера или через специально написанную программу для скачивания и анализа данных других форматов, более удобных для программ, например, xml, csv, json.

Биржа предоставляет и более продвинутые, но потому платные, сервисы, построенные по аналогичным техническим принципам. Поэтому потренировавшись на ISS, желающие смогут усовершенствовать текущее решение для выполнения расширенного круга задач.

Если описывать возможности ISS в общих чертах, то он позволяет получать списки и спецификации инструментов, котировки, тики/сделки (за текущий день, история — по подписке), статистические данные (например, по оборотам и открытому интересу), текущие стаканы заявок (по подписке) и многое другое. Бесплатные данные передаются с задержкой 15 минут, но для анализа и выявления внутридневных торговых сигналов с частотой, ниже чем в стратегиях HFT, этого вполне достаточно.

Автор: Stanislav Korotky

 
Мелкие исправления и улучшения.
Файлы:
moexlink.mqh  6 kb
moex2mql5.mqh  19 kb
moexcore.mqh  10 kb
 

спс за статью очень информативно и познавательно - еще читаю...

перед работой всю не успел прочитать и усвоить... продолжу  - извините если эта тема далее рассматривается - получается торговать без брокера чтоли на МТ 5 с регистрацией на МОЕСК  - т.е. в практическом применении брокера же подключать надо?

Как будет выглядеть организационная связка биржа - брокер - МТ 5  - клиент? 

Это в контексте и быстрого доступа к данным биржи и торговли на ней через МТ 5.

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

Т.е. как торговать на ней через сервисы API, как с брокером взаимодействовать?

Может вообще эту тему развернуть в отдельную статью, как раз с доуточнением и разъяснением данных по опубликованной статье?  )

Нужна помощь профессионального программиста
Нужна помощь профессионального программиста
  • 2025.01.26
  • prostotrader
  • www.mql5.com
Эксперты Форекс, торговые роботы и советники: Нужна помощь профессионального программиста
 
Roman Shiredchenko #:

спс за статью очень информативно и познавательно - еще читаю...

перед работой всю не успел прочитать и усвоить... продолжу  - извините если эта тема далее рассматривается - получается торговать без брокера чтоли на МТ 5 с регистрацией на МОЕСК  - т.е. в практическом применении брокера же подключать надо?

Как будет выглядеть организационная связка биржа - брокер - МТ 5  - клиент? 

Это в контексте и быстрого доступа к данным биржи и торговли на ней через МТ 5.

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

Т.е. как торговать на ней через сервисы API, как с брокером взаимодействовать?

Может вообще эту тему развернуть в отдельную статью, как раз с доуточнением и разъяснением данных по опубликованной статье?  )

Конкретно через ISS API торговать не предусмотрено. В начале статьи перечислены некоторые (но не все) протоколы, которые биржа предлагает для торговли - разумеется, не бесплатно. Про их особенности можно почитать на сайте самой биржи. Их можно подключить к МТ5 разными способами - это отдельная большая работа. Полагаю такого рода статью потенциально может написать кто-то, кто биржевым программированием уже занялся, я пока остановился на ISS.

Если нужно что-то близкое к HFT, то, вероятно, лучше действительно пилить какую-то свою программулину (хотя бы библиотеку), потому что событийная модель МТ5 не позволяет получать данные в реальном времени (то есть в виде "пуша" по инициативе биржи, а не зацикленного "пула" от МТ5, но вроде я где-то видел API биржи на веб-сокетах - не вдавался в подробности).

Предполагаемый способ применения текущей связки - обработка данных биржи в МТ5 с помощью имеющихся индюков и отбраковка стратегий/оптимизация экспертов на кастом-символах. На основе этой инфы можно торговать в терминалах других брокеров.

Иными словами - брокер или подключение к бирже по другим протоколам (API) необходимо для торговли.

Самый простой вариант - инструменты биржи в МТ5 от брокера, но выбора тут нет (сейчас).
 

Небольшой нюанс, опущенный в статье.

Если серверное время вашего МТ5 отличается от московского и предполагается совместно анализировать данные с биржи и от вашего брокера, то все значения дата-время от биржи (в котировках, тиках и т.д.) нужно корректировать на разницу часовых поясов. Например, для центральноевропейского сервера при текущем зимнем времени нужно вычитать 1 час из получаемого времени с биржи.

 
Stanislav Korotky #:

Конкретно через ISS API торговать не предусмотрено. В начале статьи перечислены некоторые (но не все) протоколы, которые биржа предлагает для торговли - разумеется, не бесплатно. Про их особенности можно почитать на сайте самой биржи. Их можно подключить к МТ5 разными способами - это отдельная большая работа. Полагаю такого рода статью потенциально может написать кто-то, кто биржевым программированием уже занялся, я пока остановился на ISS.

Если нужно что-то близкое к HFT, то, вероятно, лучше действительно пилить какую-то свою программулину (хотя бы библиотеку), потому что событийная модель МТ5 не позволяет получать данные в реальном времени (то есть в виде "пуша" по инициативе биржи, а не зацикленного "пула" от МТ5, но вроде я где-то видел API биржи на веб-сокетах - не вдавался в подробности).

Предполагаемый способ применения текущей связки - обработка данных биржи в МТ5 с помощью имеющихся индюков и отбраковка стратегий/оптимизация экспертов на кастом-символах. На основе этой инфы можно торговать в терминалах других брокеров.

Иными словами - брокер или подключение к бирже по другим протоколам (API) необходимо для торговли.

Самый простой вариант - инструменты биржи в МТ5 от брокера, но выбора тут нет (сейчас).

Ок. Спс за разьяснения.
 
Мелкое исправление в ToyJson2.mqh: даты без времени распознавались и затем форматировались как числа, т.е. без кавычек.
Файлы:
toyjson2.mqh  36 kb
 
 
Новая версия toyjson3.mqh, в которой уменьшено потребление временной памяти во время парсинга огромных json-файлов.
Файлы:
toyjson3.mqh  39 kb
 

Станислав, спасибо за огромную проделанную работу. Тот редкий случай, когда статейный материал носит хрестоматийный характер... есть вопрос такого плана. В файле moexindex.mqh в определении перечисления MOEX_SECURITYTYPES вижу такое:



Т.е. к примеру именованная константа определена как currency·gold_metal. Наверное корректная запись могла быть такой currency_gold_metal. 

Ну и соот-но новый компилятор (build 5200) ругается, что имена некоторых идентификаторов совпадают:

idenfitier 'currency' already used      moexindex.mqh   1990    3
   see declaration of 'MOEX_ENGINES::currency'  moexindex.mqh   14      3
 
Denis Kirichenko #:

Станислав, спасибо за огромную проделанную работу. Тот редкий случай, когда статейный материал носит хрестоматийный характер... есть вопрос такого плана. В файле moexindex.mqh в определении перечисления MOEX_SECURITYTYPES вижу такое:


Т.е. к примеру именованная константа определена как currency·gold_metal. Наверное корректная запись могла быть такой currency_gold_metal. 

Ну и соот-но новый компилятор (build 5200) ругается, что имена некоторых идентификаторов совпадают:

Символ "дот" (· посередине, код Unicode 0x00B7), как и множество других, был разрешен для использования в именах переменных MQL5 и по-прежнему разрешен в C++. В частности, цитата по cpprefernce:

The first character of a valid identifier must be one of the following:

  • uppercase Latin letters A-Z
  • lowercase Latin letters a-z
  • underscore
  • any Unicode character with the Unicode property XID_Start

Any other character of a valid identifier must be one of the following:

  • digits 0-9
  • uppercase Latin letters A-Z
  • lowercase Latin letters a-z
  • underscore
  • any Unicode character with the Unicode property XID_Continue

В свою очередь группа символов XID_Continue может быть найдена среди прочих групп на сайте unicode.org.

Почему прежний компилятор был совместим с C++, а новый нет - я не знаю.

Я напишу об этом в ветке по последнему релизу, но со своей стороны изменить вряд ли что-то смогу, т.к. объяснение данного технического решения было в статье:

Кроме того, во многих случаях идентификаторы составлены по принципу "имя_родителя·имя_элемента", где для соединения применяется символ '·' (dot — один из нескольких, разрешенных в идентификаторах, помимо латинских букв и цифр). Это сделано в целях унификации имен сущностей — чтобы они всегда содержали 2 компонента: контекст и имя элемента в нем. В ISS нет единства в данном принципе именования: в некоторых случаях названия элементов включают родительский контекст (например, "futures_spread" — календарный спред в контексте движка futures), а в некоторых нет ("option_on_commodities" — опцион на товары также в контексте движка futures, но упоминания futures здесь нет). Кодогенератор создает в таких случаях элемент перечисления вида "futures·option_on_commodities". Унификация имен позволяет упростить алгоритмическую обработку.

Иными словами, разные сущности в иерархии MOEX могут использовать одно и то же слово, и потому требуется некий символ-разделитель внутри идентификатора между контейнером и вложенным элементом. Использовать краткое имя только элемента - нельзя, потому что мы сразу же упремся в дубликаты. Использовать подчеркивание нельзя, потому что оно уже используется в именах элементов MOEX. Использовать позиционное кодирование нельзя, т.к. количество слов в названии элемента неизвестно.