Перейти к содержанию

Модель коммуникации

Введение

FIX API использует сессионную коммуникацию. Сессия определяется как коммуникация между двумя сторонами: инициатором (клиентом), стороной, которая инициирует коммуникацию, и акцептором (сервером), стороной, которая получает запрос на соединение от инициатора.

Сервер проверяет запросы клиента, используя сообщение Logon.

Протокол сессии FIX

Каждая сессия поддерживает двунаправленный обмен сообщениями между клиентом и сервером cTrader. Сессия может включать несколько физических соединений и поддерживается с использованием порядковых номеров.

Каждое новое сообщение в рамках одной сессии получает уникальный порядковый номер, начиная с 1 (единицы). Обе стороны полагаются на порядковые номера для поддержания упорядоченной коммуникации. Пропущенные сообщения повторно передаются по двустороннему соглашению между обеими сторонами.

Типичный поток сессии:

  1. Клиент начинает сессию с сообщения Logon.
  2. Клиент обменивается прикладными сообщениями с сервером.
  3. Сессия заканчивается сообщением Logout.

Категории сообщений протокола cTrader FIX

Как определено в протоколе FIX, сервер cTrader FIX использует 2 различных уровня данных: системный и прикладной.

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

Системные (административные) сообщения

  • Heartbeat (клиент ↔ cTrader) – используется для проверки канала связи между двумя сторонами.
  • Test request (клиент ↔ cTrader) – используется для проверки работоспособности канала связи.
  • Logon (клиент → cTrader) – сообщение аутентификации клиента.
  • Logon (клиент → cTrader) – нормальное завершение сессии.
  • Resend request (клиент ↔ cTrader) – запрос на повторную передачу определенных прикладных сообщений.
  • Reject (клиент ↔ cTrader) – ошибка проверки на уровне сессии.
  • Sequence reset (клиент ↔ cTrader) – в случае проблем со связью восстанавливаются пропущенные сообщения или последовательность сбрасывается, чтобы игнорировать пропущенные сообщения.

Прикладные сообщения

  • Market data request (клиент → cTrader) – общий запрос рыночных данных.
  • Market data incremental refresh (клиент ← cTrader) – ответы на сообщение запроса рыночных данных.
  • New order single (клиент → cTrader) – используется для электронной отправки ордеров брокеру для исполнения.
  • Execution report (клиент ← cTrader) – используется для отправки информации о статусе ордера FIX-клиенту, такой как подтверждения, исполнения и незапрошенные изменения.
  • Business message reject (клиент ← cTrader) – используется для отклонения запроса FIX-клиента по причинам, не связанным с сессией.

Структура сообщения FIX

В этом разделе объясняется, как составляется сообщение FIX API, описывается формат сообщения FIX и помогает пользователям понять концепцию пары тег-значение.

Каждое сообщение должно содержать 3 части:

  • Заголовок – каждому административному или прикладному сообщению предшествует стандартный заголовок. Заголовок определяет тип сообщения, версию FIX, длину сообщения, назначение, порядковый номер, источник и время.
  • Тело – содержимое тела сообщения определяется типом сообщения, указанным в заголовке.
  • Окончание – каждое сообщение, административное или прикладное, завершается стандартным окончанием. Окончание используется для разделения сообщений и содержит трехзначное символьное представление значения CheckSum <10>.

Формат сообщения FIX

Сообщение FIX представляет собой набор полей. Каждое поле - это пара тег-значение, отформатированная как {тег}={значение}. Например, 54=2, что означает тип ордера - продажа.

Тег

  • FIX использует предопределенные теги.
  • Каждый тег представляет определенное поле.
  • Каждому тегу присваивается предопределенный номер.
  • Спецификация cTrader FIX предоставляет список полей и соответствующих номеров тегов.

Значение

  • Значения представляют значение, присвоенное тегу.
  • Значения могут быть только одного из следующих типов данных: целое число, число с плавающей запятой, символ, время, дата, данные или строка.

Все сообщения в cTrader FIX API начинаются с 8=FIX.x.y, где x.y - это версия протокола FIX. В конце каждого сообщения должно быть поле 10=xyz, где xyz представляет собой сумму всех двоичных значений в сообщении, называемую контрольной суммой.

Контрольная сумма помогает выявить любые проблемы при передаче, в частности потерю пакетов, позволяя получателю узнать, отсутствует ли какая-либо часть сообщения.

Если в FIX-сообщении для cTrader/cServer используется тег Symbol(55), необходимо указать FIX ID инструмента. Это значение может отличаться у разных брокеров. Вы можете найти поле FIX ID инструмента в приложении cTrader этого брокера в окне информации об инструменте.

Пример сообщения

8=FIX.4.4|9=126|35=A|34=1|49=theBroker.12345|57=TRADE|50=any_string|52=20170117-08:03:04|56=CSERVER|98=0|108=30|553=12345|554=passw0rd!|10=131|
# Тег Название тега Значение Описание
8 BeginString 4.4 Версия FIX
9 BodyLength 102 Длина тела сообщения составляет 102 символа
35 MsgType A Тип сообщения — Logon
34 MsgSeqNum 1 Порядковый номер сообщения — 1
49 SenderCompI D broker.1047 ID торговой стороны, где broker" — это уникальный BrokerUID, предоставленный cTrader, а "1047" — это числовой идентификатор торгового счета."
57 TargetSubID TRADE Дополнительный квалификатор сеанса. Возможные значения: "QUOTE","TRADE".
50 SenderSubID QUOTE Присвоенное значение, используемое для идентификации конкретного отправителя сообщения
52 SendingTime 20131129- 15:40:10.276 Время передачи сообщения — 29 ноября 2013 г. (YYYYMMDD) в 15:40:10 и 276 миллисекунд
56 TargetCompID CSERVER Получатель сообщения — CSERVER. Это единственное допустимое значение в cTrader FIX API.
98 EncryptMethod 0 В настоящее время единственное допустимое значение — "0" (ноль) = NONE_OTHER (шифрование не используется)
108 HeartBtInt 30 Интервал контрольного сигнала в секундах. Значение задается в файле 'config.properties' (на стороне клиента) как SERVER.POLLING.INTERVAL'. 30 секунд — интервал по умолчанию. Если HeartBtInt установлен в 0, сообщение контрольного сигнала не требуется.
553 Имя пользователя 1047 Числовой ID пользователя
554 Пароль MyPassword1 Пароль пользователя
10 CheckSum 000 Контрольная сумма вычисляется следующим образом: суммируются все байты сообщения до поля контрольной суммы (не включая его), затем результат преобразуется в число по модулю 256 с префиксом "0" для получения трехзначного числа.