انتقل إلى المحتوى

دورة حياة المؤشر المخصص

هيكل الكود النموذجي

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

Image title

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

Image title

لإعادة التعيين إلى النسخة الأساسية، انسخ الكود أدناه.

 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
{
    [Indicator(AccessRights = AccessRights.None)]
    public class LifeCycleTest : Indicator
    {
        [Parameter(DefaultValue = "Hello world!")]
        public string Message { get; set; }

        [Output("Main")]
        public IndicatorDataSeries Result { get; set; }

        protected override void Initialize()
        {
            // To learn more about cTrader Algo visit our Help Center:
            // https://help.ctrader.com/ctrader-algo/


            Print(Message);
        }

        public override void Calculate(int index)
        {
            // Calculate value at specified index
            // Result[index] = 
        }
    }
}

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

حدث التهيئة

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

بشكل افتراضي، يتضمن قالب الكود الجديد إعداد معلمة يسمى Message بقيمة "Hello world!".

1
2
[Parameter(DefaultValue = "Hello world!")]
public string Message { get; set; }

في طريقة Initialize()، هناك سطر من الكود لطباعة هذه الرسالة في السجل.

1
Print(Message);

لتوضيح طريقة Initialize()، أضف نسخة مؤشر بالنقر فوق أيقونة Plus بجوار أيقونة Build واختيار رمز. إذا نقرت على More في صف المؤشر واخترت Add an instance، سيتم إضافة رمز EURUSD مع الإطار الزمني h1 تلقائيًا.

Image title

ملاحظة

إضافة نسخة في cTrader Algo هي نفس إرفاق مؤشر بالرسم البياني في تطبيق Trade.

الآن، افتح علامة التبويب Log في لوحة Trade Watch أسفل الرسم البياني. كما ترى، تمت طباعة الرسالة "Hello world".

Image title

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

Image title

حساب مخرجات المؤشر

يتم استدعاء طريقة Calculate() لكل فهرس من البيانات التاريخية وعند كل نقرة واردة. على سبيل المثال، إذا كان الرسم البياني الحالي يحتوي على 1000 شمعة، سيتم استدعاء طريقة Calculate() للفهرس 0، 1، 2، وهكذا، حتى حد أقصى 999.

1
public override void Calculate(int index)

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

1
Print("Index: " + index);

للتبديل من نافذة محرر الكود إلى الرسم البياني، انقر فوق نسخة المؤشر المضافة. إذا فتحت علامة التبويب Log في لوحة Trade Watch، سترى القيم المطبوعة لكل فهرس تم تمريره إلى الطريقة.

Image title

طريقة OnDestroy()

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

1
2
3
4
protected override void OnDestroy()
        {
            base.OnDestroy();            
        }

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

الملخص

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

Image title