Фондовый рынок является высокотехнологичной отраслью — помимо физической ИТ-инфраструктуры и технологичных торговых роботов игроки этого рынка занимаются развитием технических стандартов протоколов передачи данных. Сегодняшним материалом мы открываем серию топиков о протоколах передачи финансовой информаци. В первом выпуске представлена информация об одном из старейших протоколов — Financial Information eXchange или сокращенно FIX.
Немного истории
Создание протокола FIX было инициировано рядом финансовых организаций США в 1992 году — брокеры и инвестфонды хотели ускорить процесс осуществления торговых операций на бирже. В то время значительная часть торговых операций совершалась с помощью телефона, а протокол FIX позволил перевести взаимодействия в электронный вид.
В результате родился открытый стандарт передачи информации в электронном виде, который не контролирует ни одна из крупных организаций. Сегодня FIX стал отраслевым стандартом, который используется участниками финансового рынка разных стран для связи своих продуктов.
Как это работает
В настоящий момент протокол определен на двух уровнях — сессии (работа над доставкой данных) и приложения (описание содержимого данных). Существует два варианта синтаксиса протокола — традиционный, вида Tag=Value и в формате XML (FIXML). Рассмотрим каждый из них.
Синтаксис Tag Value
Сообщения протокола FIX обычно содержат заголовок и, собственно, тело сообщения. Каждое сообщение представляет собой поток полей =, отделенных друг от друга специальными символами — в спецификации FIX для разделения данных использован ASCII-символ SOH (#001, 0x01).
Теги содержат данные в формате TagNum
, а поле тега не может быть пустым (кроме того, значение должно быть положительным и не начинаться с нулей). Сообщение с пустым полем Tag будет отклонено.
Тело сообщения обычно состоит из заголовка, тела сообщения и завершающего элемента (трейлера). Первым полем сообщения всегда является обозначение начала строки (BeginString, тег #8), затем указывается длина тела сообщения (BodyLength тег #9) и тип сообщения (MsgType, тег #35). Последним символом трейлера всегда является контрольная сумма (тег #10).
Часто сообщения содержат, как зашифрованную часть, так и символы, переданные в текстовом виде — данная схема обычно используется для валидации и верификации данных. Например, передача зашифрованного значения SenderCompID, указывающего на отправителя, является устаревшим способом валидации.
Для обеспечения большей гибкости FIX протокол содержит так называемые пользовательские поля — User Defined Fields. Они используются при передачи данных между сотрудничающими финансовыми организациями. Номера тегов с 5000 до 9999 были зарезервированы под пользовательские поля — зарезервировать их можно было на официальном сайте стандарта. В дальнейшем эти номера были израсходованы, поэтому был выделен новый интервал — с 20000 до 39999.
Сообщения в формате Tag Value выглядят следующим образом (символ ^ — это разделитель SOH):
8=FIX.4.2^9=251^35=D^49=AFUNDMGR^56=ABROKER^34=2^52=20030615-01:14:49^11=12345^ 1=111111^63=0^64=20030621^21=3^110=1000^111=50000^ 55=IBM^48=459200101^22=1^54=1^60=2003061501:14:49 38=5000^40=1^44=15.75^15=USD^59=0^10=127
Синтаксис FIXML
Работы по созданию синтаксиса в формате XML начались в 1998 году, а первая версия FIXML появилась в январе 1999 года.
Новый приказ на совершение операции в формате FIXML описывается следующим образом:
<Order
ClOrdID="123456"
Side="2"
TransactTm="2001-09-11T09:30:47-05:00"
OrdTyp="2"
Px="93.25"
Acct="26522154">
Здесь ClOrdID — id-приказа, side=”2” означает приказ на продажу, далее указывается время транзакции, тип приказа (2 соответствует Limit-приказу) и его цена pX. Поле Acct означет номер счета пользователя.
Далее в сообщении указывается информация о ценной бумаге и число ценных бумаг, которые нужно купить или продать. В итоге простое сообщение будет выглядеть примерно так:
<FIXML>
<Order
ClOrdID="123456"
Side="2"
TransactTm="2001-09-11T09:30:47-05:00"
OrdTyp="2"
Px="93.25"
Acct="26522154">
<Instrmt Sym="IBM"
ID="459200101"
IDSrc="1"/>
<OrdQty Qty="1000"/>
</Order>
</FIXML>
В начале пути XML-версии FIX использовался только механизм определения синтаксиса DTD. В дальнейшем организация W3C разработала новый механизм — XML Schema, что заставило разработчиков FIX адаптировать стандарт для использования этого варианта синтаксиса.
Этот шаг позволил добиться улучшения XML-версии протокола FIX, в частности, пользователи получили возможность добавления в сообщения атрибутов и контекстных сокращений.
Базовая организация схемы XML предполагает наличие типов данных, используемых в полях, которые содержатся в отдельном файле. Поля FIX определяются в специальном shared-файле, а компоненты и элементы синтаксиса FIXML в специальных файлах компонентов. Сообщения FIXML определяются с помощью специальных файлов, указывающих категорию.
Пример сообщения об отправке приказа на FIXML (Schema):
<FIXML v="4.4" r="20030618" s="20040109">
<Order ClOrdID="123456" Side="2" TransactTm="2001-09-11T09:30:47-05:00"
OrdTyp="2" Px="93.25" Acct="26522154">
<Instrmt Sym="IBM" ID="459200101" IDSrc="1"/>
<OrdQty Qty="1000"/>
</Order>
</FIXML>
Сообщения FIX
Каждое сообщение, отправленное в формате протокола FIX, состоит из обязательных, необязательных и условно обязательных (в зависимости от значения других частей сообщения) полей.
Сообщения делятся на три категории:
- Пре-торговые сообщения;
- Торговые сообщения (приказы и передача информации о сделках);
- Пост-торговые сообщения.
FIX на российских биржах
C помощью протокола FIX любой желающий может напрямую подключиться к «Московской бирже». Кроме того, биржа работает над унификацией доступа по FIX для всех доступных рынков (акции, срочный, валютный).
ITinvest также предоставляет своим клиентам доступ к рынкам «Московской биржи» с помощью прямого подключения по протоколу FIX. Кроме того, для высокочастотных торговцев и алготрейдеров созданы специальные ИТ-услуги от колокации серверов в дата-центре M1 до предоставления доступа к виртуальным машинам для размещения торгового робота.
Другие протоколы
Для получения рыночной информации (Market Data) используется протокол FAST (Fix Adapted for STreaming) — стандарт, разработанный создателями протокола FIX, который позволяет добиться значительных возможностей компрессии данных для передачи больших объемов рыночной информации с минимальными временными задержками. Помимо Московской биржи, используется на NYSE, Nasdaq-OMX и многих других мировых площадках.
Также для прямого подключения используются так называемые нативные протоколы, которые возникли еще до объединения бирж ММВБ и РТС в «Московскую биржу».
Так на рынках относившихся к бирже РТС (FORTS – фьючерсы и опционы, Standard), для прямого совершения операций и получения данных в режиме подключения используется протокол Plaza II. Для выполнения торговых операций и получения биржевых данных на площадках, ранее относившихся к бирже ММВБ (валютный и фондовый рынки) используется двунаправленный шлюз MICEXBridge (TEAP).
Об этих протоколах пойдет речь в наших следующих статьях. На сегодня все, спасибо за внимание, будем рады ответить на вопросы в комментариях.
P.S. Если вы заметили опечатку или ошибку — напишите личным сообщением, и мы оперативно все исправим.
Автор: IT_invest