- PVSM.RU - https://www.pvsm.ru -

Cпособы передачи финансовых данных: протокол FIX

image [1]

Фондовый рынок является высокотехнологичной отраслью — помимо физической ИТ-инфраструктуры и технологичных торговых роботов игроки этого рынка занимаются развитием технических стандартов протоколов передачи данных. Сегодняшним материалом мы открываем серию топиков о протоколах передачи финансовой информаци. В первом выпуске представлена информация об одном из старейших протоколов — Financial Information eXchange или сокращенно FIX.

Немного истории

Создание протокола FIX было инициировано рядом финансовых организаций США в 1992 году — брокеры и инвестфонды хотели ускорить процесс осуществления торговых операций на бирже. В то время значительная часть торговых операций совершалась с помощью телефона, а протокол FIX позволил перевести взаимодействия в электронный вид.

В результате родился открытый стандарт передачи информации в электронном виде, который не контролирует ни одна из крупных организаций. Сегодня FIX стал отраслевым стандартом, который используется участниками финансового рынка разных стран для связи своих продуктов.

Как это работает

В настоящий момент протокол определен на двух уровнях — сессии (работа над доставкой данных) и приложения (описание содержимого данных). Существует два варианта синтаксиса протокола — традиционный, вида Tag=Value и в формате XML (FIXML). Рассмотрим каждый из них.

Синтаксис Tag Value

Сообщения протокола FIX обычно содержат заголовок и, собственно, тело сообщения. Каждое сообщение представляет собой поток полей =, отделенных друг от друга специальными символами — в спецификации FIX для разделения данных использован ASCII-символ SOH (#001, 0x01).

Теги содержат данные в формате TagNum, а поле тега не может быть пустым (кроме того, значение должно быть положительным и не начинаться с нулей). Сообщение с пустым полем Tag будет отклонено.

Тело сообщения обычно состоит из заголовка, тела сообщения и завершающего элемента (трейлера). Первым полем сообщения всегда является обозначение начала строки (BeginString [2], тег #8), затем указывается длина тела сообщения (BodyLength [3] тег #9) и тип сообщения (MsgType [4], тег #35). Последним символом трейлера всегда является контрольная сумма (тег #10).

Часто сообщения содержат, как зашифрованную часть, так и символы, переданные в текстовом виде — данная схема обычно используется для валидации и верификации данных. Например, передача зашифрованного значения SenderCompID [5], указывающего на отправителя, является устаревшим способом валидации.

Для обеспечения большей гибкости FIX протокол содержит так называемые пользовательские поля — User Defined Fields. Они используются при передачи данных между сотрудничающими финансовыми организациями. Номера тегов с 5000 до 9999 были зарезервированы под пользовательские поля — зарезервировать их можно было на официальном сайте стандарта. В дальнейшем эти номера были израсходованы [6], поэтому был выделен новый интервал — с 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 [7] описывается следующим образом:

<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 определяются с помощью специальных файлов, указывающих категорию.

image

Пример сообщения об отправке приказа на 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 любой желающий может напрямую подключиться [8] к «Московской бирже». Кроме того, биржа работает над унификацией доступа по FIX для всех доступных рынков (акции, срочный, валютный).

ITinvest также предоставляет [9] своим клиентам доступ к рынкам «Московской биржи» с помощью прямого подключения по протоколу FIX. Кроме того, для высокочастотных торговцев и алготрейдеров созданы специальные ИТ-услуги от колокации [10] серверов в дата-центре M1 до предоставления доступа к виртуальным машинам для размещения торгового робота.

Другие протоколы

Для получения рыночной информации (Market Data) используется протокол FAST (Fix Adapted for STreaming) — стандарт [11], разработанный создателями протокола FIX, который позволяет добиться значительных возможностей компрессии данных для передачи больших объемов рыночной информации с минимальными временными задержками. Помимо Московской биржи, используется на NYSE, Nasdaq-OMX и многих других мировых площадках.

Также для прямого подключения используются так называемые нативные протоколы, которые возникли еще до объединения бирж ММВБ и РТС в «Московскую биржу».

Так на рынках относившихся к бирже РТС (FORTS – фьючерсы [12] и опционы [13], Standard), для прямого совершения операций и получения данных в режиме подключения используется протокол [14] Plaza II. Для выполнения торговых операций и получения биржевых данных на площадках, ранее относившихся к бирже ММВБ (валютный и фондовый рынки) используется двунаправленный шлюз [15] MICEXBridge (TEAP).

Об этих протоколах пойдет речь в наших следующих статьях. На сегодня все, спасибо за внимание, будем рады ответить на вопросы в комментариях.

P.S. Если вы заметили опечатку или ошибку — напишите личным сообщением, и мы оперативно все исправим.

Автор: IT_invest

Источник [16]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka/74030

Ссылки в тексте:

[1] Image: http://habrahabr.ru/company/itinvest/blog/242789/

[2] BeginString: http://fixwiki.org/fixwiki/BeginString

[3] BodyLength: http://fixwiki.org/fixwiki/BodyLength

[4] MsgType: http://fixwiki.org/fixwiki/MsgType

[5] SenderCompID: http://fixwiki.org/fixwiki/SenderCompID

[6] израсходованы: http://www.fixtradingcommunity.org/pg/structure/tech-specs/additional-resources/user-defined-fields/user-defined-fields-tab-1

[7] FIXML: http://fixwiki.org/fixwiki/FPL:FIXML_Syntax

[8] напрямую подключиться: http://habrahabr.ru/company/itinvest/blog/204620/

[9] предоставляет: http://www.itinvest.ru/services/access/

[10] колокации: http://www.itinvest.ru/services/access/razmeshenie/

[11] стандарт: http://en.wikipedia.org/wiki/FAST_protocol

[12] фьючерсы: http://habrahabr.ru/company/itinvest/blog/222257/

[13] опционы: http://habrahabr.ru/company/itinvest/blog/226829/

[14] протокол: http://fs.moex.com/files/4929

[15] шлюз: http://moex.com/a574

[16] Источник: http://habrahabr.ru/post/242789/