API FIX Institusional (4.2 / 4.4 / 5.0 / 5.2)
Konektivitas FIX 4.2, 4.4, 5.0, dan 5.2 tingkat institusional: Order Entry (:9878), Real-Time Drop Copy (797=Y / 9406=Y), Data Pasar (:9879), dan skema XML QuickFIX.
SKILL.mdKeterampilan drop-in Claude Code dengan penandatanganan HMAC-SHA256, skema /fapi/v1 & /fapi/v2, serta perlindungan redaksi data rahasia.
AGENTS.mdAGENTS.md repositori drop-in untuk OpenAI Codex CLI — aturan tick-size, batas kecepatan rate-limit, dan batasan self-custody.
AGY.mdSpesifikasi agen Google Antigravity (agy) & Gemini dengan templat eksekusi async Python WebSocket + REST terverifikasi.
llms.txtIndeks URL tunggal yang dapat dibaca mesin untuk semua halaman dokumentasi GaiaEx, skema OpenAPI 3.0, dan koleksi Postman.
1. Gambaran Umum Arsitektur & Multi-Versi
GaiaEx Native C++26 Institutional FIX Gateway menyediakan Order Entry berlatensi sangat rendah dan deterministik, Real-Time Drop Copy, Penyelidikan Posisi & Pesanan, serta streaming Data Pasar L1/L2 melalui sesi TCP/TLS persisten.
Unduh Skema XML QuickFIX / OnixS: /fix-dictionary.xml — kompatibel dengan QuickFIX (C++/Python/Go), QuickFIX/J, OnixS, OneZero, dan platform OMS institusional. Konfigurasikan engine klien Anda dengan ValidateUserDefinedFields=N dan ValidateFieldsOutOfOrder=N untuk kompatibilitas ke depan.
| Tipe Sesi Gateway | Port | Versi yang Didukung | Kemampuan | Kebijakan Akses |
|---|---|---|---|---|
| Order Management (OE) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Order entry (35=D), Batal (35=F), Amandemen (35=G), Pembatalan Massal (35=q), Status Pesanan (35=H), Posisi (35=AN), Batas Laju (35=XLQ), Instrumen (35=x) | API Key Read + Trade |
| Drop Copy (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Stream ExecutionReport (35=8) konsolidasi real-time yang ditandai dengan 797=Y dan 9406=Y di seluruh pesanan FIX dan REST/HTTP | Diberlakukan Read-Only (35=j menolak pesanan) |
| Market Data (MD) | 9879 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Snapshot (35=W), IncrementalRefresh (35=X), dan MarketDataRequestReject (35=Y) L1/L2 real-time | Diberlakukan Read-Only (35=j menolak pesanan) |
Negosiasi Versi & Aturan Wire
| Versi FIX | BeginString (8) | Tag Logon (35=A) | Tag App Header | Trade ExecType (150) | Aturan ExecTransType (20) |
|---|---|---|---|---|---|
| FIX 4.2 | 8=FIX.4.2 | Tidak ada | Tidak ada | 150=1 (Sebagian), 150=2 (Penuh) | Wajib (20=0 Baru, 20=3 Status) |
| FIX 4.4 | 8=FIX.4.4 | Tidak ada | Tidak ada | 150=F (Trade) dengan 39=1/2 | Dilarang (ditolak via 35=3, 371=20, 373=2) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 150=F (Trade) dengan 39=1/2 | Dilarang (ditolak via 35=3, 371=20, 373=2) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 150=F (Trade) dengan 39=1/2 | Dilarang (ditolak via 35=3, 371=20, 373=2) |
2. Manajemen Sesi & HMAC-SHA256 Logon (35=A)
Setiap sesi FIX dimulai dengan frame Logon (35=A) yang diautentikasi melalui GaiaEx API Key (Tag 553), API Secret (Tag 554), dan tanda tangan HMAC-SHA256 heksadesimal huruf kecil dalam 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 | Nama Bidang | Wajib | Deskripsi |
|---|---|---|---|
98 | EncryptMethod | Y | 0 = Tidak ada / enkripsi transport TLS |
108 | HeartBtInt | Y | Interval heartbeat dalam detik (disarankan: 30) |
141 | ResetSeqNumFlag | N | Y = Atur ulang nomor urut ke 1; N = Lanjutkan status urutan intraday |
553 | Username | Y | GaiaEx API Key |
554 | Password | Y | GaiaEx API Secret |
96 | RawData | Y | Tanda tangan HMAC-SHA256 heksadesimal 64 karakter di atas 52|A|34|49|56 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | Atur 797=Y, 9406=Y, atau 50=DROPCOPY untuk mendaftarkan sesi Drop Copy hanya-baca |
1409 | SessionStatus | Keluar | Dikembalikan dalam 35=A / 35=5: 0=Aktif, 4=Logout Selesai, 5=Autentikasi Buruk, 6=Urutan Terlalu Rendah, 101=Batas Urutan 100M |
Pemulihan Gap (35=2 & 35=4) & Cancel-on-Disconnect (CoD)
- Deteksi Gap Masuk: Jika pesan masuk membawa
MsgSeqNum (34) > ExpectedSeqNum, gateway segera memancarkanResendRequest (35=2, 7=ExpectedSeqNum, 16=0). JikaMsgSeqNum (34) < ExpectedSeqNumtanpaPossDupFlag (43=Y), gateway memancarkanLogout (35=5, 1409=6)dan menutup soket. - Replay Keluar: Ketika klien mengirimkan
ResendRequest (35=2), gateway memutar ulang semua pesan aplikasi (termasuk laporan Drop Copy35=8) dengan43=Ydan122=OrigSendingTime, serta menggabungkan frame administratif ke dalamSequenceReset-GapFill (35=4, 123=Y). - Cancel-on-Disconnect (CoD) Otomatis: Ketika sesi Order Management terputus, semua pesanan resting terbuka (
OrdStatus 39=0) yang ditempatkan pada sesi tersebut secara otomatis dibatalkan (150=4, 39=4, 103=3020) dan disiarkan secara real-time ke sesi Drop Copy mana pun yang aktif.
3. Order Entry, Modifikasi, Pembatalan & Penyelidikan (35=D, G, F, q, H, AN, XLQ)
NewOrderSingle (35=D)
| Tag | Nama Bidang | Wajib | Nilai & Catatan yang Didukung |
|---|---|---|---|
11 | ClOrdID | Y | Pengidentifikasi pesanan unik yang ditentukan klien (hingga 31 karakter) |
1 | Account | N | Alamat vault self-custody (0x...) atau pengidentifikasi sub-akun |
50 | SenderSubID | N | ID trader atau strategi; digemakan kembali dalam TargetSubID (57) pada 35=8 |
55 | Symbol | Y | Perp USDC (BTCUSDC, ETHUSDC, SOLUSDC), Perp USDT (BTCUSDT, ETHUSDT), Perp RWA (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | Y | 1 = Beli, 2 = Jual |
38 | OrderQty | Y | Jumlah pesanan dalam aset dasar (mendukung presisi fraksional 4 desimal, mis. 0.0050) |
40 | OrdType | Y | 1 = Market, 2 = Limit, 4 = Stop Limit (memerlukan 99=StopPx), p = Post-Only (atau 18=6) |
44 | Price | C | Harga limit (diperlukan untuk 40=2, 40=4, 40=p) |
59 | TimeInForce | N | 1 = GTC (default), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | N | 1 = Cash (default), 2 = Margin Open, 3 = Margin Close |
Amandemen (35=G), Batal (35=F), Pembatalan Massal (35=q), Status (35=H), Posisi (35=AN) & Batas (35=XLQ)
| MsgType | Nama Pesan | Tag Permintaan Utama | Respons Gateway |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 35=8 dengan 150=5, 39=5 (Diganti) atau 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | 35=8 dua langkah: 150=6, 39=6 (Menunggu Pembatalan) → 150=4, 39=4 (Dibatalkan), atau 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (Batalkan semua pesanan) | 35=r (1369=MassActionReportID, 531=7) + satu 35=8 (150=4, 39=4) per pesanan yang dibatalkan |
35=H | OrderStatusRequest | 11=ClOrdID (atau 37=OrderID), 790=OrdStatusReqID | 35=8 dengan 150=I (Status Pesanan) atau 150=8, 103=5 (Pesanan tidak dikenal) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (Posisi), 1=Account, 55=Symbol | PositionReport (35=AP) dengan 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice |
35=XLQ | LimitQuery | 25003=ReqID | LimitResponse (35=XLR) dengan 25005=ORDERS (500/dtk) dan 25005=CONNECTIONS (20/akun) |
4. Real-Time Drop Copy & Rekonsiliasi (797=Y / 9406=Y)
Drop Copy menyediakan prime broker, risk engine, dan sistem rekonsiliasi back-office dengan stream hanya-baca real-time dari semua peristiwa ExecutionReport (35=8) di seluruh sesi FIX Order Entry dan pesanan REST/HTTP API.
- Flag Langganan Universal: Sambungkan ke port
9878dan kirimkanLogon (35=A)dengan797=Y(CopyMsgIndicator),9406=Y(DropCopyFlag), atau50=DROPCOPY(SenderSubID). - Pemberian Tanda Tag Ganda Keluar: Setiap frame
35=8Drop Copy membawa57=DROPCOPY,797=Y, dan9406=Y, ditambah rincian biaya/rabat lengkap (381=GrossTradeAmt,1057=AggressorIndicator,136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4,20000=TradeFeeRebateAmt). - Perlindungan Read-Only yang Ketat: Upaya apa pun untuk mengirimkan
35=D,35=F,35=G, atau35=qpada sesi Drop Copy akan langsung ditolak viaBusinessMessageReject (35=j, 380=4). - Pemulihan Gap Urutan: Laporan Drop Copy keluar disimpan secara persisten di penyimpanan urutan sesi dan dapat diputar ulang via
ResendRequest (35=2)denganPossDupFlag (43=Y).
5. Data Pasar (35=V, W, X, Y) & Data Referensi (35=x, y, h)
Sambungkan ke port 9879 untuk streaming Data Pasar khusus atau tanyakan spesifikasi instrumen via SecurityListRequest (35=x).
- MarketDataRequest (
35=V): Kirimkan262=MDReqID,263=1(Snapshot + Pembaruan) atau0(Snapshot),264=1(Top of Book) atau20(Kedalaman Penuh), dan55=Symbol. MengembalikanMarketDataSnapshotFullRefresh (35=W)diikuti olehMarketDataIncrementalRefresh (35=X). Simbol yang tidak dikenal mengembalikanMarketDataRequestReject (35=Y, 281=0). - SecurityListRequest (
35=x): Kirimkan320=SecurityReqIDdan559=0(simbol tunggal dalam55) atau559=4(semua instrumen). MengembalikanSecurityList (35=y)dengan tick size (969=MinPriceIncrement), kuantitas pesanan min/maks (8000/8001), dan presisi desimal (8002/8003). - TradingSessionStatus (
35=h): Mengembalikan340=2(Buka 24x7x365) atau340=1(Dihentikan Sementara).
Templat Konfigurasi Klien 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