Приступая к разработке коннектора, я надеялся на наличие подробных инструкций с образцами кода, желательно на языке C#, который мы используем в OsEngine, но пришлось довольствоваться тем, что было припрятано в глубинах FTP-серверов Московской биржи.
Во-первых, для поиска инструкций на сайте Московской биржи надо зайти в раздел Технологические решения и перейти на вкладку Шлюзовое подключение.
Находим транзакционные интерфейсы срочного рынка TWIME и FIX Gate.
На странице, посвященной интерфейсу TWIME, есть ссылка на документацию, которая ведет на FTP-сервер:
Основной файл – spectra_twime_ru.pdf содержит Спецификацию бинарного
протокола TWIME для срочного рынка.
В данной Спецификации описываются сообщения, которыми обмениваются торговая программа клиента и сервер ТС SPECTRA Московской биржи.
Чтобы правильно сформировать или прочитать сообщения бинарного протокола, необходимо знать, какой тип данных используется для кодирования того или иного поля.
Например, сообщение Establish, которым устанавливается соединение с сервером, включает в себя заголовок и три поля: Timestamp — тип uint64, KeepaliveInterval — тип uint32 и Credentials - тип String20.
В заголовок входит четыре поля типа uint16: длина сообщения – 32 т.е. сумма байтов всех полей сообщения, кроме заголовка, ID сообщения – 5000. Идентификатор схемы сообщений — 19781 и версия схемы сообщений – 7 — это постоянные величины. Чтобы передать логин типом String20, нужно в массив байт, полученный при кодировании строки логина, добавить нулевые байты до длинны 20.
Кроме Спецификации, разобраться с типами данных в сообщениях поможет информация в файле twime_spectra-7.0.xml.
Если перейти в директорию prod, то в ней в папке samples имеются примеры приложений для работы с TWIME на Python.
На GitHub удалось найти пару проектов по TWIME, но только на Java и C++:
https://github.com/abramov-eugene/twime-connector
https://github.com/akuloff/SBEMoexAgent
Инструкции для интерфейса FIX Gate также берем с сайта Московской биржи, переходя по ссылке Спецификация FIX для платформы Spectra (RU + EN)
В директории Spectra в папке Utils есть небольшой пример приложения на языке С++.
Как указывалось в предыдущей статье, протокол FIX достаточно распространен в мире, и источников по его изучению много, в том числе проектов на GitHub.
Для получения биржевой информации в коннекторе используется протокол FAST, описание которого имеется также на сайте Московской биржи по адресу: https://www.moex.com/s441
За инструкциями переходим по ссылке:
Для разработки нам потребуется директория test.
Спецификация протокола FAST находится в файле spectra_fastgate_ru.pdf.
В папке templatesT0 или templatesТ1 находятся файлы конфигурации и шаблона. В файле конфигурации можно узнать адреса, к которым следует подключаться для получения потоковых данных биржевой информации.
В файле templates.xml представлены шаблоны, которые нужны для декодирования FAST сообщений.
Также в папке test имеется программа fast_sensor, которую можно использовать для проверки соединения с сервером, а также в её логах можно посмотреть на структуру FAST сообщений из разных потоков.
Однако, оглядываясь на уже имеющийся опыт работы с FAST, понятно, что даже просто для установки соединения с тестовым сервером вышеперечисленных ресурсов недостаточно. Советую еще зайти в директорию FAST для спота и валютного рынка по адресу: https://ftp.moex.com/pub/FAST/ASTS/utils/
Здесь есть пример кода создания сокета для подключения к мультикаст адресам. Есть скрипт для прописывания маршрутов VPN соединения.
Ну и конечно же источником инструкций по отдельным вопросам является служба поддержки Московской биржи.
Комментарии открыты для друзей!
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php