واجهة برمجة التطبيقات المؤسسية FIX (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ملف AGENTS.md المدمج لمستودع OpenAI Codex CLI — قواعد حجم التكة، وميزانيات حدود المعدل، وحدود الوصاية الذاتية.
AGY.mdمواصفات وكيل Google Antigravity (agy) و Gemini مع قوالب تنفيذ معتمدة غير متزامنة لـ Python عبر WebSocket + REST.
llms.txtفهرس قابل للقراءة آلياً عبر عنوان URL واحد لجميع صفحات وثائق GaiaEx، ومخطط OpenAPI 3.0، ومجموعة Postman.
1. نظرة عامة على البنية الهندسية وتعدد الإصدارات
توفر بوابة المؤسسات FIX الأصلية المكتوبة بلغة C++26 في GaiaEx إمكانية إدخال الأوامر بزمن انتقال فائق الانخفاض وحتمي، وتغذية Drop Copy في الوقت الفعلي، والاستعلام عن المراكز والأوامر، بالإضافة إلى بث بيانات السوق L1/L2 عبر جلسات TCP/TLS الدائمة.
تنزيل مخطط 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 | بث موحد في الوقت الفعلي لـ ExecutionReport (35=8) مع وضع علامات 797=Y و9406=Y عبر جميع أوامر FIX وREST/HTTP | تطبيق سياسة القراءة فقط إلزاميًا (يرفض 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)، وتوقيع HMAC-SHA256 سداسي عشري بأحرف صغيرة في 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()| العلامة | اسم الحقل | مطلوب | الوصف |
|---|---|---|---|
98 | EncryptMethod | Y | 0 = لا شيء / تشفير نقل TLS |
108 | HeartBtInt | Y | الفاصل الزمني لنبضات القلب بالثواني (الموصى به: 30) |
141 | ResetSeqNumFlag | N | Y = إعادة تعيين أرقام التسلسل إلى 1؛ N = استئناف حالة التسلسل خلال اليوم |
553 | Username | Y | مفتاح GaiaEx API |
554 | Password | Y | سر GaiaEx API |
96 | RawData | Y | توقيع HMAC-SHA256 سداسي عشري من 64 حرفًا على 52|A|34|49|56 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | قم بتعيين 797=Y، أو 9406=Y، أو 50=DROPCOPY لتسجيل جلسة Drop Copy للقراءة فقط |
1409 | SessionStatus | خروج | يتم إرجاعه في 35=A / 35=5: 0=نشط، 4=اكتمل تسجيل الخروج، 5=مصادقة غير صحيحة، 6=التسلسل منخفض جدًا، 101=الحد الأقصى للتسلسل 100 مليون |
استرداد الفجوات (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 Copy35=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)
NewOrderSingle (35=D)
| العلامة | اسم الحقل | مطلوب | القيم المدعومة والملاحظات |
|---|---|---|---|
11 | ClOrdID | Y | معرّف فريد للأمر يحدده العميل (حتى 31 حرفًا) |
1 | Account | N | عنوان خزينة الحفظ الذاتي (0x...) أو معرّف الحساب الفرعي |
50 | SenderSubID | N | معرّف المتداول أو الاستراتيجية؛ يُعاد إرساله في TargetSubID (57) ضمن 35=8 |
55 | Symbol | Y | عقود USDC الدائمة (BTCUSDC، ETHUSDC، SOLUSDC)، عقود USDT الدائمة (BTCUSDT، ETHUSDT)، عقود الأصول الحقيقية (RWA) الدائمة (xyz:GOLD / GOLDUSDC، xyz:NVDA، xyz:TSLA) |
54 | Side | Y | 1 = شراء، 2 = بيع |
38 | OrderQty | Y | كمية الأمر بالأصل الأساسي (تدعم دقة كسرية حتى 4 منازل عشرية، مثل 0.0050) |
40 | OrdType | Y | 1 = سوق، 2 = محدد، 4 = إيقاف محدد (يتطلب 99=StopPx)، p = نشر فقط (أو 18=6) |
44 | Price | C | السعر المحدد (مطلوب لـ 40=2، 40=4، 40=p) |
59 | TimeInForce | N | 1 = GTC (افتراضي)، 3 = IOC، 4 = FOK، 5 = GTX |
544 | CashMargin | N | 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 لوسطاء الحفظ المالي (Prime Brokers)، ومحركات المخاطر، وأنظمة التسوية للمكاتب الخلفية بثًا لحظيًا للقراءة فقط لجميع أحداث ExecutionReport (35=8) عبر كل من جلسات إدخال أوامر FIX وأوامر واجهة برمجة التطبيقات REST/HTTP.
- علامات الاشتراك العامة: اتصل بالمنفذ
9878وأرسلLogon (35=A)مع797=Y(CopyMsgIndicator)، أو9406=Y(DropCopyFlag)، أو50=DROPCOPY(SenderSubID). - الوسم الثنائي الصادر: يحمل كل إطار
35=8في Drop Copy الوسوم57=DROPCOPY، و797=Y، و9406=Y، بالإضافة إلى تفصيل كامل للرسوم/الخصومات (381=GrossTradeAmt،1057=AggressorIndicator،136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4،20000=TradeFeeRebateAmt). - حماية صارمة للقراءة فقط: يتم رفض أي محاولة لإرسال
35=D، أو35=F، أو35=G، أو35=qعبر جلسة Drop Copy فورًا من خلالBusinessMessageReject (35=j, 380=4). - استرداد فجوات التسلسل: يتم حفظ تقارير Drop Copy الصادرة في مخزن تسلسل الجلسة ويمكن إعادة بثها عبر
ResendRequest (35=2)معPossDupFlag (43=Y).
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(جميع الأدوات المالية). يعيدSecurityList (35=y)متضمنًا حجم التكة (969=MinPriceIncrement)، والحد الأدنى/الأقصى لكمية الأمر (8000/8001)، والدقة العشرية (8002/8003). - TradingSessionStatus (
35=h): يعيد340=2(مفتوح على مدار الساعة 24×7×365) أو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