API FIX institucional (4.2 / 4.4 / 5.0 / 5.2)
Conectividad FIX institucional 4.2, 4.4, 5.0 y 5.2: ingreso de órdenes (:9878), Drop Copy en tiempo real (797=Y / 9406=Y), datos de mercado (:9879) y esquema XML de QuickFIX.
SKILL.mdSkill de integración directa para Claude Code con firma HMAC-SHA256, esquemas /fapi/v1 y /fapi/v2, y medidas de seguridad para la ocultación de secretos.
AGENTS.mdArchivo AGENTS.md de integración directa en repositorios para OpenAI Codex CLI: reglas de tick-size, presupuestos de límites de frecuencia y límites de autocustodia.
AGY.mdEspecificación de agente para Google Antigravity (agy) y Gemini con plantillas verificadas de ejecución asíncrona en Python mediante WebSocket + REST.
llms.txtÍndice legible por máquina en una sola URL con todas las páginas de documentación de GaiaEx, el esquema OpenAPI 3.0 y la colección de Postman.
1. Descripción general de arquitectura y multiversión
El Gateway FIX institucional nativo en C++26 de GaiaEx proporciona Order Entry determinista y de latencia ultrabaja, Drop Copy en tiempo real, consulta de posiciones y órdenes, y transmisión de datos de mercado L1/L2 sobre sesiones persistentes TCP/TLS.
Descargar esquema XML de QuickFIX / OnixS: /fix-dictionary.xml — compatible con QuickFIX (C++/Python/Go), QuickFIX/J, OnixS, OneZero y plataformas OMS institucionales. Configure su motor de cliente con ValidateUserDefinedFields=N y ValidateFieldsOutOfOrder=N para garantizar la compatibilidad futura.
| Tipo de sesión de Gateway | Puerto | Versiones compatibles | Capacidades | Política de acceso |
|---|---|---|---|---|
| Order Management (OE) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Entrada de órdenes (35=D), Cancelación (35=F), Modificación (35=G), Cancelación masiva (35=q), Estado de orden (35=H), Posiciones (35=AN), Límites de tasa (35=XLQ), Instrumentos (35=x) | API Key de lectura + trading (Read + Trade) |
| Drop Copy (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Flujo consolidado en tiempo real de ExecutionReport (35=8) etiquetado con 797=Y y 9406=Y en todas las órdenes FIX y REST/HTTP | Lectura exclusiva obligatoria (35=j rechaza órdenes) |
| Market Data (MD) | 9879 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Snapshot (35=W), IncrementalRefresh (35=X) y MarketDataRequestReject (35=Y) L1/L2 en tiempo real | Lectura exclusiva obligatoria (35=j rechaza órdenes) |
Negociación de versiones y reglas de cable (Wire Rules)
| Versión FIX | BeginString (8) | Etiqueta de Logon (35=A) | Etiqueta de encabezado de aplicación | ExecType (150) de trade | Regla ExecTransType (20) |
|---|---|---|---|---|---|
| FIX 4.2 | 8=FIX.4.2 | Ninguno | Ninguno | 150=1 (Parcial), 150=2 (Fill) | Obligatorio (20=0 Nueva, 20=3 Estado) |
| FIX 4.4 | 8=FIX.4.4 | Ninguno | Ninguno | 150=F (Trade) con 39=1/2 | Prohibido (rechazado mediante 35=3, 371=20, 373=2) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 150=F (Trade) con 39=1/2 | Prohibido (rechazado mediante 35=3, 371=20, 373=2) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 150=F (Trade) con 39=1/2 | Prohibido (rechazado mediante 35=3, 371=20, 373=2) |
2. Gestión de sesiones y Logon HMAC-SHA256 (35=A)
Cada sesión FIX comienza con una trama Logon (35=A) autenticada mediante su API Key de GaiaEx (Tag 553), su API Secret (Tag 554) y una firma HMAC-SHA256 en hexadecimal en minúsculas en 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 | Nombre de campo | Req | Descripción |
|---|---|---|---|
98 | EncryptMethod | Y | 0 = Ninguno / cifrado de transporte TLS |
108 | HeartBtInt | Y | Intervalo de heartbeat en segundos (recomendado: 30) |
141 | ResetSeqNumFlag | N | Y = Restablecer números de secuencia a 1; N = Reanudar el estado de secuencia intradía |
553 | Username | Y | API Key de GaiaEx |
554 | Password | Y | API Secret de GaiaEx |
96 | RawData | Y | Firma HMAC-SHA256 hexadecimal de 64 caracteres sobre 52|A|34|49|56 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | Establezca 797=Y, 9406=Y o 50=DROPCOPY para registrar una sesión Drop Copy de solo lectura |
1409 | SessionStatus | Out | Devuelto en 35=A / 35=5: 0=Activo, 4=Logout completado, 5=Autenticación errónea, 6=Secuencia demasiado baja, 101=Límite de secuencia de 100M |
Recuperación de brechas (35=2 y 35=4) y Cancelación por desconexión (CoD)
- Detección de brechas entrantes: Si un mensaje entrante contiene
MsgSeqNum (34) > ExpectedSeqNum, el gateway emite de inmediatoResendRequest (35=2, 7=ExpectedSeqNum, 16=0). SiMsgSeqNum (34) < ExpectedSeqNumsinPossDupFlag (43=Y), el gateway emiteLogout (35=5, 1409=6)y cierra el socket. - Repetición saliente: Cuando el cliente envía
ResendRequest (35=2), el gateway reproduce todos los mensajes de aplicación (incluidos los informes de Drop Copy35=8) con43=Yy122=OrigSendingTime, y fusiona las tramas administrativas enSequenceReset-GapFill (35=4, 123=Y). - Cancelación automática por desconexión (CoD): Cuando se desconecta una sesión de Order Management, todas las órdenes activas en espera (
OrdStatus 39=0) enviadas en esa sesión se cancelan automáticamente (150=4, 39=4, 103=3020) y se transmiten en tiempo real a cualquier sesión Drop Copy activa.
3. Entrada, modificación, cancelación y consulta de órdenes (35=D, G, F, q, H, AN, XLQ)
NewOrderSingle (35=D)
| Tag | Nombre de campo | Req | Valores admitidos y notas |
|---|---|---|---|
11 | ClOrdID | Y | Identificador único de orden asignado por el cliente (hasta 31 caracteres) |
1 | Account | N | Dirección de bóveda de autocustodia (0x...) o identificador de subcuenta |
50 | SenderSubID | N | ID de trader o estrategia; devuelto en TargetSubID (57) en 35=8 |
55 | Symbol | Y | Perpetuos USDC (BTCUSDC, ETHUSDC, SOLUSDC), Perpetuos USDT (BTCUSDT, ETHUSDT), Perpetuos RWA (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | Y | 1 = Compra (Buy), 2 = Venta (Sell) |
38 | OrderQty | Y | Cantidad de la orden en el activo base (admite precisión fraccionaria de 4 decimales, ej. 0.0050) |
40 | OrdType | Y | 1 = Market, 2 = Limit, 4 = Stop Limit (requiere 99=StopPx), p = Post-Only (o 18=6) |
44 | Price | C | Precio límite (requerido para 40=2, 40=4, 40=p) |
59 | TimeInForce | N | 1 = GTC (por defecto), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | N | 1 = Cash (por defecto), 2 = Apertura con margen (Margin Open), 3 = Cierre con margen (Margin Close) |
Modificación (35=G), Cancelación (35=F), Cancelación masiva (35=q), Estado (35=H), Posiciones (35=AN) y Límites (35=XLQ)
| MsgType | Nombre del mensaje | Etiquetas de solicitud clave | Respuesta del Gateway |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 35=8 con 150=5, 39=5 (Replaced) o 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | 35=8 en dos pasos: 150=6, 39=6 (Pending Cancel) → 150=4, 39=4 (Canceled), o 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (Cancelar todas las órdenes) | 35=r (1369=MassActionReportID, 531=7) + un 35=8 (150=4, 39=4) por cada orden cancelada |
35=H | OrderStatusRequest | 11=ClOrdID (o 37=OrderID), 790=OrdStatusReqID | 35=8 con 150=I (Estado de orden) o 150=8, 103=5 (Orden desconocida) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (Posiciones), 1=Account, 55=Symbol | PositionReport (35=AP) con 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice |
35=XLQ | LimitQuery | 25003=ReqID | LimitResponse (35=XLR) con 25005=ORDERS (500/s) y 25005=CONNECTIONS (20/cuenta) |
4. Drop Copy y conciliación en tiempo real (797=Y / 9406=Y)
Drop Copy ofrece a los prime brokers, motores de riesgo y sistemas de conciliación de back-office un flujo de solo lectura en tiempo real de todos los eventos ExecutionReport (35=8) en las sesiones FIX Order Entry y las órdenes de la API REST/HTTP.
- Indicadores de suscripción universal: Conéctese al puerto
9878y envíeLogon (35=A)con797=Y(CopyMsgIndicator),9406=Y(DropCopyFlag) o50=DROPCOPY(SenderSubID). - Sellado de salida de doble etiqueta: Cada trama de Drop Copy
35=8contiene57=DROPCOPY,797=Yy9406=Y, además del desglose completo de comisiones/reembolsos (381=GrossTradeAmt,1057=AggressorIndicator,136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4,20000=TradeFeeRebateAmt). - Protección estricta de solo lectura: Cualquier intento de enviar
35=D,35=F,35=Go35=qen una sesión Drop Copy se rechaza inmediatamente medianteBusinessMessageReject (35=j, 380=4). - Recuperación de brechas de secuencia: Los informes de Drop Copy salientes se persisten en el almacenamiento de secuencias de la sesión y pueden reproducirse mediante
ResendRequest (35=2)conPossDupFlag (43=Y).
5. Datos de mercado (35=V, W, X, Y) y datos de referencia (35=x, y, h)
Conéctese al puerto 9879 para la transmisión dedicada de datos de mercado o consulte las especificaciones de los instrumentos mediante SecurityListRequest (35=x).
- MarketDataRequest (
35=V): Envíe262=MDReqID,263=1(Instantánea + Actualizaciones) o0(Instantánea),264=1(Top of Book) o20(Profundidad completa), y55=Symbol. DevuelveMarketDataSnapshotFullRefresh (35=W)seguido deMarketDataIncrementalRefresh (35=X). Los símbolos desconocidos devuelvenMarketDataRequestReject (35=Y, 281=0). - SecurityListRequest (
35=x): Envíe320=SecurityReqIDy559=0(un solo símbolo en55) o559=4(todos los instrumentos). DevuelveSecurityList (35=y)con el tamaño del tick (969=MinPriceIncrement), la cantidad mínima/máxima de orden (8000/8001) y la precisión decimal (8002/8003). - TradingSessionStatus (
35=h): Devuelve340=2(Abierto 24x7x365) o340=1(Detenido).
Plantilla de configuración de cliente 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