دورة حياة المؤشر المخصص
هيكل الكود النموذجي
سيرشدك هذا المقال خلال هيكل الكود ويشرح المنطق وراء الأحداث ودورة الحياة لمؤشر cTrader. للوصول إلى المؤشرات المخصصة، افتح علامة التبويب Local في تطبيق Algo.

كمثال، يمكنك إنشاء مؤشر جديد باسم "LifeCycle Test" باستخدام الكود النموذجي التالي المتاح في نافذة محرر الكود.

لإعادة التعيين إلى النسخة الأساسية، انسخ الكود أدناه.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
من النظرة الأولى، يتضمن هيكل الكود طريقتين فقط، طريقة Initialize() وطريقة Calculate(). انقر فوق Build للمتابعة مع اختبار هذا المؤشر. سنضيف طريقة إضافية تسمى OnDestroy() ونشرح الغرض منها لاحقًا.
حدث التهيئة
عندما يتم إرفاق مؤشر cTrader لأول مرة بالرسم البياني أو عندما يقوم المستخدم بتغيير أي من إعدادات المعلمات، يتم إعادة إنشاء نسخة المؤشر واستدعاء طريقة Initialize(). يتم استخدامها لتهيئة أي متغيرات تخطط لاستخدامها في مؤشرك. يمكنك أيضًا تحديد مؤشرات إضافية والإشارة إليها لإنشاء مؤشر واحد باستخدام صيغ من مؤشرات أخرى.
بشكل افتراضي، يتضمن قالب الكود الجديد إعداد معلمة يسمى Message بقيمة "Hello world!".
1 2 | |
في طريقة Initialize()، هناك سطر من الكود لطباعة هذه الرسالة في السجل.
1 | |
لتوضيح طريقة Initialize()، أضف نسخة مؤشر بالنقر فوق أيقونة Plus بجوار أيقونة Build واختيار رمز. إذا نقرت على More في صف المؤشر واخترت Add an instance، سيتم إضافة رمز EURUSD مع الإطار الزمني h1 تلقائيًا.

ملاحظة
إضافة نسخة في cTrader Algo هي نفس إرفاق مؤشر بالرسم البياني في تطبيق Trade.
الآن، افتح علامة التبويب Log في لوحة Trade Watch أسفل الرسم البياني. كما ترى، تمت طباعة الرسالة "Hello world".

في كل مرة يتم فيها إضافة المؤشر لأول مرة إلى الرسم البياني أو عند تغيير معلمة، يتم تحديث الرسم البياني واستدعاء طريقة Initialize() مرة أخرى. اكتب رسالة مختلفة في قسم Parameters لرؤية تحديث إدخال السجل وفقًا لذلك.

حساب مخرجات المؤشر
يتم استدعاء طريقة Calculate() لكل فهرس من البيانات التاريخية وعند كل نقرة واردة. على سبيل المثال، إذا كان الرسم البياني الحالي يحتوي على 1000 شمعة، سيتم استدعاء طريقة Calculate() للفهرس 0، 1، 2، وهكذا، حتى حد أقصى 999.
1 | |
يمكن استدعاء طريقة Calculate() عدة مرات في الثانية خلال فترات التقلب العالي أو مرات أقل عندما يكون السوق مستقرًا. لاختبار كيفية عملها، يمكنك إضافة سطر من الكود إلى جسم طريقة Calculate() لطباعة قيمة الفهرس التي يتم تمريرها إلى الطريقة لكل نقرة بيانات جديدة. لا تنس النقر فوق Build في كل مرة بعد إضافة التغييرات في نافذة محرر الكود.
1 | |
للتبديل من نافذة محرر الكود إلى الرسم البياني، انقر فوق نسخة المؤشر المضافة. إذا فتحت علامة التبويب Log في لوحة Trade Watch، سترى القيم المطبوعة لكل فهرس تم تمريره إلى الطريقة.

طريقة OnDestroy()
يتم استدعاء طريقة OnDestroy() عند إزالة المؤشر من الرسم البياني ولم يعد هناك حاجة إليه. ستحتاج إلى تنفيذ هذه الطريقة، حيث لا تتم إضافتها بشكل افتراضي عند إنشاء مؤشر جديد.
1 2 3 4 | |
هذه الطريقة مفيدة للمبرمجين، حيث تسمح لهم بتحرير الموارد غير المدارة وتنفيذ مهام الإنهاء. تساعد في منع تسرب الذاكرة وتضمن عدم احتفاظ المؤشر بالموارد بعد الإزالة. تتضمن الأمثلة إغلاق الاتصالات بمصادر البيانات الخارجية، وتحرير كائنات البيانات الكبيرة، وعمليات أخرى تحرر الذاكرة.
الملخص
باختصار، توضح طريقة Initialize() وCalculate() وOnDestroy() مراحل مختلفة من دورة حياة المؤشر المخصص. من خلال تعديل الكود النموذجي في تطبيق Algo، أنت حر في تحديد كيفية تهيئة متغيرات المؤشر، وحساب مخرجات المؤشر، وتشغيل مهام الإنهاء.
