Інституційний FIX API (4.2 / 4.4 / 5.0 / 5.2)
Інституційне підключення FIX 4.2, 4.4, 5.0 та 5.2: введення ордерів (:9878), Drop Copy у реальному часі (797=Y / 9406=Y), ринкові дані (:9879) та XML-схема QuickFIX.
SKILL.mdГотова навичка для Claude Code з підписуванням HMAC-SHA256, схемами /fapi/v1 і /fapi/v2 та захистом від витоку секретних ключів.
AGENTS.mdГотовий репозиторій AGENTS.md для OpenAI Codex CLI — правила мінімального кроку ціни, ліміти запитів і межі самостійного зберігання.
AGY.mdСпецифікація агентів Google Antigravity (agy) та Gemini з перевіреними асинхронними шаблонами виконання Python WebSocket + REST.
llms.txtМашинозчитуваний індекс усіх сторінок документації GaiaEx, схеми OpenAPI 3.0 та колекції Postman за однією URL-адресою.
1. Архітектура та огляд версій
Нативний інституційний FIX-шлюз GaiaEx на C++26 забезпечує детерміноване введення ордерів із наднизькою затримкою, Drop Copy у реальному часі, запити позицій та ордерів, а також потокову передачу ринкових даних L1/L2 через постійні сесії TCP/TLS.
Завантажити схему QuickFIX / OnixS XML: /fix-dictionary.xml — сумісна з QuickFIX (C++/Python/Go), QuickFIX/J, OnixS, OneZero та інституційними OMS-платформами. Налаштуйте клієнтський рушій із ValidateUserDefinedFields=N та ValidateFieldsOutOfOrder=N для прямої сумісності.
| Тип сесії шлюзу | Порт | Підтримувані версії | Можливості | Політика доступу |
|---|---|---|---|---|
| Order Management (OE) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Введення ордерів (35=D), скасування (35=F), внесення змін (35=G), масове скасування (35=q), статус ордера (35=H), позиції (35=AN), ліміти швидкості запитів (35=XLQ), інструменти (35=x) | API-ключ Read + Trade |
| Drop Copy (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Консолідований потік ExecutionReport (35=8) у реальному часі з тегами 797=Y та 9406=Y за всіма ордерами FIX та REST/HTTP | Тільки для читання (35=j відхиляє ордери) |
| Market Data (MD) | 9879 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Потік у реальному часі L1/L2 Snapshot (35=W), IncrementalRefresh (35=X) та MarketDataRequestReject (35=Y) | Тільки для читання (35=j відхиляє ордери) |
Узгодження версій та правила протоколу
| Версія FIX | BeginString (8) | Тег входу (35=A) | Тег заголовка додатка | Торговий ExecType (150) | Правило ExecTransType (20) |
|---|---|---|---|---|---|
| FIX 4.2 | 8=FIX.4.2 | Немає | Немає | 150=1 (Partial), 150=2 (Fill) | Обов'язково (20=0 New, 20=3 Status) |
| FIX 4.4 | 8=FIX.4.4 | Немає | Немає | 150=F (Trade) з 39=1/2 | Заборонено (відхиляється через 35=3, 371=20, 373=2) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 150=F (Trade) з 39=1/2 | Заборонено (відхиляється через 35=3, 371=20, 373=2) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 150=F (Trade) з 39=1/2 | Заборонено (відхиляється через 35=3, 371=20, 373=2) |
2. Керування сесіями та автентифікація HMAC-SHA256 (35=A)
Кожна сесія FIX починається з фрейму Logon (35=A), автентифікованого за допомогою вашого API-ключа GaiaEx (Tag 553), API Secret (Tag 554) та шістнадцяткового підпису в нижньому регістрі HMAC-SHA256 у RawData (Tag 96).
import hmac, hashlib
def sign_fix_logon(api_secret: str, sending_time: str, seq_num: int, sender_comp_id: str, target_comp_id: str) -> str:
# Canonical prehash string: SendingTime(52) | MsgType(35) | MsgSeqNum(34) | SenderCompID(49) | TargetCompID(56)
payload = f"{sending_time}|A|{seq_num}|{sender_comp_id}|{target_comp_id}"
return hmac.new(api_secret.encode("utf-8"), payload.encode("utf-8"), hashlib.sha256).hexdigest()| Тег | Назва поля | Обов'язкове | Опис |
|---|---|---|---|
98 | EncryptMethod | Y | 0 = Без шифрування / шифрування транспорту TLS |
108 | HeartBtInt | Y | Інтервал heartbeat у секундах (рекомендовано: 30) |
141 | ResetSeqNumFlag | N | Y = Скинути порядкові номери до 1; N = Відновити внутрішньоденний стан послідовності |
553 | Username | Y | API-ключ GaiaEx |
554 | Password | Y | API Secret GaiaEx |
96 | RawData | Y | 64-символьний шістнадцятковий підпис HMAC-SHA256 для 52|A|34|49|56 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | Встановіть 797=Y, 9406=Y або 50=DROPCOPY для реєстрації сесії Drop Copy лише для читання |
1409 | SessionStatus | Out | Повертається в 35=A / 35=5: 0=Active, 4=Logout Complete, 5=Bad Auth, 6=Seq Too Low, 101=100M Seq Cap |
Відновлення розривів (35=2 & 35=4) і скасування при відключенні (CoD)
- Виявлення вхідного розриву: якщо вхідне повідомлення містить
MsgSeqNum (34) > ExpectedSeqNum, шлюз негайно генеруєResendRequest (35=2, 7=ExpectedSeqNum, 16=0). ЯкщоMsgSeqNum (34) < ExpectedSeqNumбезPossDupFlag (43=Y), шлюз надсилаєLogout (35=5, 1409=6)і закриває сокет. - Вихідне повторення (Replay): коли клієнт надсилає
ResendRequest (35=2), шлюз повторно передає всі прикладні повідомлення (включно зі звітами Drop Copy35=8) з43=Yі122=OrigSendingTime, а адміністративні фрейми об'єднує вSequenceReset-GapFill (35=4, 123=Y). - Автоматичне скасування при відключенні (Cancel-on-Disconnect, CoD): у разі відключення сесії керування ордерами (Order Management) всі відкриті розміщені ордери (
OrdStatus 39=0), надіслані під час цієї сесії, автоматично скасовуються (150=4, 39=4, 103=3020) і транслюються в режимі реального часу на будь-яку активну сесію Drop Copy.
3. Створення, зміна, скасування ордерів та запити (35=D, G, F, q, H, AN, XLQ)
NewOrderSingle (35=D)
| Тег | Назва поля | Обов'язкове | Підтримувані значення та примітки |
|---|---|---|---|
11 | ClOrdID | Y | Унікальний ідентифікатор ордера, призначений клієнтом (до 31 символу) |
1 | Account | N | Адреса сховища некастодіального гаманця (0x...) або ідентифікатор субрахунку |
50 | SenderSubID | N | Ідентифікатор трейдера або стратегії; дублюється у відповіді в TargetSubID (57) у 35=8 |
55 | Symbol | Y | USDC безстрокові контракти (BTCUSDC, ETHUSDC, SOLUSDC), USDT безстрокові контракти (BTCUSDT, ETHUSDT), RWA безстрокові контракти (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | Y | 1 = Купівля (Buy), 2 = Продаж (Sell) |
38 | OrderQty | Y | Кількість ордера в базовому активі (підтримує дробову точність до 4 знаків, наприклад 0.0050) |
40 | OrdType | Y | 1 = Market, 2 = Limit, 4 = Stop Limit (потребує 99=StopPx), p = Post-Only (або 18=6) |
44 | Price | C | Лімітна ціна (обов'язково для 40=2, 40=4, 40=p) |
59 | TimeInForce | N | 1 = GTC (за замовчуванням), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | N | 1 = Cash (за замовчуванням), 2 = Margin Open, 3 = Margin Close |
Зміна (35=G), Скасування (35=F), Масове скасування (35=q), Статус (35=H), Позиції (35=AN) та Ліміти (35=XLQ)
| MsgType | Назва повідомлення | Ключові теги запиту | Відповідь шлюзу |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 35=8 з 150=5, 39=5 (Replaced) або 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | Двоетапне 35=8: 150=6, 39=6 (Pending Cancel) → 150=4, 39=4 (Canceled), або 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (Скасувати всі ордери) | 35=r (1369=MassActionReportID, 531=7) + одне 35=8 (150=4, 39=4) на кожен скасований ордер |
35=H | OrderStatusRequest | 11=ClOrdID (або 37=OrderID), 790=OrdStatusReqID | 35=8 з 150=I (Order Status) або 150=8, 103=5 (Невідомий ордер) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (Positions), 1=Account, 55=Symbol | PositionReport (35=AP) з 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice |
35=XLQ | LimitQuery | 25003=ReqID | LimitResponse (35=XLR) з 25005=ORDERS (500/с) та 25005=CONNECTIONS (20/акаунт) |
4. Drop Copy та звірка в реальному часі (797=Y / 9406=Y)
Drop Copy надає прайм-брокерам, ризик-системам та системам бек-офісної звірки потік лише для читання в реальному часі всіх подій ExecutionReport (35=8) як за сесіями FIX Order Entry, так і за ордерами REST/HTTP API.
- Універсальні прапорці підписки: підключіться до порту
9878та надішлітьLogon (35=A)з797=Y(CopyMsgIndicator),9406=Y(DropCopyFlag) або50=DROPCOPY(SenderSubID). - Подвійне маркування вихідних повідомлень тегами: кожен фрейм Drop Copy
35=8містить57=DROPCOPY,797=Yта9406=Y, а також повну деталізацію комісій/рібейтів (381=GrossTradeAmt,1057=AggressorIndicator,136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4,20000=TradeFeeRebateAmt). - Суворий захист режиму «лише читання»: будь-яка спроба подати
35=D,35=F,35=Gабо35=qу сесії Drop Copy негайно відхиляється черезBusinessMessageReject (35=j, 380=4). - Відновлення прогалин у послідовності (Gap Recovery): вихідні звіти Drop Copy зберігаються в сховищі послідовностей сесії та можуть бути повторно передані через
ResendRequest (35=2)зPossDupFlag (43=Y).
5. Ринкові дані (35=V, W, X, Y) та довідкові дані (35=x, y, h)
Підключіться до порту 9879 для отримання виділеного потоку ринкових даних або запиту специфікацій інструментів через SecurityListRequest (35=x).
- MarketDataRequest (
35=V): надішліть262=MDReqID,263=1(Snapshot + Updates) або0(Snapshot),264=1(Top of Book) або20(Full Depth), а також55=Symbol. ПовертаєMarketDataSnapshotFullRefresh (35=W), після якого йдеMarketDataIncrementalRefresh (35=X). Для невідомих символів повертаєтьсяMarketDataRequestReject (35=Y, 281=0). - SecurityListRequest (
35=x): надішліть320=SecurityReqIDта559=0(один символ у55) або559=4(усі інструменти). ПовертаєSecurityList (35=y)із розміром тіка (969=MinPriceIncrement), мін./макс. обсягом ордера (8000/8001) та десятковою точністю (8002/8003). - TradingSessionStatus (
35=h): повертає340=2(Відкрито 24x7x365) або340=1(Зупинено).
Шаблон конфігурації клієнта QuickFIX (gaiaex_fix.cfg)
[DEFAULT]
ConnectionType=initiator
ReconnectInterval=5
FileStorePath=./store
FileLogPath=./log
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=Y
DataDictionary=./fix-dictionary.xml
ValidateUserDefinedFields=N
ValidateFieldsOutOfOrder=N
HeartBtInt=30
[SESSION]
BeginString=FIX.4.4
SenderCompID=INST_CLIENT_OE
TargetCompID=GAIAEX_PROD
SocketConnectHost=10.10.0.51
SocketConnectPort=9878
ResetOnLogon=N
[SESSION]
BeginString=FIX.4.4
SenderCompID=INST_CLIENT_DC
TargetCompID=GAIAEX_PROD
SenderSubID=DROPCOPY
SocketConnectHost=10.10.0.51
SocketConnectPort=9878
ResetOnLogon=N