Instytucjonalne FIX API (4.2 / 4.4 / 5.0 / 5.2)
Łączność instytucjonalna FIX 4.2, 4.4, 5.0 i 5.2: wprowadzanie zleceń — Order Entry (:9878), Drop Copy w czasie rzeczywistym (797=Y / 9406=Y), dane rynkowe — Market Data (:9879) oraz schemat QuickFIX XML.
SKILL.mdGotowa do wdrożenia umiejętność dla Claude Code z podpisywaniem HMAC-SHA256, schematami /fapi/v1 i /fapi/v2 oraz mechanizmami ochrony przed ujawnieniem sekretów.
AGENTS.mdGotowy plik AGENTS.md dla repozytorium pod OpenAI Codex CLI — reguły wielkości kroku notowania (tick-size), limity zapytań (rate limits) i granice self-custody.
AGY.mdSpecyfikacja agenta Google Antigravity (agy) i Gemini ze zweryfikowanymi szablonami asynchronicznej egzekucji Python WebSocket + REST.
llms.txtJednolity, czytelny maszynowo indeks pod jednym adresem URL zawierający wszystkie strony dokumentacji GaiaEx, schemat OpenAPI 3.0 oraz kolekcję Postman.
1. Architektura i przegląd wielu wersji
Natywna instytucjonalna brama FIX C++26 platformy GaiaEx zapewnia deterministyczne, ultraniskie opóźnienia przy składaniu zleceń (Order Entry), transmisji Drop Copy w czasie rzeczywistym, zapytaniach o pozycje i zlecenia oraz strumieniowaniu danych rynkowych L1/L2 za pośrednictwem trwałych sesji TCP/TLS.
Pobierz schemat XML QuickFIX / OnixS: /fix-dictionary.xml — kompatybilny z QuickFIX (C++/Python/Go), QuickFIX/J, OnixS, OneZero oraz instytucjonalnymi platformami OMS. Skonfiguruj silnik klienta z ValidateUserDefinedFields=N i ValidateFieldsOutOfOrder=N w celu zapewnienia kompatybilności w przód.
| Typ sesji bramy | Port | Obsługiwane wersje | Możliwości | Zasady dostępu |
|---|---|---|---|---|
| Order Management (OE) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Składanie zleceń (35=D), anulowanie (35=F), modyfikacja (35=G), masowe anulowanie (35=q), status zlecenia (35=H), pozycje (35=AN), limity zapytań (35=XLQ), instrumenty (35=x) | Klucz API Read + Trade |
| Drop Copy (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Skonsolidowany strumień ExecutionReport (35=8) w czasie rzeczywistym, oznaczony tagami 797=Y i 9406=Y dla wszystkich zleceń FIX oraz REST/HTTP | Wymuszony tryb tylko do odczytu (35=j odrzuca zlecenia) |
| Market Data (MD) | 9879 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Strumienie w czasie rzeczywistym L1/L2 Snapshot (35=W), IncrementalRefresh (35=X) oraz MarketDataRequestReject (35=Y) | Wymuszony tryb tylko do odczytu (35=j odrzuca zlecenia) |
Negocjacja wersji i reguły transmisji (Wire Rules)
| Wersja FIX | BeginString (8) | Tag logowania (35=A) | Tag nagłówka aplikacji | ExecType (150) transakcji | Reguła ExecTransType (20) |
|---|---|---|---|---|---|
| FIX 4.2 | 8=FIX.4.2 | Brak | Brak | 150=1 (Częściowe), 150=2 (Realizacja) | Wymagane (20=0 Nowe, 20=3 Status) |
| FIX 4.4 | 8=FIX.4.4 | Brak | Brak | 150=F (Transakcja) z 39=1/2 | Zabronione (odrzucane przez 35=3, 371=20, 373=2) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 150=F (Transakcja) z 39=1/2 | Zabronione (odrzucane przez 35=3, 371=20, 373=2) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 150=F (Transakcja) z 39=1/2 | Zabronione (odrzucane przez 35=3, 371=20, 373=2) |
2. Zarządzanie sesją i logowanie HMAC-SHA256 (35=A)
Każda sesja FIX rozpoczyna się od ramki Logon (35=A) uwierzytelnianej za pomocą Twojego klucza API GaiaEx (Tag 553), sekretu API (Tag 554) oraz podpisu HMAC-SHA256 zapisanego małymi literami w formacie szesnastkowym w 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()| Tag | Nazwa pola | Wym. | Opis |
|---|---|---|---|
98 | EncryptMethod | T | 0 = Brak / szyfrowanie warstwy transportowej TLS |
108 | HeartBtInt | T | Interwał heartbeat w sekundach (zalecane: 30) |
141 | ResetSeqNumFlag | N | Y = Reset numerów sekwencyjnych do 1; N = Wznowienie stanu sekwencji w ciągu dnia |
553 | Username | T | Klucz API GaiaEx |
554 | Password | T | Sekret API GaiaEx |
96 | RawData | T | 64-znakowy szesnastkowy podpis HMAC-SHA256 z 52|A|34|49|56 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | Ustaw 797=Y, 9406=Y lub 50=DROPCOPY, aby zarejestrować sesję Drop Copy w trybie tylko do odczytu |
1409 | SessionStatus | Wyjście | Zwracane w 35=A / 35=5: 0=Aktywna, 4=Wylogowanie zakończone, 5=Błędne uwierzytelnienie, 6=Zbyt niski numer sekwencji, 101=Limit 100 mln numerów sekwencji |
Odzyskiwanie luk w sekwencji (35=2 i 35=4) oraz Cancel-on-Disconnect (CoD)
- Wykrywanie luki przychodzącej: Jeśli komunikat przychodzący zawiera
MsgSeqNum (34) > ExpectedSeqNum, brama natychmiast wysyłaResendRequest (35=2, 7=ExpectedSeqNum, 16=0). JeśliMsgSeqNum (34) < ExpectedSeqNumbezPossDupFlag (43=Y), brama wysyłaLogout (35=5, 1409=6)i zamyka gniazdo. - Powtórzenie wychodzące (Replay): Gdy klient wysyła
ResendRequest (35=2), brama powtarza wszystkie komunikaty aplikacyjne (w tym raporty Drop Copy35=8) z43=Yi122=OrigSendingTime, a także scala ramki administracyjne wSequenceReset-GapFill (35=4, 123=Y). - Automatyczne anulowanie przy rozłączeniu (CoD): Po rozłączeniu sesji Order Management wszystkie otwarte, oczekujące zlecenia (
OrdStatus 39=0) złożone w ramach tej sesji są automatycznie anulowane (150=4, 39=4, 103=3020) i transmitowane w czasie rzeczywistym do każdej aktywnej sesji Drop Copy.
3. Składanie, modyfikacja, anulowanie i zapytania o zlecenia (35=D, G, F, q, H, AN, XLQ)
NewOrderSingle (35=D)
| Tag | Nazwa pola | Wym. | Obsługiwane wartości i uwagi |
|---|---|---|---|
11 | ClOrdID | T | Unikalny identyfikator zlecenia nadany przez klienta (do 31 znaków) |
1 | Account | N | Adres skarbca self-custody (0x...) lub identyfikator podkonta |
50 | SenderSubID | N | Identyfikator tradera lub strategii; odsyłany w TargetSubID (57) w 35=8 |
55 | Symbol | T | USDC Perps (BTCUSDC, ETHUSDC, SOLUSDC), USDT Perps (BTCUSDT, ETHUSDT), RWA Perps (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | T | 1 = Kupno, 2 = Sprzedaż |
38 | OrderQty | T | Wielkość zlecenia w aktywie bazowym (obsługuje precyzję ułamkową do 4 miejsc po przecinku, np. 0.0050) |
40 | OrdType | T | 1 = Market, 2 = Limit, 4 = Stop Limit (wymaga 99=StopPx), p = Post-Only (lub 18=6) |
44 | Price | W | Cena limit (wymagana dla 40=2, 40=4, 40=p) |
59 | TimeInForce | N | 1 = GTC (domyślnie), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | N | 1 = Gotówka (domyślnie), 2 = Otwarcie pozycji z depozytem, 3 = Zamknięcie pozycji z depozytem |
Modyfikacja (35=G), Anulowanie (35=F), Masowe anulowanie (35=q), Status (35=H), Pozycje (35=AN) i Limity (35=XLQ)
| MsgType | Nazwa komunikatu | Kluczowe tagi żądania | Odpowiedź bramy |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 35=8 z 150=5, 39=5 (Zastąpiono) lub 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | Dwuetapowe 35=8: 150=6, 39=6 (Oczekiwanie na anulowanie) → 150=4, 39=4 (Anulowano) lub 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (Anuluj wszystkie zlecenia) | 35=r (1369=MassActionReportID, 531=7) + jeden 35=8 (150=4, 39=4) na każde anulowane zlecenie |
35=H | OrderStatusRequest | 11=ClOrdID (lub 37=OrderID), 790=OrdStatusReqID | 35=8 z 150=I (Status zlecenia) lub 150=8, 103=5 (Nieznane zlecenie) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (Pozycje), 1=Account, 55=Symbol | PositionReport (35=AP) z 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice |
35=XLQ | LimitQuery | 25003=ReqID | LimitResponse (35=XLR) z 25005=ORDERS (500/s) oraz 25005=CONNECTIONS (20/konto) |
4. Drop Copy w czasie rzeczywistym i uzgadnianie (797=Y / 9406=Y)
Drop Copy zapewnia głównym brokerom (prime brokers), silnikom ryzyka i systemom uzgadniania back-office dostęp do strumienia w czasie rzeczywistym (tylko do odczytu) ze wszystkimi zdarzeniami ExecutionReport (35=8) zarówno z sesji FIX Order Entry, jak i zleceń API REST/HTTP.
- Uniwersalne flagi subskrypcji: Połącz się z portem
9878i wyślijLogon (35=A)z797=Y(CopyMsgIndicator),9406=Y(DropCopyFlag) lub50=DROPCOPY(SenderSubID). - Podwójne znakowanie tagami wychodzącymi: Każda ramka Drop Copy
35=8zawiera57=DROPCOPY,797=Yoraz9406=Y, a także pełne zestawienie opłat/rabatów (381=GrossTradeAmt,1057=AggressorIndicator,136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4,20000=TradeFeeRebateAmt). - Ścisła ochrona trybu tylko do odczytu: Każda próba przesłania
35=D,35=F,35=Glub35=qw ramach sesji Drop Copy jest natychmiast odrzucana przezBusinessMessageReject (35=j, 380=4). - Odzyskiwanie luk w sekwencji: Wychodzące raporty Drop Copy są utrwalane w magazynie sekwencji sesji i mogą być powtórzone za pośrednictwem
ResendRequest (35=2)zPossDupFlag (43=Y).
5. Dane rynkowe (35=V, W, X, Y) i dane referencyjne (35=x, y, h)
Połącz się z portem 9879, aby korzystać z dedykowanego strumieniowania danych rynkowych lub odpytywać o specyfikacje instrumentów za pośrednictwem SecurityListRequest (35=x).
- MarketDataRequest (
35=V): Wyślij262=MDReqID,263=1(Migawka + Aktualizacje) lub0(Migawka),264=1(Szczyt księgi) lub20(Pełna głębokość) oraz55=Symbol. ZwracaMarketDataSnapshotFullRefresh (35=W), a następnieMarketDataIncrementalRefresh (35=X). Nieznane symbole zwracająMarketDataRequestReject (35=Y, 281=0). - SecurityListRequest (
35=x): Wyślij320=SecurityReqIDoraz559=0(pojedynczy symbol w55) lub559=4(wszystkie instrumenty). ZwracaSecurityList (35=y)z wielkością kroku notowania (969=MinPriceIncrement), min./maks. wielkością zlecenia (8000/8001) oraz precyzją dziesiętną (8002/8003). - TradingSessionStatus (
35=h): Zwraca340=2(Otwarte 24x7x365) lub340=1(Wstrzymane).
Szablon konfiguracji klienta 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