GaiaExGaiaEx
API

机构级 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) 与 QuickFIX XML 架构定义。

AI AGENT READY为 Claude Code, OpenAI Codex 和 Antigravity (`agy`) 配备官方 GaiaEx 技能
CLAUDE CODESKILL.md
Claude SKILL.md

开箱即用的 Claude Code 技能,包含 HMAC-SHA256 签名、/fapi/v1 与 /fapi/v2 数据架构以及密钥信息脱敏防护机制。

原始数据 ↗
OPENAI CODEXAGENTS.md
Codex AGENTS.md

适用于 OpenAI Codex CLI 的开箱即用代码仓 AGENTS.md — 包含最小价格变动规则、速率限制配额和自托管边界。

原始数据 ↗
ANTIGRAVITYAGY.md
Antigravity AGY.md

Google Antigravity (agy) 与 Gemini 智能体规范,附带经过验证的异步 Python WebSocket + REST 执行模板。

原始数据 ↗
UNIVERSAL LLMllms.txt
/llms.txt Index

包含所有 GaiaEx 文档页面、OpenAPI 3.0 规范和 Postman 集合的单 URL 机器可读索引。

原始数据 ↗

1. 架构与多版本概述

GaiaEx 原生 C++26 机构级 FIX 网关通过持久化 TCP/TLS 会话提供确定性、超低延迟的订单录入、实时 Drop Copy、持仓与订单查询以及 L1/L2 行情数据流服务。

下载 QuickFIX / OnixS XML Schema: /fix-dictionary.xml — 兼容 QuickFIX (C++/Python/Go)、QuickFIX/J、OnixS、OneZero 及各类机构级 OMS 平台。请在客户端引擎中配置 ValidateUserDefinedFields=N 和 ValidateFieldsOutOfOrder=N 以确保向前兼容性。

网关会话类型端口支持的版本功能特性访问策略
订单管理 (OE)9878FIX.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 Key
Drop Copy (DC)9878FIX.4.2、FIX.4.4、FIX.5.0、FIX.5.2涵盖所有 FIX 及 REST/HTTP 订单的实时统一 ExecutionReport (35=8) 流,带有 797=Y 和 9406=Y 标记强制只读 (35=j 将拒绝订单)
市场数据 (MD)9879FIX.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.28=FIX.4.2无无150=1 (部分成交)、150=2 (全部成交)强制要求 (20=0 新建订单、20=3 状态)
FIX 4.48=FIX.4.4无无150=F (成交),带有 39=1/2禁止使用 (通过 35=3, 371=20, 373=2 拒绝)
FIX 5.08=FIXT.1.11137=71128=7150=F (成交),带有 39=1/2禁止使用 (通过 35=3, 371=20, 373=2 拒绝)
FIX 5.2 (5.0 SP2)8=FIXT.1.11137=91128=9150=F (成交),带有 39=1/2禁止使用 (通过 35=3, 371=20, 373=2 拒绝)

2. 会话管理与 HMAC-SHA256 登录 (35=A)

每个 FIX 会话都始于一个 Logon (35=A) 帧,该帧通过您的 GaiaEx API Key (Tag 553)、API Secret (Tag 554) 以及位于 RawData (Tag 96) 中的小写十六进制 HMAC-SHA256 签名进行身份验证。

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()
标签字段名称必填描述
98EncryptMethodY0 = 无 / TLS 传输加密
108HeartBtIntY心跳间隔(秒)(推荐值:30)
141ResetSeqNumFlagNY = 重置序列号为 1;N = 恢复日内序列状态
553UsernameYGaiaEx API Key
554PasswordYGaiaEx API Secret
96RawDataY对 52|A|34|49|56 进行 HMAC-SHA256 计算所得的 64 字符十六进制签名
797 / 9406CopyMsgIndicator / DropCopyFlagN设置 797=Y、9406=Y 或 50=DROPCOPY 以注册只读 Drop Copy 会话
1409SessionStatus出参在 35=A / 35=5 中返回:0=活跃,4=登出完成,5=鉴权失败,6=序列号过低,101=达到 1 亿序列号上限

空缺恢复 (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) 并关闭套接字。
  • 出站重放:当客户端发送 ResendRequest (35=2) 时,网关会重放所有应用层消息(包括 Drop Copy 35=8 报告),并附带 43=Y 和 122=OrigSendingTime,同时将管理层帧合并为 SequenceReset-GapFill (35=4, 123=Y)。
  • 断开连接自动撤单 (CoD):当订单管理会话断开时,在该会话上挂起的所有未结订单 (OrdStatus 39=0) 将自动被撤销 (150=4, 39=4, 103=3020),并实时广播至所有活动的 Drop Copy 会话。

3. 订单录入、修改、撤单与查询 (35=D, G, F, q, H, AN, XLQ)

单个新订单 (35=D)

