СПЕЦИФИКАЦИЯ ПРОТОКОЛА FIX
EXPERT FIX RELAY
© 2007-2008, «Эксперт-Система»
www.expert-systema.ruОГЛАВЛЕНИЕ
Спецификация протокола FIX ................................................................................................................................................. 3
Предназначение .................................................................................................................................................................. 3
Общее описание ................................................................................................................................................................. 3
Протокол сессионного уровня ............................................................................................................................................... 4
Поддерживаемые сообщения .......................................................................................................................................... 4
Общий Набор полей ........................................................................................................................................................... 4
Standard Header ............................................................................................................................................................... 4
Standard Trailer ................................................................................................................................................................ 4
Сценарии установления и сброса сессии .......................................................................................................................... 4
Установление и завершение сессии .............................................................................................................................. 4
Сброс сессии .................................................................................................................................................................... 5
Служебные сообщения ....................................................................................................................................................... 5
LogOn ................................................................................................................................................................................ 5
Reject ................................................................................................................................................................................ 5
Торговое взаимодействие ...................................................................................................................................................... 7
Сценарии торгового взаимодействия ............................................................................................................................... 7
Размещение заявки ........................................................................................................................................................ 7
Отмена заявки ................................................................................................................................................................. 7
Получение состояния заявки ......................................................................................................................................... 8
Детальное описание структуры запросов клиента .......................................................................................................... 8
New Order Single .............................................................................................................................................................. 8
Order Cancel Request ....................................................................................................................................................... 9
Order Status Request ........................................................................................................................................................ 9
Детальное описание структуры ответов сервера ............................................................................................................. 9
Execution Report .............................................................................................................................................................. 9
Order Cancel Reject ........................................................................................................................................................ 10
Описания полей и их допустимые значения ...................................................................................................................... 11
Группа Order Qty Data ....................................................................................................................................................... 11
Группа Instrument .............................................................................................................................................................. 11
CFICode, код ISO-10962 ................................................................................................................................................. 11
Остальные поля ................................................................................................................................................................. 12СПЕЦИФИКАЦИЯ ПРОТОКОЛА FIX
ПРЕДНАЗНАЧЕНИЕ
В этом документе описывается протокол взаимодействия комплекса Expert Fix Relay с электронными системами
пользователей. Описание протокола опирается на спецификацию стандартного протокола FIX (Financial Information
Exchange, http://www.fixprotocol.org). В данную спецификацию не входят административные и технические
аспекты организации сетевого подключения и обеспечения его безопасности.
ОБЩЕЕ ОПИСАНИЕ
Протокол подключения к Expert Fix Relay (далее – Система) основан на протоколе FIX 4.4. Протокол состоит из
транспортного, сессионного и прикладного уровней.
Транспортный уровень протокола определяет порядок передачи данных как набора сообщений, составления
сообщений как набора полей, и составления полей из идентификатора поля (метки) и значения. Описание
транспортного уровня дано в спецификации FIX 4.4 и не включено в данную спецификацию.
Сессионный уровень обеспечивает идентификацию сторон взаимодействия, гарантированную доставку и
последовательную обработку сообщений, контроль состояния соединения и возможность восстановления сессии
в случае сбоев. В данной спецификации представлено сокращенное описание протокола сессионного уровня, цель
которого указать подмножество параметров, необходимое для подключения к Системе. Детальное описание
приведено
Основу данной спецификации составляет описание протокола прикладного уровня, которое разбито на три
составляющие по аналогии со спецификацией FIX:
• пред-торговое взаимодействие
• торговое взаимодействие
• после-торговое взаимодействие. ПРОТОКОЛ СЕССИОННОГО УРОВНЯ
ПОДДЕРЖИВАЕМЫЕ СООБЩЕНИЯ
• Logon – Передается в обоих направлениях. Инициирует сессию и соединение.
• Logout – Передается в обоих направлениях. Инициирует или подтверждает разрыв соединения.
• Resend Request – Передается в обоих направлениях. Указывает на необходимость повторной передачи
сообщений в определенном интервале номеров. Поддерживается, но не является необходимой частью
протокола.
• Sequence Reset – Передается в обоих направлениях. Используется при повторной пересылке для пропуска
административных сообщений.
• Test Request – Передается в обоих направлениях. Используется для контроля состояния соединения.
Требует ответа в виде маркированного сообщения Heartbeat.
• Heartbeat – Передается в обоих направлениях в целях контроля состояния соединения.
• Reject – Передается в обоих направлениях. Указывает на неверно переданное или неподдерживаемое
сообщение, пришедшее от другой стороны.
ОБЩИЙ НАБОР ПОЛЕЙ
Набор полей, которые необходимо включать в каждое сообщение:
STANDARD HEADER
Стандартный заголовок
Tag Поле Наличие Примечание
8 BeginString Требуется Требуется указывать значение «FIX.4.4»
9 BodyLength Требуется Длина сообщения. Рассчитывается в соответствии со стандартом
35 MsgType Требуется Каждый тип сообщения имеет свой код MsgType
49 SenderCompID Требуется Идентификатор компьютера отправителя сообщения. Возможно,
потребуется согласование идентификатора с биржей
56 TargetCompID Требуется Идентификатор компьютера FIX-шлюза. По-умолчанию – «EFR_SERVER»
34 MsgSeqNum Требуется Порядковый номер сообщения
97 PossResend Условно
43 PossDupFlag Условно
STANDARD TRAILER
Стандартное завершение сообщения
Tag Поле Наличие Примечание
10 CheckSum Требуется Контрольная сумма сообщения. Методика расчёта описана в
спецификации FIX, Volume 2: «Checksum Calculation»
СЦЕНАРИИ УСТАНОВЛЕНИЯ И СБРОСА СЕССИИ
УСТАНОВЛЕНИЕ И ЗАВЕРШЕНИЕ СЕССИИ
В простейшем случае входящее подключение принмается сервером:
Шаг Отправитель Сообщение Комментарий
1 Клиент Logon Клиент представляется Системе, указывая свой
SenderCompID, имя пользователя и пароль
2 Система Logon Система подтверждает установленное соединение [3] Клиент,
Система
ResendRequest В случае некорректного завершения предыдущего сеанса
связи Клиент и Система синхронизируют состояние и
нумерацию сообщений (поле MsgSeqNum)
4 Система TestRequest Для подтверждения надёжности канала связи сервер
запрашивает специальное сообщение HeartBeat
5 Клиент HeartBeat Клиент отсылает сообщение HeartBeat с корректно
заполненным полем TestReqID, после чего соединение
считается установленным
В случае попытки установления недопустимого соедения Система разрывает соединение:
• двух одновременных соединений от одного клиента
• указан неверный пароль, имя пользователя, SenderCompID, TargetCompID и т.п.
Шаг Отправитель Сообщение Комментарий
1 Клиент Logon Указываются недопустимые реквизиты
2 Система - Система обрывает соединение без передачи каких-либо
сообщений. В прокол Системы заносится запись о
проишествии
СБРОС СЕССИИ
Номера сообщений могут быть сброшены несколькими способами:
• Указание флага ResetSeqNumFlag в сообщении Logon
• Передача сообщения Sequence Reset
• По договорённости, на периодической основе. Например, в ночь с субботы на воскресенье
При сбросе сессии все ранее отправленные сообщения не могут быть запрошены механизмом Resend Request. Все
отправленные заявки и клиентские идентификаторы заявок остаются в силе.
СЛУЖЕБНЫЕ СООБЩЕНИЯ
LOGON
Сообщение, подтверждающее установление сессии. Должно быть первым сообщением в каждом подключении.
Передаётся в обе стороны. MsgType = A
Tag Поле Наличие Примечание
98 EncryptMethod Требуется Должно быть указано «0» – NONE_OTHER – шифрование сообщений
отключено. Безопасность канала связи должна быть обеспечена другими
средствами, на транспортном уровне
108 HeartBtInt Требуется Интервал ожидания торговых сообщений или сообщений HeartBeat
141 ResetSeqNumFlag Условно Если этот флаг установлен, обе стороны должны сбросить счётчики
сообщений
553 Username Опционально Имя пользователя
554 Password Опционально Пароль
REJECT
Передается в обоих направлениях. Указывает на неверно переданное или недопустимое сообщение, пришедшее
от другой стороны. MsgType = 3 Передача этого сообщения сигнализирует о серьёзной ошибке в соблюдении спецификации. Например, о
незаполненном обязательном поле сообщения.
В случае возникновения проблем более высокого уровня (сбой подключения к бирже, указание неизвестного кода
финансового инструмента, указание недопустимой цены и т.п.) будет передано сообщение ExecutionReport. Поле
ExecType=Reject сигнализирует о невозможности исполнения заявки, а поля OrdRejReason и Text указывают на
причину отказа.
Tag Поле Наличие Примечание
45 RefSeqNum Требуется Номер сообщения, которое не было обработано
371 RefTagID Опционально Номер поля, чья обработка вызвала отказ
372 RefMsgType Опционально Indicates both sides of a FIX session should reset sequence numbers
373 SessionRejectReason Опционально Причина отказа от приёма сообщения:
0 – InvalidTagNumber
1 – RequiredTagMissing
5 – ValueIsIncorrectOutOfRangeForThisTag
6 – IncorrectDataFormatForValue
9 – CompIDProblem
11 – InvalidMsgType
58 Text Опционально Расшифровка причины ТОРГОВОЕ ВЗАИМОДЕЙСТВИЕ
СЦЕНАРИИ ТОРГОВОГО ВЗАИМОДЕЙСТВИЯ
РАЗМЕЩЕНИЕ ЗАЯВКИ
В простейшем случае, заявка принимается системой, после чего выполняется:
Шаг Отправитель Сообщение Комментарий
1 Клиент NewOrderSingle Отдаётся новая биржевая заявка. Указывается все
параметры, включая тип и код инструмента
2 Система ExecutionReport,
Status=New
Система подтверждает получение заявки. Этот шаг может
быть опущен, если биржа готова немедленно
удовлетворить заявку
3...n Система ExecutionReport,
Status=Filled или PartialFill
Система сообщает параметры сделки и указывает на статус
полного или частичного исполнения заявки.
Соответственно, сообщение ExecutionReport со статусом
PartialFill может быть отправлено несколько раз
Заявка также может быть отклонена системой:
Шаг Отправитель Сообщение Комментарий
1 Клиент NewOrderSingle Новая заявка
2 Система ExecutionReport,
Status=Rejected
Система отклоняет заявку пользователя с указанием
причины
По окончанию сессии или по иным причинам, исполнение заявки может быть прекращено биржей уже после ее
принятия:
Шаг Отправитель Сообщение Комментарий
1 Клиент NewOrderSingle Новая заявка
2 Система ExecutionReport,
Status=New
Заявка принята
3 Система ExecutionReport,
Status=Filled или PartialFill
Заявка может быть частично исполнена до отмены
4 Система ExecutionReport,
Status=Canceled или
Expired
Заявка отменена или истекло время работы заявки
ОТМЕНА ЗАЯВКИ
Успешно размещённая заявка может быть отменена клиентом:
Шаг Отправитель Сообщение Комментарий
1 Клиент NewOrderSingle Поле ClOrderID содержит клиентский идентификатор заявки
2 Система ExecutionReport,
Status=New
Заявка принята к исполнению
3 Клиент OrderCancelRequest В ClOrderID указывается новый идентификатор заявки на
отмену, при этом идентификатор отменяемой заявки
указывается в поле OrigClOrderID
4 Система ExecutionReport,
Status=Canceled
Поля ClOrderID и OrigClOrderID указываются как в запросе
на отменуЗапрос на отмену, полученный уже после исполнения заявки, будет отвергнут:
Шаг Отправитель Сообщение Комментарий
1 Клиент NewOrderSingle Создание заявки
2 Система ExecutionReport,
Status=New
Заявка принята
3 Система ExecutionReport,
Status=Filled
Заявка полностью выполнена. Поле ClOrderID содержит
идентификатор исходной заявки
4 Клиент OrderCancelRequest Попытка отменить исполненную заявку
5 Система OrderCancelReject Причина отказа – Too Late To Cancel
В некоторых случаях заявка может быть выполнена после получения запроса на отмену, но до его обработки:
Шаг Отправитель Сообщение Комментарий
1 Клиент NewOrderSingle
2 Система ExecutionReport,
Status=New
3 Клиент OrderCancelRequest
4 Система ExecutionReport,
Status=Filled
Сообщение описывает сделки, при этом указан ClOrderID от
запроса на отмену и OrigClOrderID от исходной заявки. Т.о.
запрос на отмену отклоняется
ПОЛУЧЕНИЕ СОСТОЯНИЯ ЗАЯВКИ
Клиент всегда может запросить информацию о текущем состоянии заявки:
Шаг Отправитель Сообщение Комментарий
1 Клиент OrderStatusRequest Статус запрашивается по клиентскому идентификатору
заявки
2 Система ExecutionReport,
ExecType=Status
Поле ExecType указывает на то, что данный отчет является
ответом на запрос пользователя, а не сообщением об
изменении статуса
ДЕТАЛЬНОЕ ОПИСАНИЕ СТРУКТУРЫ ЗАПРОСОВ КЛИЕНТА
NEW ORDER SINGLE
Размещение новой торговой заявки по любому виду инструментов. MsgType = D
Tag Поле Наличие Примечание
11 ClOrdID Требуется Пользовательский идентификатор заявки
1 Account Требуется Используемый торговый счет
Блок <OrderQtyData> Требуется
40 OrdType Требуется Тип заявки
44 Price Условно Цена необходима для всех заявок, кроме рыночных
54 Side Требуется Сторона
Блок <Instrument> Требуется
60 TransactTime Требуется Время отдачи заявки
59 TimeInForce Опционально Время активности заявки. Если не указано, используется Day ORDER CANCEL REQUEST
Запрос на отмену ранее отданной торговой заявки. MsgType = F
Tag Поле Наличие Примечание
11 ClOrdID Требуется Пользовательский идентификатор заявки на отмену
41 OrigClOrdID Требуется Ранее использованный пользовательский идентификатор заявки, которую
следует отменить
Блок <Instrument> Требуется Как в исходной заявке
54 Side Требуется Сторона, как в исходной заявке
60 TransactTime Требуется Время отдачи заявки на отмену
1 Account Опционально Используется для проверки
Блок <OrderQtyData> Опционально Указывается размер исходной заявки. Используется для проверки
ORDER STATUS REQUEST
Запрос текущего состояния конкретной заявки. MsgType = H
Tag Поле Наличие Примечание
11 ClOrdID Требуется Идентификатор заявки, чьё состояние запрашивается
Блок <Instrument> Требуется Как в исходной заявке
54 Side Требуется Сторона, как в исходной заявке
1 Account Опционально Используется для проверки
Блок <OrderQtyData> Опционально Указывается размер исходной заявки. Используется для проверки
790 OrdStatusReqID Опционально Может быть использовано для идентификации конкретного запроса
состояния. Значение будет возвращено в сообщении Execution Report
ДЕТАЛЬНОЕ ОПИСАНИЕ СТРУКТУРЫ ОТВЕТОВ СЕРВЕРА
EXECUTION REPORT
Отчет об исполнении заявки или о невозможности исполнения заявки. MsgType = 8
Tag Поле Наличие Примечание
37 OrderID Требуется Номер заявки
17 ExecID Требуется Идентификатор сделки. При ответе на OrderStatusRequest указывается 0
11 ClOrdID Требуется Код заявки, полученный от клиента
41 OrigClOrdID Условно Код исходной заявки, указывается в отчетах об удалении заявки.
790 OrdStatusReqID Условно Идентификатор запроса состояния ордера. Указывается если сообщение
посылается в ответ на запрос статуса заявки, и в запросе был указан
идентификатор.
39 OrdStatus Требуется Состояние заявки
150 ExecType Требуется Причина отправки Execution Report
Блок <Instrument> Требуется
54 Side Требуется Сторона сделки
14 CumQty Требуется Общее количество едениц биржевого инструмента, купленного или
проданного по заявке
151 LeavesQty Требуется Количество остающееся к исполнению. Если OrdStatus = Canceled,
Expired, или Rejected (т.е. заявка более не активна), то LeavesQty = 0,
иначе LeavesQty = OrderQty – CumQty
32 LastQty Условно Количество контрактов купленное или проданное в рамках этой
(последней) сделки. Указывается если ExecType = Trade
31 LastPx Условно Цена этой (последней) сделки. Указывается если ExecType = Trade 6 AvgPx Требуется Средняя цена сделок по заявке
44 Price Условно Цена заявки, указанная при создании заявки
58 Text Опционально Текстовое примечание к отчёту. В т.ч. причина отклонения заявки
103 OrdRejReason Условно Причина отказа от исполнения заявки. Указывается при ExecType =
Rejected
Блок <OrderQtyData> Опционально Исходный размер заявки
60 TransactTime Опционально Время операции, отраженной в данном отчете
59 TimeInForce Опционально Значение по-умолчанию: 0 – Day – торговая сессия
ORDER CANCEL REJECT
Заявка на удаление отклонена. MsgType = 8
Tag Поле Наличие Примечание
37 OrderID Требуется Номер заявки
11 ClOrdID Требуется Идентификатор заявки на удаление, полученный от клиента
41 OrigClOrdID Требуется Идентификатор удаляемой заявки
39 OrdStatus Требуется Состояние заявки
102 CxlRejReason Требуется Причина отказа от отмены заявки
434 CxlRejResponseTo Требуется ORDER_CANCEL_REQUEST
58 Text Опционально Текстовое примечание к причине отклонения заявки ОПИСАНИЯ ПОЛЕЙ И ИХ ДОПУСТИМЫЕ ЗНАЧЕНИЯ
Многие сообщеня содержат пересекающийся набор полей. Так, каждое сообщение должно содержать поля
группы Standard Header и Standard Trailer, несущие служебную информацию.
Ниже приведены некоторые используемые поля fix-сообщений:
ГРУППА ORDER QTY DATA
Указывает количесвенные параметры заявки. Все поля группы обязательны.
Tag Поле Описание Допустимые значения
38 OrderQty Размер заявки Целое число. Если число будет содержать дробную часть,
сообщение будет отвергнуто
ГРУППА INSTRUMENT
Указывает конкретный биржевой инструмент, используемый в заявке. Все поля группы обязательны.
Tag Поле Описание Допустимые значения
55 Symbol Код символа Допустимые коды определяются биржей.
461 CFICode Тип инструмента Класс финансового инструмента по стандарту ISO-10962
CFICODE, КОД ISO-10962
Значения поля CFICode регулируются стандартом ISO 10962 (Ценные бумаги и относящиеся к ним финансовые
инструменты – Классификация финансовых инструментов). Ниже приведены некоторые популярные значения:
 CFICode Описание Описание
ESXXXX Equity Common Shares Обыкновенные акции
EMXXXX Equity Miscellaneous or Other (e.g. Exchange
Traded Funds)
Другие акции (напр. торгуемый индексный фонд)
EPXXXX Equity Preferred Shares Привелигированные акции
EUXXXX Equity Units (unit trusts/mutual funds)
DXXXXX Debt (Fixed Income) Облигации
DCXXXX Debt Convertible Bond
FXXXXX Future Фьючерсы
MRCXXX Misc, Referential Instrument, Currency Валюта
MRIXXX Misc, Referential Instrument, Index Индексы
MRRXXX Misc, Referential Instrument, Interest Rate
OCXXXX Option - Call Опцион call
OPXXXX Option - Put Опцион put
RWXXXX Right Warrant
RWXCXX Covered Warrant Обеспеченная гарантия
XXXXXX Любой инструмент
Сивол X, поставленный в любой позиции в коде означает «любое значение» или «не определено». Так, например,
код «EXXXXX» означает «любая акция», а «OXXXXX» – «любая облигация». ОСТАЛЬНЫЕ ПОЛЯ
Большинство полей соотвествует FIX-спецификации. Если определённые параметры сделки не могут быть
реализованы на бирже, заявка будет отклонена с указанием причины.
Ниже приведены некоторые из поддерживаемых Системой полей fix-сообщений. В колонке «Допустимые
значения» указано поддерживаемое подмножество предусмотренных протоколом значений. Если какое-либо
поле не приведено в таблице, следует придерживаться предписаний спецификации FIX4.4.
Tag Поле Описание Допустимые значения
11 ClOrdID Пользовательский
идентификатор
отправленной заявки
Любая строка. Требуется соблюдение уникальности
идентификаторов до сброса FIX сессии
39 OrdStatus Состояние заявки 0 – New – Принята
1 – Partially Filled - Частично выполнена
2 – Filled - Выполнена
3 – Done for day – Сессия завершена
4 – Canceled – Отменена
8 – Rejected – Отклонена
40 OrdType Тип заявки 1 – Market – рыночная
2 – Limit – лимитированная
44 Price Цена Передаётся в виде десятичного числа. Цена будет округлена до
ближайшего допустимого значения для данного финансового
инструмента
54 Side Сторона сделки 1 – Buy – покупка
2 – Sell – продажа
58 Text Текстовое примечание к
отчёту
Все русские буквы будут заменены на латинскую транскрипцию
59 TimeInForce Время активности заявки 0 – Day – торговая сессия
1 – Good till canceled – заявка будет активна до отмены
3 – Immediate Or Cancel – выполняется сразу либо снимается
103 OrdRejReason Причина отказа от
исполнения заявки.
Используется при
ExecType = Rejected
1 – Unknown symbol – инструмент не найден
2 – Exchange closed – нет торговой сессии
3 – Order exceeds limit – превышен лимит
6 – Duplicate order – неуникальный идентификатор
99 – Other – другое
150 ExecType Тип отчета 0 – New – Заявка принята
3 – Done for day – Сессия завершена
4 – Canceled – Заявка удалена
8 – Rejected – Заявка отклонена
F – Trade – Полное или частичное исполнение
I – Order Status – Статус заявки
355 EncodedText Текстовое примечание к
отчёту
Текст примечания, содержащий русские буквы. Передаётся в
кодировке UTF-8
373 SessionReject
Reason
Причина передачи
сообщения Reject