تخطَّ إلى المحتوى

عُقد دورة الحياة ونطاق الأصول

توفّر عُقد دورة الحياة ونطاق الأصول في AQS طريقة مرئية لاستخدام نموذج مكونات AQE في الرسم البياني للاستراتيجية. وتمكّنك من تقسيم سلوك الاستراتيجية إلى وحدات دون تحرير src/main.rs المُولَّد يدويًا في مشاريع .aqmeta.

لا يزال بإمكانك كتابة هذا المنطق مباشرةً في Rust. والغرض من العُقد هو فصل المسؤوليات، وتوضيح بنية الرسم البياني، وإعادة استخدام الملفات، وتسهيل الإعداد في المحرر.

يوفّر AQS أربعة أنواع من العقد المستقلة لهذا المسار:

  • تنشئ On Start Logic مكوّن OnStartLogic.
  • تنشئ On Init Logic مكوّن OnInitLogic.
  • تنشئ On Teardown Logic مكوّن OnTeardownLogic.
  • تنشئ Universe Model مكوّن UniverseModel.

تستخدم ملفات منطق دورة الحياة اللاحقة .logic.rs. وتستخدم ملفات نموذج نطاق الأصول اللاحقة .universe.rs.

كيفية استخدامها في المشاريع المُولَّدة

Section titled “كيفية استخدامها في المشاريع المُولَّدة”

عندما يتضمن المشروع ملف .aqmeta، يمتلك AQS الرسم البياني ويعيد توليد src/main.rs. لا تحرر src/main.rs المُولَّد يدويًا لهذه المكونات. أضف ملف المكوّن المخصص أو حرره وحدّث إعداد العقدة بدلًا من ذلك.

يتولى توليد الشيفرة التسجيل:

  • تتحول عقد منطق دورة الحياة إلى أغلفة دورة حياة AQE؛
  • تتحول عقد نموذج نطاق الأصول إلى أغلفة نماذج نطاق الأصول في AQE؛
  • تُعرَض مُعامِلات المُنشئ كخصائص عامة للعُقد؛
  • قد تظهر حقول البنية الخاصة كخصائص للقراءة فقط أو خاصة في اللوحة؛
  • يتبع ترتيب التنفيذ ترتيب الروابط في الرسم البياني عندما تُربط العُقد تسلسليًا.

تتضمن عقد دورة الحياة إعداد توقيت:

  • تشغّل Before generated المكوّن قبل الجسم المُولَّد لدالة دورة الحياة تلك.
  • تشغّل After generated المكوّن بعد الجسم المُولَّد لدالة دورة الحياة تلك.

استخدم Before generated للمتطلبات السابقة والتحقق. واستخدم After generated عندما يعتمد المنطق على اكتمال التسجيل أو الإعداد المُولَّد بالفعل.

أمثلة:

  • تهيئة ctx.variables() قبل أن تقرأها نماذج ألفا؛
  • التحقق من متغيرات البيئة المطلوبة قبل بدء الاستراتيجية؛
  • تهيئة البيانات الوصفية الخاصة بالرمز بعد معرفة الأصل؛
  • حفظ بيانات تشخيص التشغيل المتبقية بعد الإنهاء.

لكل عقدة إعداد can_fail.

  • يعني can_fail = false أن النتيجة غير الناجحة ينبغي أن توقف التشغيل.
  • يعني can_fail = true أن AQE يسجّل الفشل ويواصل التشغيل.

ينبغي عادةً أن يكون منطق بدء التشغيل والتهيئة صارمًا. ويمكن عادةً السماح بفشل الإنهاء دون إيقاف بقية أعمال التنظيف.

نماذج نطاق الأصول في الرسم البياني

Section titled “نماذج نطاق الأصول في الرسم البياني”

تعيد عقد Universe Model الرموز برمجيًا. وهي مفيدة عندما تكون قائمة الأصول الثابتة محدودة أكثر من اللازم.

