Описание

API к системе клиринга ОТС деривативов основывается на сообщениях стандарта FIX версии 5.0 SP2. Диаграммы взаимодействия, описанные ниже, также являются стандартными workflows для протокола FIX.

Авторизация

Работа со шлюзом через HTTP осуществляется в session-less режиме. Это означает, что при каждом обращении к сервису участник должен передать в HTTP-заголовке свой логин и пароль. Для этого нужно взять строку вида Логин:Пароль и конвертировать ее методом base64.

Строку с результатом указать в заголовке Authorization: Basic.

Сценарий взаимодействия

API_MOEX

Получение списка подтвержденных сделок и сделок, ожидающих подтверждения

API к системе клиринга ОТС деривативов позволяет получать списки:

  1. заключенных Участником сделок, подтверждённых второй стороной
  2. заявок на регистрацию сделок, выставленных Участником, и пока не подтвержденных второй стороной
  3. заявок на регистрацию сделок, выставленных на Участника, и пока не подтвержденных им.

Также возможны и другие комбинации фильтров сделок и заявок по выбору Участника.

Для запроса любого списка сделок или заявок участник должен послать FIX сообщение TradeCaptureReportRequest (35=AD), указав в запросе правило отбора сделок (набор критериев, которым должны соответствовать сделки).

Биржа обязана ответить на это сообщение при помощи TradeCaptureReportRequestAck(35=AQ) в случае отсутствия сделок или заявок, соответствующих критериям запроса.

Также в ответ на запрос TradeCaptureReportRequest Биржа пришлет одну или несколько сделок, соответствующих критериям, указанным в запросе, в формате FIX сообщения TradeCaptureReport.

Состав полей этих сообщений и примеры их заполнения указаны в Таблицах 1, 2 и 3 ниже.

Дополнительные поля в сообщении TradeCaptureReport, специфичные для ответа на запрос списка сделок, выделены оранжевым цветом.

Таблица 1. TradeCaptureReportRequest – примеры запросов списков сделок или заявок

Tag No

Tag Name

Пример заполнения

Об. Поле?

Комментарии

35

MsgType

AD

+

Тип сообщения TradeCaptureReportRequest

34

MsgSeqNum

123

+

Порядковый номер сообщения

49

SenderCompID

XXX

+

Уникальный идентификатор Участника

56

TargetCompID

MOEX

+


52

SendingTime

20140128-09:32:50


Время отсылки запроса

568

TradeRequestID

87654321

+

ID запроса на получение списка сделок


263

SubscriptionRequestType

0

+

0 - запрос данных без установления подписки на обновления

Правило отбора сделок или заявок (блок критериев)

См. ниже примеры правил отбора для каждого из 3-х списков, описанных выше

Также возможны и другие комбинации критериев отбора

10

CheckSum


+



Правило отбора для списка заключенных Участником сделок.

569

TradeRequestType

1

+

Тип запроса:
0 - все сделки
1 - все подтвержденные сделки, соответствующие критериям в запросе
2 - все  Правило отбора для списка заключенных Участником сделок неподтвержденные сделки, соотв. критериям в запросе


453

NoPartyIDs

1

+


448

PartyID

«BROKERFIRM»

+

Запрашиваем все сделки Контрагента BROKERFIRM

447

PartyIDSource

D

+


452

PartyRole

1

+

Код контрагента в поле 448


Правило отбора для списка заявок на регистрацию сделок, выставленных на Участника, и пока не подтвержденных им.

569

TradeRequestType

2

+

Тип запроса:
0 - все сделки
1 - все подтвержденные сделки, соответствующие критериям в запросе
2 - все неподтвержденные сделки, соотв. критериям в запросе


453

NoPartyIDs

1

+


448

PartyID

«BROKERFIRM»

+

Запрашиваем все сделки, выставленные на Контрагента BROKERFIRM

447

PartyIDSource

D

+


452

PartyRole

17

+

Код контрагента-второй стороны сделки в поле 448

Таблица 2. TradeCaptureReportRequestAck

Tag No

Tag Name

Пример заполнения

Об. Поле?

Комментарии

35

MsgType

AQ

+

Тип сообщения TradeCaptureReportRequestAck

34

MsgSeqNum

123

+

Порядковый номер сообщения

49

SenderCompID

MOEX

+


56

TargetCompID

XXX

+

Уникальный идентификатор Участника

52

SendingTime

20140128-09:32:50


Время отсылки запроса

568

TradeRequestID

87654321

+

ID запроса на получение списка сделок

569

TradeRequestType

1

+

Тип запроса:
0 - все сделки
1 - все подтвержденные сделки, соответствующие критериям в запросе
2 - все неподтвержденные сделки, соотв. критериям в запросе

263

SubscriptionRequestType

0

+

0 - запрос данных без установления подписки на обновления

748

TotNumTradeReports

5

+

Общее кол-во сделок, возвращаемых в ответ на запрос
0 - если нет сделок, соотв. критериям в запросе

