Вступление
Dropcopy ляляля
RuTerminal Fix апи используется для получения информации торгового характера из системы RuTerminal.
https://www.fixtrading.org/packages/fix-5-0-sp2-volume-1-w-errata-20110818/
Подготовка
DataDictionary.xml
Подключение
Описание полей и их допустимых значений
Многие сообщения содержат пересекающийся набор полей. Так, например, каждое сообщение должно содержать поля группы Standard Header и Standard Trailer, несущие служебную информацию. Далее следует описание некоторых используемых групп и полей. Для каждого поля указаны:
• Тэг – уникальный идентификатор поля; используется при формировании FIX сообщения.
• Поле – имя поля; не используется при формировании FIX сообщения, введено для удобства, в качестве краткого описания.
• Наличие – признак, который показывает, должно ли поле обязательно присутствовать в сообщении:
• Y - обязательное поле;
• N - необязательное поле;
• C - обязательно при выполнении условия (указано в графе Описание).
• Тип - тип поля.
• Описание - детальное описание поля.
• Допустимые значения - дополнительные ограничения.
Символ "*" - признак отличия от стандартного FIX протокола.
Типы данных
Char
Символьный тип данных. Значение состоит из одного символа. Может содержать любую букву, цифру или знак препинания, кроме символа разделителя. Все значения этого типа являются чувствительными к регистру (m ! = M).
String
Строковый тип данных. Произвольная последовательность букв алфавита. Может содержать любой символ и знак препинания, кроме символа разделителя. Все значения этого типа являются чувствительными к регистру (value != Value)
Float
Число с плавающей запятой. Состоит из последовательности цифр с плавающей десятичной запятой и символа знака (символы ASCII «-«, «0» - «9» и «.»). При отсутствии десятичной запятой значение будет интерпретировано как целое число. Количество знаков справа от запятой устанавливается в соответствии с требованиями бизнеса и рынка, а также по договорённости между участниками. Обратите внимание, что числа с плавающей запятой допускают наличие ведущих нулей в начале числа в левой его части (00023.23" = "23.23"), а правая часть числа с плавающей точкой может содержать конечные нули (23.0" = "23.0000" = "23" = "23.").
Price
Число с плавающей запятой, показатель цены. Содержит 16 знаков слева от запятой и 5 знаков справа от запятой.
Int
Целочисленный тип данных. Последовательность цифр без десятичного разделителя, может содержать символ знака (символы ASCII «-«, «0» - «9» и «.»), который занимает один байт (положительное значение «99999», отрицательное значение «-99999»). Обратите внимание, что целочисленные значения могут содержать ведущие нули ("00023" = "23"). Пример записи: значение «723», записанное в поле «21» будет представлено как |21=723|, значение «-723», записанное в поле «21» будет представлено как |21=-723|.
LocalMktDate
Дата по местному времени в формате ГГГГММДД. Допустимые значения: ГГГГ = 0000-9999, ММ = 01-12, ДД = 01-31
UTCTimestamp
«Время/Дата» по стандарту UTC в формате ГГГГММДД-ЧЧ:ММ:СС:ссс (миллисекунды) или ГГГГММДД-ЧЧ:ММ:СС:ссссссссс (наносекунды).
RT_PRODUCT
Продукт в нотации системы RuTerminal.
Значение | Описание |
---|---|
Fx | |
FxNdf | |
FxSwap |
Группа Standard header
Стандартный заголовок, который должно содержать каждое сообщение.
Тэг | Поле | Наличие | Тип | Описание | Допустимые значения |
---|---|---|---|---|---|
Группа Standard trailer
Протокол сессионного уровня
Протокол сессионного уровня обеспечивает идентификацию сторон взаимодействия, гарантированную доставку и последовательную обработку сообщений, контроль состояния соединения и возможность восстановления сессии в случае сбоев.
Logon - Инициирует сессию и соединение.
Logout - Инициирует или подтверждает разрыв соединения.
Heartbeat - Передаётся периодически для контроля состояния соединения.
Test Request - Запрос внеочередного Heartbeat от противоположной стороны.
Reject - Отправляется в ответ на неверное сообщение (некорректный заголовок, контрольная сумма и т.п.), пришедшее от другой стороны.
Resend Request - Запрос повторной передачи сообщений в определённом интервале номеров.
Sequence Reset - Используется при повторной пересылке для пропуска административных сообщений - Gap Fill mode. Используется для сброса счётчика номеров сообщений - Reset mode. Все сообщения могут передаваться в обоих направлениях.
Logon
Logout
Heartbeat
Получение сделок
TradeCaptureReportRequest
The optional date or time range-specific filter criteria (within NoDates <580> repeating group) can be used in one of two modes:
"Since" a time period. NoDates <580>=1 with first TradeDate <75> (and optional TransactTime <60>) indicating the "since" (greater than or equal to operation) point in time.
"Between" time periods. NoDates <580>=2 with first TradeDate <75> (and optional TransactTime <60>) indicating the "beginning" (greater than or equal to operation) point in time and the second TradeDate <75> (and optional TransactTime <60>) indicating the "ending" (less than or equal to operation) point in time.
Для подписки не передается TradeDate
Тэг | Поле | Наличие | Тип | Описание | Допустимые значения |
---|---|---|---|---|---|
TradeRequestID | String | ||||
TradeRequestType | 0 = All Trades | ||||
SubscriptionRequestType | 0 = Snapshot 1 = Snapshot + Updates (Subscribe) 2 = Disable previous Snapshot + Update Request (Unsubscribe) | ||||
NoDates | Нет | Количество переданных дат. Если передана одна дата, то вернуться сделки за эту дату, если передано две даты, то будет возвращены сделки за выбранный период включительно | 1 или 2 | ||
=> | TradeDate |
Ошибки
TradeCaptureReportAck
Тэг | Поле | Наличие | Тип | Описание | Допустимые значения |
---|---|---|---|---|---|
568 | TradeRequestID | Да | String | Уникальный идентификатор запроса | |
569 | TradeRequestType | Да | Int | Тип запроса | 0 = All Trades |
749 | TradeRequestResult | Да | Int | Результат запроса | |
750 | TradeRequestStatus | Да | Int | Статус запроса | 2 |
58 | Text | Да | String |
Причины отклонения (TradeRequestResult)
Код | Текст | Описание |
---|---|---|
101 | Duplicate TradeRequestID | Идентификатор сообщения был использован ранее |
8 | TradeRequestType={value} not supported | Недопустимое значение TradeRequestType |
99 | Something went wrong | Непредвиденная ошибка. |
Результат
TradeCaptureReportAck
Тэг | Поле | Наличие | Тип | Описание | Допустимые значения |
---|---|---|---|---|---|
568 | TradeRequestID | Да | String | Уникальный идентификатор запроса | |
569 | TradeRequestType | Да | Int | Тип запроса | 0 = All Trades |
749 | TradeRequestResult | Да | Int | Результат запроса | 0 |
750 | TradeRequestStatus | Да | Int | Статус запроса | 0 = Запрос принят 1 = Запрос выполнен |
TradeCaptureReport
Тэг | Поле | Наличие | Тип | Описание | Допустимые значения |
---|---|---|---|---|---|
571 | TradeReportID | Да | String | Уникальный идентификатор сделки в системе RuTerminal | |
487 | TradeReportTransType | Да | Int | Тип отчета | 0 - New |
TradeRequestID | Да | ||||
75 | TradeDate | Да | LocalMktDate | Дата регистрации сделки | |
60 | TransactTime | Да | UTCTimestamp | Время регистрации сделки в UTC. | |
MaturityDate | |||||
Currency | Валюта | ||||
SettlCurrency | |||||
LastPx | Цена | ||||
LastQty | Сумма сделки | ||||
150 | ExecType | 0 - New | |||
460 | Product | 9 - MoneyMarket | |||
167 | SecurityType | MM | |||
Text | |||||
PriceType | |||||
11001 | RT_PRODUCT | RT_PRODUCT | Продукт в нотации RuTerminal |
Получение индикативных котировок
MarketDataRequest (35=V)
Тэг | Поле | Наличие | Тип | Описание | Допустимые значения |
---|---|---|---|---|---|
262 | MDReqID | Да | String | Уникальный идентификатор запроса | |
263 | SubscriptionRequestType | Да | Char | Тип подписки | 0 = Текущее значение 1 = Текущее значение + подписка на обновления 2 = Отписка от обновлений |
263 | MarketDepth | Да | int | Глубина запроса | 1 = top of book |
265 | MDUpdateType | Да | Char | Тип запрошенных обновлений | 1 = Частичное обновление |
267 | NoMDEntryTypes | Да | int | Количество запрошенных полей | |
=> 269 | MDEntryType | Да | int | Тип котировки | 0 = Bid 1 = Offer |
146 | NoRelatedSym | Да | int | Количество групп символов | |
=> 48 | SecurityID | Да | String | Идентификатор инструмента в схеме SecurityIDSource | RuTerminal. Instruments & Codes |
=> 22 | SecurityIDSource | Да | String | Схема идентификаторов | 177 = HiHiClubCode |
1070 | MDQuoteType | Да | int | Identifies market data quote type. | 0 = Indicative |
Parties | |||||
=> | NoPartyIDs | ||||
==> | PartyID | Да | Идентификатор источника котировок в схеме (PartyIDSource) | ||
==> | PartyIDSource | Да | Схема идентификаторов | ||
==> | PartyRole | Да | Роль источника | 61 = Market data market |
Ошибки
Формат ответа с ошибкой
MarketDataRequestReject
Тэг | Поле | Наличие | Тип | Описание | Допустимые значения |
---|---|---|---|---|---|
262 | MDReqID | Да | String | Уникальный идентификатор запроса | |
281 | MDReqRejReason | Да | String | Причина отклонения |
Причины отклонения (MDReqRejReason)
Код | Текст | Описание |
---|---|---|
1 | Duplicate MDReqID | Идентификатор сообщения был использован ранее |
0 | SecurityID={SecurityIDSource}(SecurityIDSource={SecurityIDSource}) Not found | Не найден интрумент |
4 | SubscriptionRequestType={value} not supported | Недопустимое значение SubscriptionRequestType |
5 | MarketDepth={value} not supported | Недопустимое значение MarketDepth |
6 | MDUpdateType={value} not supported | Недопустимое значение MDUpdateType |
8 | MDEntryType={value} not supported | Недопустимое значение MDEntryType |
Результат
MarketDataSnapshotFullRefresh
Тэг | Поле | Наличие | Тип | Описание | Допустимые значения |
---|---|---|---|---|---|
262 | MDReqID | Да | String | Идентификатор запроса | |
NoMDEntries | |||||
=> | SecurityID | Да | Идентификатор инструмента в системе SecurityIDSource | ||
=> | SecurityIDSource | Да | Тип источника идентификаторов | ||
=> | MDEntryType | Да | Тип котировки | 0 - Bid 1 - Offer | |
=> | MDEntryPx | Цена | |||
=> | MDEntryDate | Да | Дата котировки | ||
=> | MDEntryTime | Да | Время котировки | ||
| |||||
=> | PriceType | Да | Тип цены | ||
Parties | |||||
=> | NoPartyIDs | ||||
==> | PartyID | Да | Идентификатор источника котировок в схеме (PartyIDSource) | ||
==> | PartyIDSource | Да | Схема идентификаторов | ||
==> | PartyRole | Да | Роль источника | 61 = Market data market |
MarketDataIncrementalRefresh
Тэг | Поле | Наличие | Тип | Описание | Допустимые значения |
---|---|---|---|---|---|
MDReqID | |||||
NoMDEntries | |||||
=> | SecurityID | ||||
=> | SecurityIDSource | ||||
=> | MDEntryType | ||||
=> |
| ||||
=> | MDEntryDate | ||||
=> | MDEntryTime | ||||
=> | PriceType | ||||
=> |
| ||||
Parties | |||||
=> | NoPartyIDs | ||||
==> | PartyID | Да | Идентификатор источника котировок в схеме (PartyIDSource) | ||
==> | PartyIDSource | Да | Схема идентификаторов | ||
==> | PartyRole | Да | Роль источника | 61 = Market data market |
Регистрация индикативных котировок
В разработке
Приемочные испытания
Пожалуйста пройдите через следующие приемочные тесты для подключения к торговой системе RuTerminal. Если ваша система не поддерживает какие либо сообщения, просто пропустите соответствующие шаги.
- Подключиться, создать сессию
- Получить сделку Fx
- Получить сделку FxSwap
- Получить сделку Dp
- Отключиться
- Подключиться, проверить что не сброшен счетчик