标签字段名称必填支持的值及说明
11ClOrdIDY客户端分配的唯一订单标识符(最多 31 个字符)
1AccountN自托管金库地址 (0x...) 或子账户标识符
50SenderSubIDN交易员或策略 ID;在 35=8 中的 TargetSubID (57) 回显
55SymbolYUSDC 永续合约 (BTCUSDC、ETHUSDC、SOLUSDC)、USDT 永续合约 (BTCUSDT、ETHUSDT)、RWA 永续合约 (xyz:GOLD / GOLDUSDC、xyz:NVDA、xyz:TSLA)
54SideY1 = 买入,2 = 卖出
38OrderQtyY以基础资产计量的订单数量(支持 4 位小数精度,例如 0.0050)
40OrdTypeY1 = 市价单,2 = 限价单,4 = 止损限价单(需要 99=StopPx),p = 只做 Maker(或 18=6)
44Price条件必填限价价格(40=2、40=4、40=p 必需)
59TimeInForceN1 = GTC(默认),3 = IOC,4 = FOK,5 = GTX
544CashMarginN1 = 现货(默认),2 = 保证金开仓,3 = 保证金平仓

改单 (35=G)、撤单 (35=F)、批量撤单 (35=q)、状态查询 (35=H)、持仓 (35=AN) 与限制查询 (35=XLQ)

MsgType消息名称关键请求标签网关响应
35=GOrderCancelReplaceRequest11=ClOrdID、41=OrigClOrdID、55=Symbol、54=Side、38=OrderQty、44=Price带有 150=5, 39=5 (已替换) 的 35=8 或 35=9 (434=2)
35=FOrderCancelRequest11=ClOrdID、41=OrigClOrdID、55=Symbol、54=Side两步 35=8:150=6, 39=6 (待撤单) → 150=4, 39=4 (已撤销),或 35=9 (434=1)
35=qOrderMassCancelRequest11=ClOrdID、530=7 (撤销所有订单)35=r (1369=MassActionReportID, 531=7) + 每个已撤销订单各一条 35=8 (150=4, 39=4)
35=HOrderStatusRequest11=ClOrdID(或 37=OrderID)、790=OrdStatusReqID带有 150=I (订单状态) 的 35=8 或 150=8, 103=5 (未知订单)
35=ANRequestForPositions710=PosReqID、724=0 (持仓)、1=Account、55=Symbol带有 721=PosMaintRptID、728=0、704=LongQty、705=ShortQty、730=SettlePrice 的 PositionReport (35=AP)
35=XLQLimitQuery25003=ReqID带有 25005=ORDERS (500/秒) 和 25005=CONNECTIONS (20/账户) 的 LimitResponse (35=XLR)

4. 实时 Drop Copy 与对账 (797=Y / 9406=Y)

Drop Copy 为主经纪商、风险控制引擎和后台对账系统提供实时、只读的流服务,涵盖 FIX 订单录入会话和 REST/HTTP API 订单中的所有 ExecutionReport (35=8) 事件。

  • 通用订阅标识:连接至端口 9878 并发送带有 797=Y (CopyMsgIndicator)、9406=Y (DropCopyFlag) 或 50=DROPCOPY (SenderSubID) 的 Logon (35=A)。
  • 出站双标签标记:每个 Drop Copy 35=8 帧都携带 57=DROPCOPY、797=Y 和 9406=Y,以及完整的手续费/返佣明细 (381=GrossTradeAmt、1057=AggressorIndicator、136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4、20000=TradeFeeRebateAmt)。
  • 严格只读保护:在 Drop Copy 会话上提交 35=D、35=F、35=G 或 35=q 的任何尝试都将被 BusinessMessageReject (35=j, 380=4) 立即拒绝。
  • 序列空缺恢复:出站 Drop Copy 报告会持久化在会话序列存储中,并可通过带有 PossDupFlag (43=Y) 的 ResendRequest (35=2) 进行重放。

5. 行情数据 (35=V, W, X, Y) 与参考数据 (35=x, y, h)

连接至端口 9879 获取专用行情数据流,或通过 SecurityListRequest (35=x) 查询合约规格。

  • MarketDataRequest (35=V):发送 262=MDReqID、263=1(快照 + 增量更新)或 0(快照)、264=1(最优买卖价)或 20(全深度),以及 55=Symbol。返回 MarketDataSnapshotFullRefresh (35=W),后跟 MarketDataIncrementalRefresh (35=X)。未知的交易对代码将返回 MarketDataRequestReject (35=Y, 281=0)。
  • SecurityListRequest (35=x):发送 320=SecurityReqID 以及 559=0(55 中的单个交易对代码)或 559=4(所有交易对)。返回包含最小变动价位 (969=MinPriceIncrement)、最小/最大订单数量 (8000/8001) 和小数精度 (8002/8003) 的 SecurityList (35=y)。
  • TradingSessionStatus (35=h):返回 340=2(7x24x365 全天候开放)或 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