749

TradeRequestResult

0

+

0 - успех
любое другое значение - код ошибки при обработке запроса

750

TradeRequestStatus

0

+

0 - запрос принят
2 - запрос отклонен

10

CheckSum


+



Таблица 3. TradeCaptureReport – одно или несколько сообщений, в ответ на запрос списка сделок

Tag No

Tag Name

Пример заполнения

Об. Поле?

Комментарии

35

MsgType

AE

+

Тип сообщения TradeCaptureReport

34

MsgSeqNum

123

+

Порядковый номер сообщения

49

SenderCompID

MOEX

+


56

TargetCompID

XXX

+

Уникальный идентификатор Участника

52

SendingTime

20140128-09:32:50


Время отсылки сообщения

60

TransactTime

20140128-09:32:50

+

Время заключения сделки

75

TradeDate

20140128

+

Дата заключения сделки

568

TradeRequestID

87654321

+

ID запроса на получение списка сделок

571

TradeReportID

123456

+

Уникальный идентификатор сообщения

1003

TradeID

6789123

+

если MatchStatus=0

Идентификатор сделки на Бирже, если сделка уже была подтверждена

856

TradeReportType

0

+

  • 0 - Новая сделка
  • 6 – Отмена
  • 4 - Добавочная информация
  • 5 - Изменение сделки

1123

TradeHandlingInstr

0

+

0 - подтверждение заявки на сделку от участника

150

ExecType

F

+

F - Trade

573

MatchStatus

0

+

0 - matched
1 - unmatched

748

TotNumTradeReports

5

+

Общее кол-во сделок, возвращаемых в ответ на запрос

912

LastRptRequested

N

+

Y - последнее сообщение в ответ на запрос
N - не последнее сообщение

32

LastQty

5000000

+

Количество контрактов

31

LastPx

1

+

Цена сделки

423

PriceType

1


1 - цена выражена в %

55

Symbol

N/A


не применимо в нашем случае

541

MaturityDate

20140331

+

Дата окончательных расчетов по сделке

22

SecurityIDSource

I

+

I - описание контракта в формате FpML в поле 351

347

MessageEncoding

UTF-8



350

EncodedSecurityDescLen


+

Длина описания контракта в поле 351

component

EncodedSecurityDesc


+

Описание контракта в формате FpML

15

Currency


+

Основная валюта контракта

120

SettlCurrency



Валюта поставки контракта

552

NoSides

1

+

Всегда 1

54

Side

1

+

  • 1 - Покупка,
  • 2 - Продажа

453

NoPartyIDs

4

+


448

PartyID

«CPTYFIRM»

+


447

PartyIDSource

D

+


452

PartyRole

17

+

Код контрагента– второй стороны сделки в поле 448

448

PartyID

«BROKERFIRM»

+


447

PartyIDSource

D

+


452

PartyRole

1

+

Код контрагента в поле 448

448

PartyID

«ACCOUNT»

+


447

PartyIDSource

D

+


452

PartyRole

38

+

Торговый счет контрагента в поле 448

448

PartyID

«JOHNDOE»



447

PartyIDSource

D



452

PartyRole

11


Код трейдера в поле 448

10

CheckSum


+


Получение справочных данных

Для получения Участником справочных данных (список собственных счетов, список контрагентов) используется запрос PartyDetailsListRequest (35=CF). API должен уметь обрабатывать запрос PartyDetailsListRequest и возвращать ответ на него в формате сообщения PartyDetailsListReport (35=CG).

Таблица 7. PartyDetailsListRequest – примеры запросов справочных данных 

Tag No

Tag Name

Пример заполнения

Об. Поле?

Комментарии

35

MsgType

CF

+

Тип сообщения PartyDetailsListRequest

34

MsgSeqNum

123

+

Порядковый номер сообщения

49

SenderCompID

XXX

+

Уникальный идентификатор Участника

56

TargetCompID

MOEX

+


52

SendingTime

20140128-09:32:50


Время отсылки запроса

1505

PartyDetailsListRequestID

87654321

+

Уникальный идентификатор сообщения

263

SubscriptionRequestType

0

+

0 - запрос данных без установления подписки на обновления

453

NoPartyIDs

1

+

Если RequestedPartyRole=24


448

PartyID

«OUR_FIRM»


447

PartyIDSource

D


452

PartyRole

1

Код Участника, для которого мы запрашиваем список счетов. Счета можно запрашивать только для собственной фирмы (Участника)

1508

NoRequestedPartyRoles

1

+


1509

RequestedPartyRole

1 или 24

+

1 – запрашиваем список всех Участников

24 – запрашиваем список собственных торговых счетов (код Участника-собственника счетов указывается в поле 448)

10

CheckSum


+



Таблица 8. PartyDetailsListReport – примеры ответов на запрос справочных данных

Tag No

Tag Name

Пример заполнения

Об. Поле?

Комментарии

35

MsgType

