機構級 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 規範架構。
SKILL.md隨插即用的 Claude Code 技能,具備 HMAC-SHA256 簽名、/fapi/v1 與 /fapi/v2 模式,以及機密遮蔽防護機制。
AGENTS.md適用於 OpenAI Codex CLI 的隨插即用儲存庫 AGENTS.md — 包含報價精度跳動規則、速率限制配額與自託管邊界設定。
AGY.mdGoogle Antigravity (agy) 與 Gemini 代理規範,內含經認證的非同步 Python WebSocket + REST 執行範本。
llms.txt單一 URL 機器可讀索引,包含所有 GaiaEx 文檔頁面、OpenAPI 3.0 規範架構與 Postman 集合。
1. 架構與多版本概覽
GaiaEx 原生 C++26 機構級 FIX 閘道透過持久 TCP/TLS 連線提供確定性、超低延遲的訂單輸入 (Order Entry)、即時 Drop Copy、部位與訂單查詢以及 L1/L2 市場數據串流。
下載 QuickFIX / OnixS XML 架構: /fix-dictionary.xml — 相容於 QuickFIX (C++/Python/Go)、QuickFIX/J、OnixS、OneZero 及機構級 OMS 平台。請為您的客戶端引擎配置 ValidateUserDefinedFields=N 與 ValidateFieldsOutOfOrder=N 以確保向前相容性。
| 閘道連線類型 | 連接埠 | 支援版本 | 功能 | 存取政策 |
|---|---|---|---|---|
| 訂單管理 (OE) | 9878 | FIX.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 金鑰 |
| Drop Copy (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | 跨所有 FIX 與 REST/HTTP 訂單即時匯總 ExecutionReport (35=8) 串流,並標記 797=Y 與 9406=Y | 強制唯讀 (35=j 拒絕訂單) |
| 市場數據 (MD) | 9879 | FIX.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.2 | 8=FIX.4.2 | 無 | 無 | 150=1 (部分成交), 150=2 (完全成交) | 強制 (20=0 新增, 20=3 狀態) |
| FIX 4.4 | 8=FIX.4.4 | 無 | 無 | 150=F (交易) 附帶 39=1/2 | 禁止 (透過 35=3, 371=20, 373=2 拒絕) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 150=F (交易) 附帶 39=1/2 | 禁止 (透過 35=3, 371=20, 373=2 拒絕) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 150=F (交易) 附帶 39=1/2 | 禁止 (透過 35=3, 371=20, 373=2 拒絕) |
2. 連線管理與 HMAC-SHA256 登入 (35=A)
每個 FIX 連線均以 Logon (35=A) 訊框開始,透過您的 GaiaEx API 金鑰 (Tag 553)、API 密鑰 (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()| 標籤 | 欄位名稱 | 必填 | 說明 |
|---|---|---|---|
98 | EncryptMethod | 是 | 0 = 無 / TLS 傳輸加密 |
108 | HeartBtInt | 是 | 心跳間隔 (秒) (建議:30) |
141 | ResetSeqNumFlag | 否 | Y = 重設序號為 1;N = 恢復日內序號狀態 |
553 | Username | 是 | GaiaEx API 金鑰 |
554 | Password | 是 | GaiaEx API 密鑰 |
96 | RawData | 是 | 針對 52|A|34|49|56 計算的 64 位元十六進位 HMAC-SHA256 簽名 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | 否 | 設定 797=Y、9406=Y 或 50=DROPCOPY 以註冊唯讀 Drop Copy 連線 |
1409 | SessionStatus | 輸出 | 於 35=A / 35=5 中返回:0=活躍, 4=登出完成, 5=認證失敗, 6=序號過低, 101=100M 序號上限 |
序號缺口恢復 (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)時,閘道會以43=Y與122=OrigSendingTime重播所有應用訊息(包括 Drop Copy35=8回報),並將管理訊框合併為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)
NewOrderSingle (35=D)
| 標籤 | 欄位名稱 | 必填 | 支援值與備註 |
|---|---|---|---|
11 | ClOrdID | 是 | 客戶端指定的唯一訂單識別碼 (最多 31 個字元) |
1 | Account | 否 | 自主保管金庫地址 (0x...) 或子帳戶識別碼 |
50 | SenderSubID | 否 | 交易員或策略 ID;會在 35=8 的 TargetSubID (57) 中回顯 |
55 | Symbol | 是 | USDC 永續合約 (BTCUSDC, ETHUSDC, SOLUSDC)、USDT 永續合約 (BTCUSDT, ETHUSDT)、RWA 永續合約 (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | 是 | 1 = 買入, 2 = 賣出 |
38 | OrderQty | 是 | 以基礎資產計價的訂單數量 (支援 4 位小數精準度,例如 0.0050) |
40 | OrdType | 是 | 1 = 市價單, 2 = 限價單, 4 = 停損限價單 (需填寫 99=StopPx), p = 只做 Maker (Post-Only) (或 18=6) |
44 | Price | 條件 | 限價 (對 40=2、40=4、40=p 為必填) |
59 | TimeInForce | 否 | 1 = GTC (預設), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | 否 | 1 = 現貨 (預設), 2 = 保證金開倉, 3 = 保證金平倉 |
改單 (35=G)、撤單 (35=F)、批次撤單 (35=q)、狀態 (35=H)、部位 (35=AN) 與限制 (35=XLQ)
| MsgType | 訊息名稱 | 關鍵請求標籤 | 閘道回應 |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 35=8 帶有 150=5, 39=5 (已替換) 或 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | 兩步驟 35=8:150=6, 39=6 (待撤銷) → 150=4, 39=4 (已撤銷),或 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (撤銷所有訂單) | 35=r (1369=MassActionReportID, 531=7) + 每個撤銷訂單對應一筆 35=8 (150=4, 39=4) |
35=H | OrderStatusRequest | 11=ClOrdID (或 37=OrderID), 790=OrdStatusReqID | 35=8 帶有 150=I (訂單狀態) 或 150=8, 103=5 (未知訂單) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (部位), 1=Account, 55=Symbol | PositionReport (35=AP) 帶有 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice |
35=XLQ | LimitQuery | 25003=ReqID | LimitResponse (35=XLR) 帶有 25005=ORDERS (500/秒) 與 25005=CONNECTIONS (20/帳戶) |
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(全年無休開市 24x7x365) 或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