FIX Protocol: еще немного подробностей

FIX Protocol — протокол передачи финансовых сообщений между участниками финансового рынка. В настоящее время наиболее часто встречаются версии протокола FIX 4.2 (старый добрый конек, но все еще используется), FIX 4.4 (на него переходят те, кого уже не устраивает FIX 4.2), и FIX 5.0SP2 — самый современный на настоящее время.

Хоть протокол за время своего существования претерпел множество изменений, некоторые его базовые основы остались неизменными. В данной статье я расскажу о базовых тегах FIX-сообщений, которые надо знать на зубок.

Сообщения FIX-протокола делятся на сессионные и прикладные. Сессионные сообщения — это сообщения login, hearbeat, message resend, logout, и синхронизации. Они отвечают за установление и поддержание связи между участниками рынка. Прикладные сообщения — сообщения, связанные с передачей информации об ордерах и их исполнении. Давайте остановимся подробнее на прикладных сообщениях.

tag11 ClOrdID

Любое прикладное сообщение должно содержать информацию об ордере, с которым оно связано. Номер ордера записывается в теге 11, например, 11=HKFF88823. Стоит отметить, что значение тега 11 вовсе может не совпадать с кодом ордера в вашей системе управления ордерами (order managment system). Скажем, в вашей системе есть ордер с кодом «HJKJSHD8712638fddf», потом вы этот ордер открываете на стороне брокера, отправляя ему сообщение 35=D и тегом 11=HKFF88823. Теперь брокер будет идентифицировать на своей стороне ваш ордер как HKFF88823. И когда он будет посылать вам сообщения о подтверждении ордера или его исполнении, вы будете получать сообщения, в которых тоже будет тег 11=HKFF88823. На своей стороне вы должны ассоциировать сообщения с тегом 11=HKFF88823 с ордером HJKJSHD8712638fddf и менять его статус соответственно.

Для чего нужна такая сложность? Скажем, ваш ордер HJKJSHD8712638fddf очень большой, и вы решили поделить его на части и исполнить по «кусочкам». Каждый кусочек, отправляясь к брокеру, будет иметь своё значение в теге 11. А ответы, получаемые от брокера, по разным кусочкам, будут складываться на вашей стороне в статус главного ордера HJKJSHD8712638fddf. Как вы уже поняли, наиболее часто так происходит при использовании алогритмической торогвли для исполнения большого ордера по частям.

tag54 Side

Сообщает, что именно вы хотите сделать: купить (1, Buy) или продать (2, Sell). Другие менее употребительные значения для тега 54 можете посмотреть в спецификации.

tag55 Symbol

Сообщает, что именно вы хотите продать/купить. Значение этого тега зависит от того, как именно идентифицирует тот или иной финансовый инструмент сторона, принимающая сообщение. Это может быть биржевой индентификатор инструмента (Exchange Symbol), код ISIN, код RIC (Reuters Identification code), ISIN, Bloomberg Code. Если принимающая сторона поддерживает несколько вариантов идентификации, вы можете для единообразия использовать комбинацию тегов 22 и 48, чтобы передать тот идентификатор, который вам больше нравится. Принимающая сторона должна тогда принять во внимание комбинацию тегов 22/48, а то, что записано в теге 55 — проигнорировать.

[ См.также: Что такое симвология и какая она бывает ]

tag40 OrdType

Указывает тип ордера: рыночный (1, Market), лимитный (2, Limit). Другие менее употребительные значения для тега 40 можете посмотреть в спецификации.

Рыночный ордер исполняется немедленно по текущей цене предложения-покупки. Некоторые биржи не поддерживают рыночные ордера как класс. Связано это с большим риском для инвестора (если он по ошибке подаст рыночный ордер), и для рынка (рыночные ордера сильно двигают рынки в случае  финансовой паники).

Лимитный ордер попадает в книгу лимитных ордеров биржи (limit order book, «стакан»), если цена ордера совпадает или ниже/выше лучшей цены покупки/продажи (Best bid-offer).

tag44 Price

Сообщает, по какой цене вы хотите купить/продать указанный инструмент. Если ордер рыночный (тег 40=1), то тег 44 не нужен, а если там и будет что-то указано, значение тега 44 игнорируется.

Чаще всего в теге 44 для рыночных ордеров ставят просто 0. Но примите во внимание, что в некоторых случаях, например при торговле деривативами, цена 0 — реальная цена инструмента (Calendar spreads например), и она может быть даже отрицательная!

В зависимости от ситуации значение цены в теге 44 может быть вещественным числом, например 45.99.

Количество знаков после десятичной точки зависит от минимального значения цены (minimal price increment). Принимающая сторона может не принять ордер, если цена не кратна этому значению. Был курьезный случай в моей практике, когда принимающая сторона учитывала в цене только определенное количество знаков после десятичной точки, а все остальные попросту отбрасывала. Это привело, например, к случаю, когда клиент послал ордер с ценой 45.6789, а биржа поняла эту цену как 45.67. После этого клиент послал сообщение с изменением цены ордера на 45.6777, а биржа прислала «Reject/отлуп», с ошибкой «вы в своем ордере ничего не поменяли»: ведь цена по мнению биржи осталась той же: 45.67.

Во избежание работы с дробными числами некоторые биржи требуют присылать в теге 44 целое число, умножая цену на ценовой множитель (price multiplier). Так в потоке рыночных данных цена какой-то акции будет 45.67. Но в FIX-сообщении на ее покупку в теге 44 будет стоять значение 4567. Разумеется, при получении отчетов об исполнении ордеров, значение в теге 44 надо будет целочисленно делить на price multiplier, чтобы получить реальную цену.

tag38 OrderQty

Сообщает, в каком количестве вы хотите купить/продать указанный инструмент. Это может быть количество акций, или количество лотов. Все зависит от того, что именно означает значение в теге 38 для принимающей стороны.

tag59 TimeInForce (TIF)

Сообщает длительность ордера (expiration): дневной (0, Day), бессрочный (1, Good Till Cancel/GTC), срочный (6, Good Till Date/GTD), исполнить-или-отменить (3, Immediate or Cancel (IOC)), всё-или-отменить (Fill or Kill (FOK)). Каждая биржа поддерживает свой набор TIF-ов исходя из своих собственных соображений.

Пример

Пример FIX-сообщения с указанными тегами:

8=4.2; 9=xxx; 35=D; 54=1; 55=IBM; 38=100; 44=500; 40=2; 59=0; 10=xx;

Купить (54=1) 100 акций (38=100) компании IBM (55=IBM) по цене не больше, чем 500 у.е. (44=500) и отменить ордер в конце торгового дня, если ордер не исполнен или исполнен частично (59=0).

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s