نموذج الاتصال¶
مقدمة ¶
تستخدم FIX API الاتصال القائم على الجلسات. يتم تعريف الجلسة على أنها اتصال بين طرفين: المبادر (العميل)، الطرف الذي يبدأ الاتصال، والقابل (الخادم)، الطرف الذي يتلقى طلب الاتصال من المبادر.
يتحقق الخادم من صحة طلبات العميل باستخدام رسالة تسجيل الدخول.
بروتوكول جلسة FIX ¶
تحافظ كل جلسة على رسائل ثنائية الاتجاه بين العميل وخادم cTrader. يمكن أن تتضمن الجلسة اتصالات فعلية متعددة ويتم الحفاظ عليها باستخدام أرقام التسلسل.
تتلقى كل رسالة جديدة ضمن جلسة واحدة رقم تسلسل فريد يبدأ من 1 (واحد). يعتمد كلا الطرفين على أرقام التسلسل للحفاظ على الاتصال المنظم. يتم إعادة إرسال الرسائل المفقودة باتفاق ثنائي بين الطرفين.
تدفق الجلسة النموذجي:
- يبدأ العميل الجلسة برسالة تسجيل الدخول.
- يتبادل العميل رسائل التطبيق مع الخادم.
- تنتهي الجلسة برسالة تسجيل الخروج.
فئات رسائل بروتوكول cTrader FIX ¶
كما هو محدد في بروتوكول FIX، يستخدم خادم cTrader FIX مستويين مختلفين من البيانات: النظام والتطبيق.
يرجى ملاحظة أن هذه هي الحد الأدنى من مجموعة الرسائل المطلوبة لدعم سير العمل الضروري وهي عرضة للتغيير بمرور الوقت مع تطور كل من احتياجات العمل ومعيار FIX.
رسائل النظام (الإدارة) ¶
- نبض القلب (العميل ↔ cTrader) - يستخدم للتحقق من رابط الاتصال بين الطرفين.
- طلب الاختبار (العميل ↔ cTrader) - يستخدم لاختبار صحة رابط الاتصال.
- تسجيل الدخول (العميل → cTrader) - رسالة مصادقة العميل.
- تسجيل الخروج (العميل → cTrader) - الإنهاء العادي للجلسة.
- طلب إعادة الإرسال (العميل ↔ cTrader) - طلب لإعادة إرسال رسائل تطبيق معينة.
- الرفض (العميل ↔ cTrader) - فشل التحقق من صحة مستوى الجلسة.
- إعادة تعيين التسلسل (العميل ↔ cTrader) - في حالة وجود مشاكل في الاتصال، يتم استرداد الرسائل المفقودة أو يتم إعادة تعيين التسلسل لتجاهل الرسائل المفقودة.
رسائل التطبيق ¶
- طلب بيانات السوق (العميل → cTrader) - طلب عام لبيانات السوق.
- تحديث تدريجي لبيانات السوق (العميل ← cTrader) - ردود على رسالة طلب بيانات السوق.
- أمر جديد فردي (العميل → cTrader) - يستخدم لتقديم الأوامر إلكترونيًا إلى وسيط للتنفيذ.
- تقرير التنفيذ (العميل ← cTrader) - يستخدم لإرسال معلومات حالة الأمر إلى عميل FIX، مثل التأكيدات والتعبئة والتغييرات غير المطلوبة.
- رفض رسالة العمل (العميل ← cTrader) - يستخدم لرفض طلب عميل FIX لأسباب غير متعلقة بالجلسة.
هيكل رسالة FIX ¶
يشرح هذا القسم كيفية تكوين رسالة FIX API، ويصف تنسيق رسالة FIX ويساعد المستخدمين على فهم مفهوم زوج العلامة والقيمة.
يجب أن تحتوي كل رسالة على 3 أجزاء:
- الرأس - يسبق كل رسالة إدارية أو تطبيقية رأس قياسي. يحدد الرأس نوع الرسالة وإصدار FIX وطول الرسالة والوجهة ورقم التسلسل والأصل والوقت.
- الجسم - يتم تحديد المحتوى في جسم الرسالة بواسطة نوع الرسالة المحدد في الرأس.
- التذييل - تنتهي كل رسالة، إدارية أو تطبيقية، بتذييل قياسي. يستخدم التذييل لفصل الرسائل ويحتوي على التمثيل ذو الثلاثة أرقام لقيمة
CheckSum <10>.
تنسيق رسالة FIX ¶
رسالة FIX هي مجموعة من الحقول. كل حقل هو زوج من العلامة والقيمة بتنسيق {tag}={value}. على سبيل المثال، 54=2، مما يعني أن نوع الأمر هو بيع.
العلامة ¶
- تستخدم FIX علامات محددة مسبقًا.
- تمثل كل علامة حقلًا محددًا.
- يتم تعيين رقم محدد مسبقًا لكل علامة.
- توفر مواصفات cTrader FIX قائمة بالحقول وأرقام العلامات المقابلة.
القيمة ¶
- تمثل القيم قيمة العلامة المخصصة لها.
- يمكن أن تكون القيم فقط من أحد أنواع البيانات التالية: عدد صحيح، نقطة عائمة، حرف، وقت، تاريخ، بيانات أو سلسلة.
تبدأ جميع الرسائل داخل cTrader FIX API بـ 8=FIX.x.y، حيث x.y هو إصدار بروتوكول FIX. في نهاية كل رسالة يجب أن يكون هناك حقل 10=xyz، حيث xyz يمثل مجموع جميع القيم الثنائية في الرسالة المسماة المجموع الاختباري.
يساعد المجموع الاختباري في تحديد أي مشاكل في الإرسال، وخاصة فقدان الحزم من خلال السماح للمستلم بمعرفة ما إذا كان أي جزء من الرسالة مفقودًا.
إذا تم استخدام العلامة Symbol(55) في رسالة FIX إلى cTrader/cServer، يجب عليك تحديد معرف رمز FIX. يمكن أن تختلف تلك القيمة عبر الوسطاء. يمكنك العثور على حقل معرف رمز FIX من تطبيق cTrader الخاص بذلك الوسيط في نافذة معلومات الرمز.
مثال على الرسالة ¶
8=FIX.4.4|9=126|35=A|34=1|49=theBroker.12345|57=TRADE|50=any_string|52=20170117-08:03:04|56=CSERVER|98=0|108=30|553=12345|554=passw0rd!|10=131|
| رقم العلامة | اسم العلامة | القيمة | الوصف |
|---|---|---|---|
| 8 | BeginString | 4.4 | إصدار FIX |
| 9 | BodyLength | 102 | طول نص الرسالة هو 102 حرف |
| 35 | MsgType | A | نوع الرسالة هو تسجيل الدخول |
| 34 | MsgSeqNum | 1 | رقم تسلسل الرسالة هو 1 |
| 49 | SenderCompI | D | broker.1047 معرف طرف التداول، حيث "broker" هو معرف الوسيط الفريد المقدم من cTrader و "1047" هو المعرف الرقمي لحساب التداول. |
| 57 | TargetSubID | TRADE | مؤهل جلسة إضافي. القيم الممكنة هي: "QUOTE"،"TRADE". |
| 50 | SenderSubID | QUOTE | قيمة معينة تستخدم لتحديد منشئ رسالة معين |
| 52 | SendingTime | 20131129- 15:40:10.276 | وقت إرسال الرسالة هو 29 نوفمبر 2013 (YYYYMMDD) في الساعة 15:40:10 و 276 مللي ثانية |
| 56 | TargetCompID | CSERVER | هدف الرسالة هو CSERVER. إنها القيمة الصالحة الوحيدة ضمن واجهة برمجة تطبيقات FIX الخاصة بـ cTrader. |
| 98 | EncryptMethod | 0 | حاليًا، القيمة الصالحة الوحيدة هي "0" (صفر)= NONE_OTHER (التشفير غير مستخدم) |
| 108 | HeartBtInt | 30 | الفاصل الزمني لنبضات القلب بالثواني. يتم تعيين القيمة في ملف "config.properties" (من جانب العميل) كـ 'SERVER.POLLING.INTERVAL'. 30 ثانية هي قيمة الفاصل الزمني الافتراضية. إذا تم تعيين HeartBtInt إلى 0، فلا تكون هناك حاجة لرسالة نبضات القلب. |
| 553 | Username | 1047 | معرف المستخدم الرقمي |
| 554 | Password | MyPassword1 | كلمة مرور المستخدم |
| 10 | CheckSum | 000 | طريقة حساب المجموع الاختباري هي كما يلي: جمع كل بايت من الرسالة حتى ولكن لا يشمل حقل المجموع الاختباري نفسه، ثم تحويله إلى رقم بصيغة modulo 256 مسبوق بـ "0" للحصول على رقم من ثلاثة أرقام. |