FIX API dành cho tổ chức (4.2 / 4.4 / 5.0 / 5.2)
Kết nối FIX 4.2, 4.4, 5.0 và 5.2 cấp tổ chức: Nhập lệnh (:9878), Real-Time Drop Copy (797=Y / 9406=Y), Dữ liệu thị trường (:9879) và lược đồ XML QuickFIX.
SKILL.mdSkill tích hợp sẵn cho Claude Code với xác thực chữ ký HMAC-SHA256, lược đồ /fapi/v1 & /fapi/v2 và cơ chế bảo vệ che giấu secret an toàn.
AGENTS.mdTệp AGENTS.md tích hợp cho OpenAI Codex CLI — quy tắc bước giá tick-size, hạn mức tần suất rate-limit và ranh giới tự lưu ký.
AGY.mdĐặc tả agent cho Google Antigravity (agy) & Gemini với các mẫu thực thi REST + WebSocket không đồng bộ (async) bằng Python đã được xác thực.
llms.txtChỉ mục máy đọc được qua một URL duy nhất chứa toàn bộ trang tài liệu GaiaEx, lược đồ OpenAPI 3.0 và bộ sưu tập Postman.
1. Kiến trúc & Tổng quan Đa phiên bản
Gateway FIX Tổ chức C++26 Native của GaiaEx cung cấp khả năng Đặt lệnh xác định (deterministic), độ trễ cực thấp, Drop Copy theo thời gian thực, Truy vấn Vị thế & Lệnh, cũng như luồng Dữ liệu Thị trường L1/L2 qua các phiên TCP/TLS liên tục.
Tải xuống QuickFIX / OnixS XML Schema: /fix-dictionary.xml — tương thích với QuickFIX (C++/Python/Go), QuickFIX/J, OnixS, OneZero và các nền tảng OMS dành cho tổ chức. Cấu hình engine client của bạn với ValidateUserDefinedFields=N và ValidateFieldsOutOfOrder=N để đảm bảo khả năng tương thích xuôi.
| Loại phiên Gateway | Cổng | Các phiên bản được hỗ trợ | Khả năng | Chính sách truy cập |
|---|---|---|---|---|
| Quản lý Lệnh (OE) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Đặt lệnh (35=D), Hủy lệnh (35=F), Sửa lệnh (35=G), Hủy hàng loạt (35=q), Trạng thái lệnh (35=H), Vị thế (35=AN), Giới hạn tần suất (35=XLQ), Công cụ giao dịch (35=x) | API Key Quyền Đọc + Giao dịch |
| Drop Copy (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Luồng ExecutionReport (35=8) hợp nhất theo thời gian thực được gắn thẻ với 797=Y và 9406=Y trên tất cả các lệnh FIX và REST/HTTP | Bắt buộc Chỉ đọc (35=j từ chối các lệnh) |
| Dữ liệu Thị trường (MD) | 9879 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Snapshot (35=W), IncrementalRefresh (35=X), và MarketDataRequestReject (35=Y) L1/L2 theo thời gian thực | Bắt buộc Chỉ đọc (35=j từ chối các lệnh) |
Thương lượng Phiên bản & Quy tắc Truyền dẫn (Wire Rules)
| Phiên bản FIX | BeginString (8) | Thẻ Logon (35=A) | Thẻ App Header | Giao dịch ExecType (150) | Quy tắc ExecTransType (20) |
|---|---|---|---|---|---|
| FIX 4.2 | 8=FIX.4.2 | Không có | Không có | 150=1 (Khớp một phần), 150=2 (Khớp toàn bộ) | Bắt buộc (20=0 Mới, 20=3 Trạng thái) |
| FIX 4.4 | 8=FIX.4.4 | Không có | Không có | 150=F (Giao dịch) cùng 39=1/2 | Bị cấm (bị từ chối qua 35=3, 371=20, 373=2) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 150=F (Giao dịch) cùng 39=1/2 | Bị cấm (bị từ chối qua 35=3, 371=20, 373=2) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 150=F (Giao dịch) cùng 39=1/2 | Bị cấm (bị từ chối qua 35=3, 371=20, 373=2) |
2. Quản lý Phiên & Đăng nhập HMAC-SHA256 (35=A)
Mỗi phiên FIX bắt đầu bằng một khung Logon (35=A) được xác thực qua API Key GaiaEx (Tag 553), API Secret (Tag 554), và một chữ ký HMAC-SHA256 dạng hex viết thường trong 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()| Thẻ | Tên trường | Bắt buộc | Mô tả |
|---|---|---|---|
98 | EncryptMethod | Y | 0 = Không có / Mã hóa tầng vận chuyển TLS |
108 | HeartBtInt | Y | Khoảng thời gian Heartbeat tính bằng giây (khuyến nghị: 30) |
141 | ResetSeqNumFlag | N | Y = Đặt lại số thứ tự về 1; N = Tiếp tục trạng thái số thứ tự trong ngày |
553 | Username | Y | API Key GaiaEx |
554 | Password | Y | API Secret GaiaEx |
96 | RawData | Y | Chữ ký HMAC-SHA256 64 ký tự hex trên 52|A|34|49|56 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | Đặt 797=Y, 9406=Y, hoặc 50=DROPCOPY để đăng ký một phiên Drop Copy chỉ đọc |
1409 | SessionStatus | Out | Được trả về trong 35=A / 35=5: 0=Hoạt động, 4=Đăng xuất hoàn tất, 5=Xác thực không hợp lệ, 6=Số thứ tự quá thấp, 101=Giới hạn số thứ tự 100M |
Phục hồi Khoảng trống Dữ liệu (35=2 & 35=4) & Tự động Hủy khi Mất kết nối (Cancel-on-Disconnect - CoD)
- Phát hiện Khoảng trống Chiều đến (Inbound Gap Detection): Nếu một tin nhắn gửi đến mang
MsgSeqNum (34) > ExpectedSeqNum, gateway sẽ ngay lập tức phát raResendRequest (35=2, 7=ExpectedSeqNum, 16=0). NếuMsgSeqNum (34) < ExpectedSeqNumkhông cóPossDupFlag (43=Y), gateway sẽ phát raLogout (35=5, 1409=6)và đóng socket. - Phát lại Chiều đi (Outbound Replay): Khi client gửi
ResendRequest (35=2), gateway sẽ phát lại tất cả các tin nhắn ứng dụng (bao gồm các báo cáo Drop Copy35=8) với43=Yvà122=OrigSendingTime, đồng thời gộp các khung quản trị thànhSequenceReset-GapFill (35=4, 123=Y). - Tự động Hủy khi Mất kết nối (CoD): Khi một phiên Quản lý Lệnh bị mất kết nối, tất cả các lệnh mở đang chờ (
OrdStatus 39=0) được đặt trên phiên đó sẽ tự động bị hủy (150=4, 39=4, 103=3020) và được thông báo theo thời gian thực tới bất kỳ phiên Drop Copy nào đang hoạt động.
3. Đặt lệnh, Sửa lệnh, Hủy lệnh & Truy vấn Lệnh (35=D, G, F, q, H, AN, XLQ)
NewOrderSingle (35=D)
| Thẻ | Tên trường | Bắt buộc | Giá trị hỗ trợ & Ghi chú |
|---|---|---|---|
11 | ClOrdID | Y | Định danh lệnh duy nhất do client chỉ định (tối đa 31 ký tự) |
1 | Account | N | Địa chỉ vault tự lưu ký (self-custody) (0x...) hoặc định danh tài khoản phụ |
50 | SenderSubID | N | ID của nhà giao dịch hoặc chiến lược; được trả lại nguyên vẹn trong TargetSubID (57) trên 35=8 |
55 | Symbol | Y | Hợp đồng vĩnh cửu USDC (BTCUSDC, ETHUSDC, SOLUSDC), Hợp đồng vĩnh cửu USDT (BTCUSDT, ETHUSDT), Hợp đồng vĩnh cửu RWA (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | Y | 1 = Mua, 2 = Bán |
38 | OrderQty | Y | Số lượng lệnh theo tài sản cơ sở (hỗ trợ độ chính xác phân số 4 chữ số thập phân, ví dụ: 0.0050) |
40 | OrdType | Y | 1 = Lệnh thị trường (Market), 2 = Lệnh giới hạn (Limit), 4 = Lệnh giới hạn dừng (Stop Limit, yêu cầu 99=StopPx), p = Post-Only (hoặc 18=6) |
44 | Price | C | Giá giới hạn (bắt buộc đối với 40=2, 40=4, 40=p) |
59 | TimeInForce | N | 1 = GTC (mặc định), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | N | 1 = Cash (mặc định), 2 = Mở Margin, 3 = Đóng Margin |
Sửa lệnh (35=G), Hủy lệnh (35=F), Hủy hàng loạt (35=q), Trạng thái (35=H), Vị thế (35=AN) & Giới hạn (35=XLQ)
| MsgType | Tên tin nhắn | Các thẻ yêu cầu chính | Phản hồi từ Gateway |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 35=8 với 150=5, 39=5 (Đã thay thế) hoặc 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | Quy trình hai bước 35=8: 150=6, 39=6 (Chờ hủy) → 150=4, 39=4 (Đã hủy), hoặc 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (Hủy tất cả các lệnh) | 35=r (1369=MassActionReportID, 531=7) + một 35=8 (150=4, 39=4) cho mỗi lệnh đã hủy |
35=H | OrderStatusRequest | 11=ClOrdID (hoặc 37=OrderID), 790=OrdStatusReqID | 35=8 với 150=I (Trạng thái lệnh) hoặc 150=8, 103=5 (Không tìm thấy lệnh) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (Vị thế), 1=Account, 55=Symbol | PositionReport (35=AP) với 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice |
35=XLQ | LimitQuery | 25003=ReqID | LimitResponse (35=XLR) với 25005=ORDERS (500/giây) và 25005=CONNECTIONS (20/tài khoản) |
4. Drop Copy Theo Thời Gian Thực & Đối Soát (797=Y / 9406=Y)
Drop Copy cung cấp cho các prime broker, risk engine và hệ thống đối soát back-office một luồng dữ liệu chỉ đọc theo thời gian thực về tất cả các sự kiện ExecutionReport (35=8) trên cả các phiên FIX Order Entry và các lệnh qua REST/HTTP API.
- Cờ Đăng ký Chung (Universal Subscription Flags): Kết nối tới cổng
9878và gửiLogon (35=A)với797=Y(CopyMsgIndicator),9406=Y(DropCopyFlag), hoặc50=DROPCOPY(SenderSubID). - Đóng dấu Thẻ Kép Chiều đi (Dual-Tag Outbound Stamping): Mỗi khung Drop Copy
35=8đều mang57=DROPCOPY,797=Y, và9406=Y, cùng bảng phân tích chi tiết đầy đủ về phí/khoản hoàn phí (381=GrossTradeAmt,1057=AggressorIndicator,136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4,20000=TradeFeeRebateAmt). - Bảo vệ Nghiêm ngặt Cơ chế Chỉ đọc: Bất kỳ nỗ lực nào nhằm gửi
35=D,35=F,35=G, hoặc35=qtrên một phiên Drop Copy đều bị từ chối ngay lập tức quaBusinessMessageReject (35=j, 380=4). - Phục hồi Khoảng trống Số thứ tự (Sequence Gap Recovery): Các báo cáo Drop Copy chiều đi được lưu trữ liên tục trong kho lưu trữ số thứ tự phiên và có thể được phát lại thông qua
ResendRequest (35=2)vớiPossDupFlag (43=Y).
5. Dữ liệu Thị trường (35=V, W, X, Y) & Dữ liệu Tham chiếu (35=x, y, h)
Kết nối tới cổng 9879 để nhận luồng Dữ liệu Thị trường chuyên dụng hoặc truy vấn thông số công cụ giao dịch qua SecurityListRequest (35=x).
- MarketDataRequest (
35=V): Gửi262=MDReqID,263=1(Snapshot + Cập nhật) hoặc0(Snapshot),264=1(Đầu sổ lệnh) hoặc20(Độ sâu toàn phần), và55=Symbol. Trả vềMarketDataSnapshotFullRefresh (35=W)theo sau bởiMarketDataIncrementalRefresh (35=X). Các mã giao dịch không xác định sẽ trả vềMarketDataRequestReject (35=Y, 281=0). - SecurityListRequest (
35=x): Gửi320=SecurityReqIDvà559=0(một mã giao dịch duy nhất trong55) hoặc559=4(tất cả các công cụ giao dịch). Trả vềSecurityList (35=y)với bước giá tick (969=MinPriceIncrement), số lượng lệnh tối thiểu/tối đa (8000/8001), và độ chính xác chữ số thập phân (8002/8003). - TradingSessionStatus (
35=h): Trả về340=2(Mở 24x7x365) hoặc340=1(Tạm dừng).
Mẫu Cấu hình QuickFIX Client (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