Financial Information eXchange (Financial Information eXchange)
Financial Information eXchange (FIX) protocol (протокол обмена финансовой информацией) — протокол передачи данных, являющийся международным стандартом для обмена данными между участниками биржевых торгов в режиме реального времени.
История
[править | править код]Спецификация FIX-протокола была создана в 1992 году для передачи информации о торгах акциями между компаниями Fidelity Investments и Salomon Brothers. В создании принимали участие программист Крис Морсатт (Chris Morstatt) и Джим Леман (Jim Leman) (бизнес-вопросы) со стороны Salomon, и бизнесмен Жак Перольд (Jacques Perold) и программист Роберт Ламорё (Robert "Bob" Lamoureux) со стороны Fidelity. В начале протокол служил только для обмена данными между брокерами-дилерами и их институциональными клиентами. В те времена информация о заявках и их исполнении передавалась устно по телефону. В Fidelity поняли, что информация, поступающая от брокера-дилера, может попасть не к тому трейдеру или просто может потеряться, как только оба собеседника повесят трубки. Идея заключалась в том, чтобы заменить устные переговоры передачей данных между компьютерами. Эту информацию можно было бы анализировать, хранить и использовать для принятия решений. Например, процедура, когда брокер-дилер звонит другому с намерением купить или продать пакет акций, в протоколе FIX отражена в обмене IOI-сообщениями.
Согласно FIX Trading Community протокол FIX стал глобальным стандартом де-факто для обмена сообщений на рынке торговли акциями на стадии пред-торговли и исполнения. Постепенно он распространяется на стадию пост-торговли, а также на торговлю другими классами ценных бумаг: валютный, долговой рынки и рынок деривативов[1]. Протокол FIX поддерживается большинством крупнейших банков и электронными трейдинговыми системами, а также крупнейшими биржами мира.
FIX Trading Community
[править | править код]FIX Trading Community - некоммерческая организация, обладающая правами и поддерживающая спецификацию протокола. По состоянию на 2009 год спецификация находилась в состоянии общественного достояния.
Формат FIX-сообщения
[править | править код]Сообщения FIX состоят из набора полей "тег=значение". Поля отделяются ASCII кодом SOH — Start of Header (0x01). Тег — это номер поля. Например, тег 48 обозначает securityID, а строка значения содержит идентификатор ценной бумаги (тикер).
Сообщение состоит из 3 частей: заголовок, тело и окончание. Последнее поле в сообщении — контрольная сумма (тег 10).
Протокол FIX определяет обязательные и необязательные поля. При этом не важна последовательность полей внутри тела сообщения, хотя в реализациях принято придерживаться определенных традиций в порядке следования тегов друг за другом.
До версии 4.4 включительно заголовок включает три обязательных тега: 8 (BeginString
), 9 (BodyLength
), и 35 (MsgType
).
Начиная с FIXT.1.1 / FIX.5.0, в заголовке определены пять обязательных и один необязательный тег: 8 (BeginString
), 9 (BodyLength
), 35 (MsgType
), 49 (SenderCompID
), 56 (TargetCompID
) и 1128 (ApplVerID
- если присутствует, должен стоять на 6-й позиции).
Содержимое "тела" сообщения зависит от типа сообщения, которое обозначено в заголовке (тег 35, MsgType
).
Последним тегом всегда идет тег 10, содержащий контрольную сумму сообщения. Эта сумма всегда выражается трехзначным числом, которое вычисляется по особой формуле, описанной в спецификации (например, 10=002
).
Пример FIX-сообщения "Новая заявка". Вертикальные черты заменяют SOH символ для наглядности:
8=FIX.4.2 | 9=178 | 35=D | 34=123123 | 49=BROKER11 | 56=PHLX | 52=20071123-05:30:00.000 | 11=ATOMNOCCC9990900 | 55=MSFT | 167=FUT | 54=1 | 38=15 | 40=2 | 44=15 | 59=0 | 10=128 |
Читается сообщение так: сообщение в FIX-формате 4.2 (8=FIX.4.2), длина сообщения 178 байт (9=178), тип сообщения "новая заявка" (35=D), номер сообщения 123123 (34=123123), от брокера BROKER11 (49=BROKER11) на филаделфийскую биржу (56=PHLX), отправлена (тег 52), номер заявки ATOMNOCCC9990900 в торговой системе брокера (11=ATOMNOCCC9990900) на покупку (54=1) фьючерсов (167=FUT) на акции компании Microsoft (55=MSFT) в объеме 15 лотов (38=15) по лимитированной (40=2) цене 15 (44=15), заявка истекает в конце торгового дня (59=0).
Бинарный формат
[править | править код]Для кодирования FIX сообщений в бинарном виде используется FAST протокол.
Техническая спецификация
[править | править код]Протокол FIX служит для обмена данными в торговых сессиях между торговыми системами. XML-представление сообщений FIX называется FIXML; подобно XML, он является самоописывающим.
FIX - протокол сессионного уровня поверх TCP. При торговле ценными бумагами FIX более популярен, т. к. сообщения FIXML обычно намного объемнее.
Сообщения делятся на 2 уровня: управления и приложения. Уровень управления определяет базовые параметры FIX-сессии: устанавливает соединение, закрывает его, восстанавливает пропавшие сообщения. Уровень приложения связан с отправкой и получением данных: заявок (requests), их исполнений (сделок) (executions and fills), отказов (rejects), рыночной информации (market data), запрос информации о текущем состоянии (status requests) и пр.
Протокол FIX имеет несколько версий, которые выходили по мере совершенствования протокола и поддержки в нём различных классов ценных бумаг. Самой последней версией протокола является версия 5.0.SP2. Разные торговые системы поддерживают разные протоколы, а иногда и несколько протоколов параллельно. Наибольшее распространение среди торговых систем получила версия протокола FIX 4.2 (март 2000 г.), до сих пор существуют биржи и брокеры, которые работают с протоколом 4.1 (апрель 1998 г.) или даже 4.0 (январь 1997 г.), например Сиднейская биржа деривативов[2].
При реализации протокола разработчики той или иной торговой системы (биржа, брокер, электронная торговая площадка) могут не строго следовать выбранной версии спецификации, а также могут добавлять свои дополнительные теги (custom tags), переопределять значение и роль некоторых второстепенных тегов, требовать наличия определенных тегов, которые в спецификации определены как необязательные. В этом случае разработчики предоставляют свою документацию, в которой описывают особенности своей реализации FIX[3][4][5][6], чтобы клиенты могли настроить свои клиентские программы под эти особенности.
Примечания
[править | править код]- ↑ What is FIX? The FIX Protocol Organization (8 июня 2009). Дата обращения: 12 ноября 2016. Архивировано из оригинала 9 сентября 2004 года.
- ↑ Спецификация FIX 4.0 Сиднейской биржи деривативов . Дата обращения: 5 ноября 2016. Архивировано 29 апреля 2021 года.
- ↑ Спецификация Fix 4.2 Нью-йоркской биржи NYSE Arca Equities . Дата обращения: 5 ноября 2016. Архивировано из оригинала 21 октября 2017 года.
- ↑ Спецификация Fix 4.2 биржи BATS . Дата обращения: 5 ноября 2016. Архивировано 12 ноября 2020 года.
- ↑ Пример спецификаций Fix 5.0 Лондонской фондовой биржи . Дата обращения: 5 ноября 2016. Архивировано 8 мая 2020 года.
- ↑ Спецификация Fix 4.2 Скандинавской биржи Nasdaq Nordic . Дата обращения: 5 ноября 2016. Архивировано из оригинала 5 ноября 2016 года.
Ссылки
[править | править код]- FIX Protocol Organization - официальный сайт протокола FIX; также содержит полный список как закрытых, так и открытых реализаций FIX (англ.)
- Полный словарь по FIX протоколу от Onixs - быстрый и удобный словарь по FIX протоколу (все версии 4.0, 4.1, 4.2, 4.3, 4.4, 5.0, 5.0.SP1, 5.0.SP2, FIXT1.1).
- FIXimate: FIX-словарь 4.0 4.1 4.2 4.3 4.4
- B2BITS FIXopaedia - инструмент для изучения всех версий протокола FIX (4.0 – 5.0 SP2), FIXT 1.1, FIX Latest, охватывающий сессионные и прикладные сообщения.
- B2BITS FIX Antenna .NET Core - реализация движка FIX для .NET с открытым исходным кодом.
- QuickFIX - открытая реализация FIX на C++
- QuickFIX/J - открытая реализация QuickFIX на Java
- QuickFIX/N - открытая реализация QuickFIX на .NET
- FIX Protocol Overview - слайды к курсам по FIX-протоколу.
- FIX Parser - Бесплатный On-Line парсер FIX-сообщений.
- FIX Message Viewer / Parser