Institutionelle FIX API (4.2 / 4.4 / 5.0 / 5.2)
Institutionelle FIX 4.2, 4.4, 5.0 und 5.2 Konnektivität: Order Entry (:9878), Real-Time Drop Copy (797=Y / 9406=Y), Marktdaten (:9879) und QuickFIX-XML-Schema.
SKILL.mdDirekt einsetzbarer Claude Code Skill mit HMAC-SHA256-Signierung, /fapi/v1 & /fapi/v2-Schemas und Schutzmechanismen zur Ausblendung von Secrets.
AGENTS.mdDirekt einsetzbare Repository-AGENTS.md für OpenAI Codex CLI — Tick-Size-Regeln, Rate-Limit-Budgets und Self-Custody-Grenzen.
AGY.mdGoogle Antigravity (agy) & Gemini-Agentenspezifikation mit verifizierten asynchronen Python WebSocket + REST-Ausführungsvorlagen.
llms.txtMaschinenlesbarer Single-URL-Index aller GaiaEx-Dokumentationsseiten, des OpenAPI 3.0-Schemas und der Postman-Kollektion.
1. Architektur & Multi-Versions-Überblick
Das native C++26 institutionelle FIX-Gateway von GaiaEx bietet deterministische Ordererfassung mit extrem niedriger Latenz, Echtzeit-Drop-Copy, Positions- und Orderabfragen sowie L1/L2-Marktdaten-Streaming über persistente TCP/TLS-Sitzungen.
QuickFIX / OnixS XML-Schema herunterladen: /fix-dictionary.xml — kompatibel mit QuickFIX (C++/Python/Go), QuickFIX/J, OnixS, OneZero und institutionellen OMS-Plattformen. Konfigurieren Sie Ihre Client-Engine mit ValidateUserDefinedFields=N und ValidateFieldsOutOfOrder=N für Aufwärtskompatibilität.
| Gateway-Sitzungstyp | Port | Unterstützte Versionen | Funktionen | Zugriffsrichtlinie |
|---|---|---|---|---|
| Order Management (OE) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Ordererfassung (35=D), Stornierung (35=F), Änderung (35=G), Massenstornierung (35=q), Orderstatus (35=H), Positionen (35=AN), Rate Limits (35=XLQ), Instrumente (35=x) | Read + Trade API-Key |
| Drop Copy (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Konsolidierter Echtzeit-ExecutionReport (35=8)-Stream mit 797=Y und 9406=Y über alle FIX- und REST/HTTP-Orders hinweg | Read-Only erzwungen (35=j weist Orders ab) |
| Market Data (MD) | 9879 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Echtzeit-L1/L2-Snapshot (35=W), IncrementalRefresh (35=X) und MarketDataRequestReject (35=Y) | Read-Only erzwungen (35=j weist Orders ab) |
Versionsaushandlung & Wire-Regeln
| FIX-Version | BeginString (8) | Logon-Tag (35=A) | App-Header-Tag | Trade ExecType (150) | ExecTransType (20)-Regel |
|---|---|---|---|---|---|
| FIX 4.2 | 8=FIX.4.2 | Keine | Keine | 150=1 (Partial), 150=2 (Fill) | Erforderlich (20=0 New, 20=3 Status) |
| FIX 4.4 | 8=FIX.4.4 | Keine | Keine | 150=F (Trade) mit 39=1/2 | Verboten (abgelehnt über 35=3, 371=20, 373=2) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 150=F (Trade) mit 39=1/2 | Verboten (abgelehnt über 35=3, 371=20, 373=2) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 150=F (Trade) mit 39=1/2 | Verboten (abgelehnt über 35=3, 371=20, 373=2) |
2. Sitzungsverwaltung & HMAC-SHA256-Logon (35=A)
Jede FIX-Sitzung beginnt mit einem Logon (35=A)-Frame, der über Ihren GaiaEx API-Key (Tag 553), Ihr API-Secret (Tag 554) und eine kleingeschriebene hexadezimale HMAC-SHA256-Signatur in RawData (Tag 96) authentifiziert wird.
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 | Feldname | Erf. | Beschreibung |
|---|---|---|---|
98 | EncryptMethod | Y | 0 = Keine / TLS-Transportverschlüsselung |
108 | HeartBtInt | Y | Heartbeat-Intervall in Sekunden (empfohlen: 30) |
141 | ResetSeqNumFlag | N | Y = Sequenznummern auf 1 zurücksetzen; N = Intraday-Sequenzstatus fortsetzen |
553 | Username | Y | GaiaEx API-Key |
554 | Password | Y | GaiaEx API-Secret |
96 | RawData | Y | 64-stellige Hex-HMAC-SHA256-Signatur über 52|A|34|49|56 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | Setzen Sie 797=Y, 9406=Y oder 50=DROPCOPY, um eine schreibgeschützte Drop-Copy-Sitzung zu registrieren |
1409 | SessionStatus | Out | Wird zurückgegeben in 35=A / 35=5: 0=Aktiv, 4=Logout abgeschlossen, 5=Ungültige Authentifizierung, 6=Sequenz zu niedrig, 101=100M-Sequenzgrenze |
Gap Recovery (35=2 & 35=4) & Cancel-on-Disconnect (CoD)
- Inbound-Lückenerkennung: Wenn eine eingehende Nachricht
MsgSeqNum (34) > ExpectedSeqNumenthält, sendet das Gateway sofortResendRequest (35=2, 7=ExpectedSeqNum, 16=0). BeiMsgSeqNum (34) < ExpectedSeqNumohnePossDupFlag (43=Y)sendet das GatewayLogout (35=5, 1409=6)und schließt den Socket. - Outbound-Replay: Wenn der Client
ResendRequest (35=2)sendet, wiederholt das Gateway alle Anwendungsnachrichten (einschließlich Drop-Copy-35=8-Berichten) mit43=Yund122=OrigSendingTimeund fasst administrative Frames zuSequenceReset-GapFill (35=4, 123=Y)zusammen. - Automatisches Cancel-on-Disconnect (CoD): Wenn eine Order-Management-Sitzung getrennt wird, werden alle offenen ruhenden Orders (
OrdStatus 39=0), die in dieser Sitzung platziert wurden, automatisch storniert (150=4, 39=4, 103=3020) und in Echtzeit an jede aktive Drop-Copy-Sitzung übertragen.
3. Ordererfassung, -änderung, -stornierung & -abfrage (35=D, G, F, q, H, AN, XLQ)
NewOrderSingle (35=D)
| Tag | Feldname | Erf. | Unterstützte Werte & Hinweise |
|---|---|---|---|
11 | ClOrdID | Y | Vom Client vergebene eindeutige Orderkennung (bis zu 31 Zeichen) |
1 | Account | N | Self-Custody-Vault-Adresse (0x...) oder Unterkonto-Kennung |
50 | SenderSubID | N | Händler- oder Strategie-ID; wird in TargetSubID (57) auf 35=8 zurückgegeben |
55 | Symbol | Y | USDC Perps (BTCUSDC, ETHUSDC, SOLUSDC), USDT Perps (BTCUSDT, ETHUSDT), RWA Perps (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | Y | 1 = Kauf, 2 = Verkauf |
38 | OrderQty | Y | Ordermenge im Basiswert (unterstützt 4 Dezimalstellen Genauigkeit, z. B. 0.0050) |
40 | OrdType | Y | 1 = Market, 2 = Limit, 4 = Stop Limit (erfordert 99=StopPx), p = Post-Only (oder 18=6) |
44 | Price | C | Limitpreis (erforderlich für 40=2, 40=4, 40=p) |
59 | TimeInForce | N | 1 = GTC (Standard), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | N | 1 = Cash (Standard), 2 = Margin Open, 3 = Margin Close |
Änderung (35=G), Stornierung (35=F), Massenstornierung (35=q), Status (35=H), Positionen (35=AN) & Limits (35=XLQ)
| MsgType | Nachrichtenname | Wichtige Anfrage-Tags | Gateway-Antwort |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 35=8 mit 150=5, 39=5 (Ersetzt) oder 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | Zweistufiges 35=8: 150=6, 39=6 (Stornierung ausstehend) → 150=4, 39=4 (Storniert) oder 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (Alle Orders stornieren) | 35=r (1369=MassActionReportID, 531=7) + ein 35=8 (150=4, 39=4) pro stornierter Order |
35=H | OrderStatusRequest | 11=ClOrdID (oder 37=OrderID), 790=OrdStatusReqID | 35=8 mit 150=I (Orderstatus) oder 150=8, 103=5 (Unbekannte Order) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (Positionen), 1=Account, 55=Symbol | PositionReport (35=AP) mit 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice |
35=XLQ | LimitQuery | 25003=ReqID | LimitResponse (35=XLR) mit 25005=ORDERS (500/s) und 25005=CONNECTIONS (20/Konto) |
4. Echtzeit-Drop-Copy & Abstimmung (797=Y / 9406=Y)
Drop Copy bietet Prime-Brokern, Risikosystemen und Back-Office-Abstimmungssystemen einen schreibgeschützten Echtzeit-Stream aller ExecutionReport (35=8)-Ereignisse über FIX-Order-Entry-Sitzungen und REST/HTTP-API-Orders hinweg.
- Universelle Abonnement-Flags: Verbinden Sie sich mit Port
9878und senden SieLogon (35=A)mit797=Y(CopyMsgIndicator),9406=Y(DropCopyFlag) oder50=DROPCOPY(SenderSubID). - Ausgehende Dual-Tag-Kennzeichnung: Jeder ausgehende Drop-Copy-
35=8-Frame enthält57=DROPCOPY,797=Yund9406=Ysowie eine vollständige Gebühren-/Rabattaufschlüsselung (381=GrossTradeAmt,1057=AggressorIndicator,136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4,20000=TradeFeeRebateAmt). - Strikter Read-Only-Schutz: Jeder Versuch,
35=D,35=F,35=Goder35=qin einer Drop-Copy-Sitzung zu senden, wird sofort überBusinessMessageReject (35=j, 380=4)abgelehnt. - Sequenzlücken-Wiederherstellung (Gap Recovery): Ausgehende Drop-Copy-Berichte werden im Sitzungssequenzspeicher persistent gespeichert und können über
ResendRequest (35=2)mitPossDupFlag (43=Y)erneut abgespielt werden.
5. Marktdaten (35=V, W, X, Y) & Stammdaten (35=x, y, h)
Verbinden Sie sich mit Port 9879 für dediziertes Marktdaten-Streaming oder fragen Sie Instrumentspezifikationen über SecurityListRequest (35=x) ab.
- MarketDataRequest (
35=V): Senden Sie262=MDReqID,263=1(Snapshot + Updates) oder0(Snapshot),264=1(Top of Book) oder20(Full Depth) und55=Symbol. GibtMarketDataSnapshotFullRefresh (35=W)gefolgt vonMarketDataIncrementalRefresh (35=X)zurück. Unbekannte Symbole gebenMarketDataRequestReject (35=Y, 281=0)zurück. - SecurityListRequest (
35=x): Senden Sie320=SecurityReqIDund559=0(einzelnes Symbol in55) oder559=4(alle Instrumente). GibtSecurityList (35=y)mit Tick-Größe (969=MinPriceIncrement), Mindest-/Höchstordermenge (8000/8001) und Dezimalgenauigkeit (8002/8003) zurück. - TradingSessionStatus (
35=h): Gibt340=2(Geöffnet 24x7x365) oder340=1(Angehalten) zurück.
QuickFIX-Client-Konfigurationsvorlage (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