حدود المراكز والهامش وحدود fat-finger والـ kill switch عليها أن تجيب على كل أمر قبل مغادرته البوابة. وهكذا تسكن هذه الفحوص داخل مسار الأوامر بدل أن تكون بجانبه: أي حالة تجلس في الذاكرة، وما الذي يُعاد حسابه تزايديًا، وماذا يحدث بعد إعادة التشغيل. تأتي القيود أولًا.
يصل أمر إلى البوابة. وقبل خروجه إلى المنصة، لا بد لشيء ما أن يقرر هل يُسمح للحساب بإرساله. وهذا القرار يجري على كل أمر، بما في ذلك الغالبية العظمى السليمة تمامًا، فتدفع كلفتَه كل حركة المرور العادية لا الرفوض وحدها.
هذا هو القيد الذي يُسمّى أولًا. ففحص المخاطر الموضوع في مسار الأوامر ضريبة على إدخال الأوامر. والسؤال الهندسي ليس كيف نجعل الفحص ذكيًا، بل كيف نجعله صغيرًا بما يكفي ألا يشعر به المتداولون، وأمينًا بما يكفي ليظل يرفض الأوامر التي يجب رفضها.
المسار الساخن يجيب على سؤال واحد بالضبط: هل يجوز إرسال هذا الأمر الآن، بحسب ما نعرفه حاليًا عن هذا الحساب. والفحوص التي تجيب على هذا السؤال تبقى داخله. والفحوص التي تجيب على سؤال آخر تخرج منه.
كل ما عدا ذلك يعمل بجانب المسار، على الحالة نفسها، دون احتجاز الأمر. فهو يغذي الحدود التي يفرضها المسار الساخن، لكنه لا يقف بين المتداول والمنصة.
الخط الفاصل سؤال لا فئة. داخل المسار: هل يجوز خروج هذا الأمر. بجانب المسار: ماذا ينبغي أن تكون الحدود. وأي شيء يجيب على السؤال الثاني ومع ذلك يحجز الأمر هو خطأ تصميمي، مهما بلغت أهمية الفحص.
الحالة التي يحتاجها فحص ما قبل التداول - المراكز الحالية، والأوامر العاملة، والهامش المستخدم والمتاح، وإعداد الحدود - تسكن في ذاكرة العملية التي تتخذ القرار. لا في ذاكرة مؤقتة أمام قاعدة بيانات، ولا خلف نداء شبكي. في العملية نفسها.
السبب ليس السرعة وحدها، وإن كان الاستعلام أغلى بمراتب من بحث في مصفوفة محلية. السبب هو الصحة. فقاعدة البيانات تحفظ المركز كما كُتب. وفحص المخاطر يحتاج المركز شاملًا أوامر أُرسلت قبل لحظة ولم تُنفَّذ ولم يُقَرّ بها ولم تُخزَّن بعد. وإن قرأت من التخزين، فأنت تفحص مقابل ماضٍ تجاوزه تدفقك أنت.
عمليًا، يشكّل ذلك العملية كما يُشكَّل أي مكوّن منخفض الـ latency:
قاعدة البيانات هي حيث يُسجَّل المركز. وليست حيث يُعرَف المركز.
إعادة الحساب الكاملة لانكشاف الحساب وهامشه تمرّ على كل مركز وكل أمر عامل. وتنمو هذه الكلفة مع حجم الدفتر، ما يعني أن فحص المخاطر يصبح أبطأ تحديدًا لدى العملاء الأكثر تداولًا. لذلك لا يعيد المسار الساخن الحساب، بل يطبّق فرقًا تزايديًا.
يحمل الحساب مجاميع جارية - الانكشاف الصافي والإجمالي لكل أداة ولكل مجموعة، والهامش المستخدم، والقيمة الاسمية في الطريق. والأمر الوارد ينتج تغيرًا صغيرًا في تلك المجاميع، فتُقارن القيم المتغيرة بالحدود، ويُقبل الأمر أو يُرفض. والعمل يتناسب مع الأمر، لا مع المحفظة.
إعادة الحساب الكاملة تظل تحدث - وفق جدول، وعند تغير معاملات الهامش، وكفحص ذاتي دوري مقابل النتيجة التزايدية. تعمل خارج المسار، على نسخة، ونتيجتها إما تُستبدل أو تُرفع كتباين. فالحالة التزايدية التي تنحرف بصمت عن الحالة الحقيقية أسوأ من غياب الفحص أصلًا، لذا فالمقارنة ليست اختيارية.
مقاسًا على مسار المخاطر الذي نبنيه، يكتمل فحص ما قبل التداول نفسه في <1 ms. ويغطي هذا الرقم القرار على الحالة في الذاكرة، لا رحلة الأمر الكاملة من العميل إلى المنصة وعودة.
يُستخدم الـ kill switch تحديدًا حين يكون شيء ما معطلًا بالفعل. وهذا يمنع بناءه فوق الآلية التي قد تكون هي نفسها المعطلة. إنه مسار منفصل بقواعده الخاصة.
إيقاف الأوامر الجديدة هو النصف السهل. أما النصف الأصعب فما يفعله المفتاح بالأوامر الراكدة أصلًا لدى المنصة: سحب التسعيرات وإلغاء الأوامر العاملة يجب أن يظل ممكنًا بينما مسار الإرسال معطّل. ويستحق مسار الإلغاء ذاك اختبارًا خاصًا به، لأنه يُستخدم في أسوأ يوم لا في يوم عادي.
الحالة في الذاكرة رؤية مشتقة من سجل دائم. وهذا ما يجعل إعادة التشغيل قابلة للنجاة. فكل حدث يغيّر حالة المخاطر - قبول أمر، أو تحرير حجز، أو تطبيق تنفيذ، أو تغيير حد، أو تفعيل المفتاح - يُلحَق بسجل على الجهاز المحلي قبل التصرف بناءً عليه في اتجاه المصب.
عندئذ يعتمد زمن الاسترداد على طول السجل وتوافر نسخة الـ drop copy، لا على حجم الدفتر، ونمط الفشل عند كل مجهول واحد: رفض التداول على الحساب.
الحدود الأمينة تستحق أن تُقال بصراحة، لأنها تقرر هل تناسب هذه البنية أصلًا:
تبني amBrain هذا النوع من مسارات المخاطر قبل التداول للوسطاء وشركات التداول الخاص، بمسارات ساخنة مكتوبة بلغة Rust. ويعمل الفريق على بنية التداول التحتية من يريفان، أرمينيا منذ 2019.
فريقنا الهندسي متخصص في حلول FinTech. لنناقش كيف يمكننا تنفيذ مشروعك.