استخدم عقدة Universe Model من أجل:

  • تحميل قائمة مراقبة؛
  • تصفية الرموز بحسب البيانات الوصفية؛
  • اختيار الرموز بحسب التاريخ أو حالة السوق؛
  • اختيار الرموز بحسب قيود الحساب أو الوسيط أو المخاطر؛
  • مشاركة منطق اختيار نطاق الأصول نفسه بين الاستراتيجيات.

يتكوّن نطاق الأصول النهائي في AQE من اتحاد النطاق الثابت الذي تعيده الاستراتيجية المُولَّدة وجميع نماذج نطاق الأصول المتصلة، مع إزالة الرموز المكررة.

يعني ذلك أنه يمكنك الإبقاء على عقدة بسيطة لنطاق أصول ثابت وإضافة عقدة Universe Model للإضافات الديناميكية.

تظل الشيفرة المضمنة صالحة

Section titled “تظل الشيفرة المضمنة صالحة”

استخدام العُقد ليس إلزاميًا. ففي الاستراتيجيات الصغيرة، غالبًا ما تكفي كتابة منطق Rust مباشرةً:

  • أضف شيفرة بدء التشغيل مباشرةً في on_start؛
  • أضف الإعداد الخاص بكل أصل مباشرةً في init؛
  • أعِد الرموز مباشرةً من universe؛
  • أضف التنظيف مباشرةً في on_teardown.

استخدم العقد عندما تستحق الشيفرة ملفًا خاصًا، أو ينبغي أن تظهر في رسم AQS البياني، أو تحتاج إلى إعداد في لوحة الخصائص، أو سيُعاد استخدامها.

  • خصّص مُعامِلات المُنشئ للإعدادات التي يضبطها المستخدم فقط.
  • ضع الحالة الخاصة بالتشغيل فقط في ctx.variables() بدلًا من حقول البنية.
  • استخدم عقد دورة الحياة للإعداد والتنظيف، لا لتوليد الإشارات التداولية.
  • أبقِ توليد الإشارات التداولية في نماذج ألفا.
  • أبقِ منطق تحديد الحجم والإرسال والإلغاء والإغلاق والإدارة في مراحل معالجة الإشارات التداولية.
  • اربط عقد دورة الحياة تسلسليًا عندما يكون الترتيب الدقيق مهمًا.
  • أعِد رسائل واضحة في LifecycleResult وUniverseResult حتى تكون السجلات وواجهات AQS مفيدة.

أنماط الرسم البياني المعتادة

Section titled “أنماط الرسم البياني المعتادة”

لبدء التشغيل:

  1. صِل On Start Logic بمنفذ دورة حياة الاستراتيجية؛
  2. اضبط التوقيت على Before generated إذا كان تسجيل نماذج ألفا أو مراحل المعالجة المُولَّد يعتمد عليه؛
  3. هيّئ الحالة المشتركة في ctx.variables()؛
  4. أعِد LifecycleResult ناجحة.

للتهيئة الخاصة بكل أصل:

  1. صِل On Init Logic بمنفذ دورة حياة التهيئة؛
  2. استخدم المُعامِل asset لتهيئة الحالة الخاصة بالرمز؛
  3. خزّن تلك الحالة تحت اسم المكوّن ورمز الأصل.

للإنهاء:

  1. صِل On Teardown Logic بمنفذ دورة حياة الإنهاء؛
  2. اضبط can_fail = true إلا إذا كان الفشل يجب أن يبطل التشغيل؛
  3. احفظ بيانات تشخيص التشغيل أو لخّصها.

لاختيار نطاق الأصول:

  1. أنشئ عقدة Universe Model؛
  2. نفّذ UniverseModel::run(ctx) -> UniverseResult؛
  3. أعِد فقط الرموز التي يكون النموذج مسؤولًا عنها؛
  4. دع AQE يدمج تلك الرموز مع النطاق الثابت ونماذج نطاق الأصول الأخرى.