API institutionnelle FIX (4.2 / 4.4 / 5.0 / 5.2)
Connectivité institutionnelle FIX 4.2, 4.4, 5.0 et 5.2 : saisie d'ordres (:9878), Drop Copy en temps réel (797=Y / 9406=Y), données de marché (:9879) et schéma XML QuickFIX.
SKILL.mdSkill Claude Code prête à l'emploi avec signature HMAC-SHA256, schémas /fapi/v1 et /fapi/v2, et mécanismes de masquage des secrets.
AGENTS.mdFichier AGENTS.md prêt à intégrer pour la CLI OpenAI Codex — règles de taille de tick, quotas de limitation de débit et limites de garde personnelle.
AGY.mdSpécification d'agent pour Google Antigravity (agy) & Gemini avec modèles d'exécution asynchrones vérifiés en Python pour WebSocket + REST.
llms.txtIndex unique lisible par machine de toutes les pages de documentation GaiaEx, schéma OpenAPI 3.0 et collection Postman.
1. Architecture et aperçu multi-version
La passerelle FIX institutionnelle native en C++26 de GaiaEx offre une saisie d'ordres déterministe à ultra-faible latence, du Drop Copy en temps réel, l'interrogation des positions & ordres, ainsi que la diffusion des données de marché L1/L2 via des sessions TCP/TLS persistantes.
Télécharger le schéma XML QuickFIX / OnixS : /fix-dictionary.xml — compatible avec QuickFIX (C++/Python/Go), QuickFIX/J, OnixS, OneZero et les plateformes OMS institutionnelles. Configurez votre moteur client avec ValidateUserDefinedFields=N et ValidateFieldsOutOfOrder=N pour assurer la compatibilité future.
| Type de session de passerelle | Port | Versions prises en charge | Fonctionnalités | Politique d'accès |
|---|---|---|---|---|
| Order Management (OE) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Saisie d'ordres (35=D), Annulation (35=F), Modification (35=G), Annulation massive (35=q), Statut d'ordre (35=H), Positions (35=AN), Limites de débit (35=XLQ), Instruments (35=x) | Clé API Lecture + Trading |
| Drop Copy (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Flux ExecutionReport (35=8) consolidé en temps réel balisé avec 797=Y et 9406=Y pour tous les ordres FIX et REST/HTTP | Lecture seule appliquée (35=j rejette les ordres) |
| Market Data (MD) | 9879 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Snapshot (35=W), IncrementalRefresh (35=X) et MarketDataRequestReject (35=Y) L1/L2 en temps réel | Lecture seule appliquée (35=j rejette les ordres) |
Négociation de version & règles de protocole réseau
| Version FIX | BeginString (8) | Tag de Logon (35=A) | Tag d'en-tête d'application | Trade ExecType (150) | Règle ExecTransType (20) |
|---|---|---|---|---|---|
| FIX 4.2 | 8=FIX.4.2 | Aucun | Aucun | 150=1 (Partiel), 150=2 (Exécution totale) | Obligatoire (20=0 New, 20=3 Status) |
| FIX 4.4 | 8=FIX.4.4 | Aucun | Aucun | 150=F (Trade) avec 39=1/2 | Interdit (rejeté via 35=3, 371=20, 373=2) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 150=F (Trade) avec 39=1/2 | Interdit (rejeté via 35=3, 371=20, 373=2) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 150=F (Trade) avec 39=1/2 | Interdit (rejeté via 35=3, 371=20, 373=2) |
2. Gestion de session & Logon HMAC-SHA256 (35=A)
Chaque session FIX commence par une trame Logon (35=A) authentifiée via votre clé API GaiaEx (Tag 553), votre secret d'API (Tag 554), et une signature HMAC-SHA256 hexadécimale en minuscules dans 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 | Nom du champ | Req | Description |
|---|---|---|---|
98 | EncryptMethod | O | 0 = Aucun / chiffrement de transport TLS |
108 | HeartBtInt | O | Intervalle de heartbeat en secondes (recommandé : 30) |
141 | ResetSeqNumFlag | N | Y = Réinitialiser les numéros de séquence à 1 ; N = Reprendre l'état des séquences intrajournalières |
553 | Username | O | Clé API GaiaEx |
554 | Password | O | Secret d'API GaiaEx |
96 | RawData | O | Signature HMAC-SHA256 hexadécimale de 64 caractères sur 52|A|34|49|56 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | Définir 797=Y, 9406=Y ou 50=DROPCOPY pour enregistrer une session Drop Copy en lecture seule |
1409 | SessionStatus | Sortie | Renvoyé dans 35=A / 35=5 : 0=Actif, 4=Déconnexion effectuée, 5=Authentification invalide, 6=Séquence trop basse, 101=Plafond de séquence à 100M |
Récupération d'écarts (35=2 & 35=4) & Annulation sur déconnexion (CoD)
- Détection d'écart entrant : Si un message entrant comporte
MsgSeqNum (34) > ExpectedSeqNum, la passerelle émet immédiatementResendRequest (35=2, 7=ExpectedSeqNum, 16=0). SiMsgSeqNum (34) < ExpectedSeqNumsansPossDupFlag (43=Y), la passerelle émetLogout (35=5, 1409=6)et ferme le socket. - Rejeu sortant : Lorsque le client envoie
ResendRequest (35=2), la passerelle rejoue tous les messages applicatifs (y compris les rapports Drop Copy35=8) avec43=Yet122=OrigSendingTime, et regroupe les trames administratives dansSequenceReset-GapFill (35=4, 123=Y). - Annulation automatique sur déconnexion (CoD) : Lorsqu'une session Order Management se déconnecte, tous les ordres ouverts en attente (
OrdStatus 39=0) passés sur cette session sont automatiquement annulés (150=4, 39=4, 103=3020) et diffusés en temps réel à toute session Drop Copy active.
3. Saisie, modification, annulation et interrogation d'ordres (35=D, G, F, q, H, AN, XLQ)
NewOrderSingle (35=D)
| Tag | Nom du champ | Req | Valeurs prises en charge & Remarques |
|---|---|---|---|
11 | ClOrdID | O | Identifiant d'ordre unique attribué par le client (jusqu'à 31 caractères) |
1 | Account | N | Adresse du coffre-fort auto-hébergé (0x...) ou identifiant de sous-compte |
50 | SenderSubID | N | ID du trader ou de la stratégie ; renvoyé en écho dans TargetSubID (57) sur 35=8 |
55 | Symbol | O | Perps USDC (BTCUSDC, ETHUSDC, SOLUSDC), Perps USDT (BTCUSDT, ETHUSDT), Perps RWA (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | O | 1 = Achat, 2 = Vente |
38 | OrderQty | O | Quantité de l'ordre en actif de base (prend en charge une précision fractionnaire à 4 décimales, par ex. 0.0050) |
40 | OrdType | O | 1 = Market, 2 = Limit, 4 = Stop Limit (requiert 99=StopPx), p = Post-Only (ou 18=6) |
44 | Price | C | Prix limite (requis pour 40=2, 40=4, 40=p) |
59 | TimeInForce | N | 1 = GTC (par défaut), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | N | 1 = Cash (par défaut), 2 = Margin Open, 3 = Margin Close |
Modification (35=G), Annulation (35=F), Annulation massive (35=q), Statut (35=H), Positions (35=AN) & Limites (35=XLQ)
| MsgType | Nom du message | Tags de requête principaux | Réponse de la passerelle |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 35=8 avec 150=5, 39=5 (Remplacé) ou 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | 35=8 en deux étapes : 150=6, 39=6 (Annulation en attente) → 150=4, 39=4 (Annulé), ou 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (Annuler tous les ordres) | 35=r (1369=MassActionReportID, 531=7) + un 35=8 (150=4, 39=4) par ordre annulé |
35=H | OrderStatusRequest | 11=ClOrdID (ou 37=OrderID), 790=OrdStatusReqID | 35=8 avec 150=I (Statut de l'ordre) ou 150=8, 103=5 (Ordre inconnu) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (Positions), 1=Account, 55=Symbol | PositionReport (35=AP) avec 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice |
35=XLQ | LimitQuery | 25003=ReqID | LimitResponse (35=XLR) avec 25005=ORDERS (500/s) et 25005=CONNECTIONS (20/compte) |
4. Drop Copy en temps réel & Réconciliation (797=Y / 9406=Y)
Le Drop Copy fournit aux prime brokers, aux moteurs de risque et aux systèmes de réconciliation de back-office un flux en temps réel et en lecture seule de tous les événements ExecutionReport (35=8) sur l'ensemble des sessions FIX Order Entry et des ordres par API REST/HTTP.
- Indicateurs d'abonnement universels : Connectez-vous au port
9878et envoyezLogon (35=A)avec797=Y(CopyMsgIndicator),9406=Y(DropCopyFlag), ou50=DROPCOPY(SenderSubID). - Double étiquetage en sortie : Chaque trame Drop Copy
35=8comporte57=DROPCOPY,797=Y, et9406=Y, ainsi que le détail complet des frais/remises (381=GrossTradeAmt,1057=AggressorIndicator,136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4,20000=TradeFeeRebateAmt). - Protection stricte en lecture seule : Toute tentative de soumission de
35=D,35=F,35=G, ou35=qsur une session Drop Copy est immédiatement rejetée viaBusinessMessageReject (35=j, 380=4). - Récupération d'écarts de séquence : Les rapports sortants de Drop Copy sont conservés dans le magasin de séquences de la session et peuvent être rejoués via
ResendRequest (35=2)avecPossDupFlag (43=Y).
5. Données de marché (35=V, W, X, Y) & Données de référence (35=x, y, h)
Connectez-vous au port 9879 pour la diffusion dédiée des données de marché ou interrogez les spécifications des instruments via SecurityListRequest (35=x).
- MarketDataRequest (
35=V) : Envoyez262=MDReqID,263=1(Instantané + Mises à jour) ou0(Instantané),264=1(Haut du carnet) ou20(Profondeur complète), et55=Symbol. RenvoieMarketDataSnapshotFullRefresh (35=W)suivi deMarketDataIncrementalRefresh (35=X). Les symboles inconnus renvoientMarketDataRequestReject (35=Y, 281=0). - SecurityListRequest (
35=x) : Envoyez320=SecurityReqIDet559=0(symbole unique dans55) ou559=4(tous les instruments). RenvoieSecurityList (35=y)avec la taille du tick (969=MinPriceIncrement), la quantité d'ordre minimale/maximale (8000/8001), et la précision décimale (8002/8003). - TradingSessionStatus (
35=h) : Renvoie340=2(Ouvert 24h/24, 7j/7, 365j/an) ou340=1(Interrompu).
Modèle de configuration client 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