CG

+

Тип сообщения PartyDetailsListReport

34

MsgSeqNum

123

+

Порядковый номер сообщения

49

SenderCompID

MOEX

+


56

TargetCompID

XXX

+

Уникальный идентификатор Участника

52

SendingTime

20140128-09:32:50


Время отсылки запроса

1510

PartyDetailsListReportID

12345

+

Уникальный идентификатор сообщения

1505

PartyDetailsListRequestID

87654321

+

ID запроса на получение справочных данных

1511

RequestResult

0

+

0 – успех

1 – ошибка

3 – ошибка доступа, запрос списка чужих счетов

1671

NoPartyDetails

х

+

Количество участников или собственных торговых счетов (элементов PartyDetail), возвращаемых в сообщении

1691

PartyDetailID

«FIRM_1»

+

Идентификатор экземпляра объекта (счет, участник)

1692

PartyDetailIDSource

D

+

Источник идентификатора экземпляра объекта

Какие значения?

1693

PartyDetailRole

1 или 24

+

1 – код Участника в поле 1691

24 – собственный торговый счёт в поле 1691

1328

RejectText

«описание ошибки»

+

Если RequestResult <> 0



10

CheckSum


+


Ниже представлена таблица с возможными условиями запроса и результатами:

  • CURRENT_USER - логин пользователя;
  • OUR_FIRM - участник, к которому привязан CURRENT_USER;
  • OTHER_FIRM - участник, к которому НЕ привязан CURRENT_USER;
#ReqTyp

PtyId R=1

Наша сторона

PtyId R=17

Сторона контрагент

РезультатTxtReqRsltReqStat Лог
1anynullnullОшибка: "ReqR must be specified"Pty not specified32SPFIAPI-10001

Сделки
21OUR_FIRMnull

Возвращаем все подтвержденные сделки OUR_FIRM (PtyId R=1)

Only one ReqR is allowed

SPFIAPI-10002
31nullOUR_FIRM

Ошибка:

"Ошибка, нельзя запрашивать сделки без указания Участника (Pty1)"

Executing Party not specified32SPFIAPI-10003
41OUR_FIRMOUR_FIRM

Ошибка,

"Нельзя запрашивать сделки, в которых я являюсь контрагентом"

Trades not found32SPFIAPI-10004
51OTHER_FIRMnull

Ошибка,

Нет доступа к сделкам участника (Pty с R=1 не соответствует логину)

Pty not specified32SPFIAPI-10005
61nullOTHER_FIRMВозвращаем все подтвержденные сделки с контрагентом OTHER_FIRM для MY_FIRMSExecuting Party not specified

SPFIAPI-10006
71OTHER_FIRMOTHER_FIRM

Ошибка,

"Нет доступа к сделкам участника (Pty с R=1 не соответствует логину)"

Pty not specified32SPFIAPI-10007
81OUR_FIRMOTHER_FIRMВозвращаем все подтвержденные сделки с контрагентом OTHER_FIRM


SPFIAPI-10008
91OTHER_FIRMOUR_FIRM

Ошибка,

"Нельзя запрашивать сделки, в которых я являюсь контрагентом"

Not correct Pty value92SPFIAPI-10009
10


R != 1 или R != 17Requested PartyRole ({0}) is not supported for this request32SPFIAPI-10010
11


Неизвестное значение PtyIdNot correct Pty value {0}32SPFIAPI-10011
12


Проверки пройдены успешно, но сделок нетNo trades found01SPFIAPI-10012
13


Что-то пошло не такUndefined Error. Contact the administrator992SPFIAPI-10013

Заявки
142OUR_FIRMnullВозвращаем все выставленные ордера участником OUR_FIRM


SPFIAPI-10014
152nullOUR_FIRMВозвращаем все ордера где контрагент OUR_FIRM


SPFIAPI-10015
162OUR_FIRMOUR_FIRMЗаявки не будут возвращеныNo trades found01SPFIAPI-10016
172OTHER_FIRMnullВозвращаем все входящие ордера от OTHER_FIRM, и контрагент MY_FIRMS Not correct Pty value92SPFIAPI-10017
182nullOTHER_FIRM

Возвращаем все ордера, где контрагент OTHER_FIRM и инициатор MY_FIRMS

Executing Party not specified32SPFIAPI-10018
192OTHER_FIRMOTHER_FIRM

Нельзя запрашивать чужие заявки

Not correct Pty value92SPFIAPI-10019
202OUR_FIRMOTHER_FIRMВсе ордера выставленные OUR_FIRM и ожидающие подтверждения от OTHER_FIRM


SPFIAPI-10020
212OTHER_FIRMOUR_FIRMВсе ордера выставленные OTHER_FIRM и ожидающие подтверждения от OUR_FIRM


SPFIAPI-10021

Схемы сообщений и примеры

Ниже представлены схемы сообщений для формирования сообщения FpML указанного в поле component и сообщения FIXML:

  • Нет меток