كيفية التعامل مع أحداث الشموع
تعد أحداث الشموع ضرورية لدورة حياة أي cBot. التعامل الصحيح مع هذه الأحداث أمر بالغ الأهمية لإدارة كيفية استجابة cBots الخاصة بك لظروف السوق الجديدة. في هذه المقالة والفيديو المصاحب لها، سنوضح الأنواع الرئيسية لأحداث الشموع ونناقش المعالجات لهذه الأحداث التي تعرضها واجهة برمجة تطبيقات cTrader.
- الشمعة - تشير إلى أنواع مختلفة من الكائنات التي يتم رسمها بشكل متسلسل على الرسم البياني للتداول بواسطة cTrader. يمكن أن تكون الشموع اليابانية أو قوالب Renko أو شموع النطاق أو حتى شموع هيكين آشي.
التعامل مع حدث BarOpened
تحدث أحداث الشموع عندما تبدأ شمعة جديدة في الرسم على الرسم البياني للتداول المرتبط بـ cBot. يحدث حدث BarOpened للشمعة الجديدة التي بدأت للتو في الرسم على الرسم البياني.
يتم التعامل مع هذا الحدث عبر طريقة OnBar()، وهي طريقة موروثة من الفئة الأساسية Robot. سنقوم الآن بإنشاء cBot يتعامل مع حدث BarOpened كجزء من استراتيجيتنا لتحليل معنويات السوق. سنقوم بحذف طرق OnStart() وOnStop() من القالب واستبدال معالج OnTick() بمعالج OnBar().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
من المفترض أن يتم إطلاق cBot على الرسوم البيانية ذات الإطار الزمني D1 (يومي). في كل شمعة، يقارن فرق سعر الافتتاح مع سعر افتتاح الشمعة السابقة ويضع أمرًا جديدًا في الاتجاه المناسب. إذا كان فرق السعر غير مهم، يقوم الروبوت بدلاً من ذلك بإغلاق جميع المراكز المفتوحة حاليًا.
إذا قمنا بإجراء اختبار عكسي لهذا الروبوت البسيط، تبدو النتائج مشجعة.

التعامل مع حدث BarClosed
عندما تفتح شمعة جديدة، فإنها تفتقر فعليًا إلى أي بيانات سعرية باستثناء سعر الافتتاح الخاص بها. في كثير من الحالات، قد ترغب في أن يصل cBot الخاص بك إلى بيانات من الشمعة السابقة لضمان تنفيذ سلس للاستراتيجية. هذا هو السبب في أن حدث BarClosed يحدث للشمعة التي أغلقت للتو (الشمعة التي تسبق مباشرة الشمعة الجديدة) ويتيح لك استخدام بيانات السعر والحجم الخاصة بها بسهولة. عند تشغيل حدث BarClosed، يتم حذف الشمعة المفتوحة حديثًا تمامًا من مجموعة Bars
للتعامل مع حدث BarClosed، تعرض واجهة برمجة التطبيقات طريقة OnBarClosed.
ملاحظة
في المثال السابق، استخدمنا خاصية Bars.LastBar.Open للحصول على سعر الافتتاح للشمعة المفتوحة حديثًا. إذا استخدمنا نفس الخاصية في طريقة OnBarClosed()، فسنحصل على سعر الافتتاح للشمعة التي أغلقت للتو.
سننشئ cBot بسيطًا يستخدم معالج OnBarClosed() على النحو التالي.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
يكتشف cBot نمط صعودي (hammer) من خلال تقييم طول الفتيل السفلي للشمعة. إذا تم اكتشاف نمط hammer، يتم إغلاق جميع المراكز المفتوحة سابقًا ووضع أمر شراء جديد مع وقف خسارة 50 نقطة.
إذا قمنا باختبار الروبوت، سنحصل على نتائج جيدة.

إضافة معالجات أحداث مخصصة
عند التعامل مع أحداث BarOpened وBarClosed، يمكنك أيضًا استخدام بناء جملة مختلف قليلاً عن طريق تعيين هذه الأحداث بمعالجات مخصصة. في حين يتم تشغيل OnBar() وOnBarClosed() مرة واحدة فقط، يمكنك تعيين العديد من المعالجات المخصصة كما تريد، مما يسمح بإضافة منطق معقد.
ملاحظة
يجب إضافة معالجات الأحداث المخصصة في طريقة OnStart(). يجب أيضًا أن تقبل المعالجات المخصصة وسيطة من نوع BarOpenedEventArgs (لحدث BarOpened) أو BarClosedEventArgs (لحدث BarClosed).
1 2 3 4 5 6 7 8 9 10 | |
سننشئ cBot آخر يستخدم معالجين مخصصين لحدث BarOpened للاستجابة للانعكاسات الصعودية والهبوطية المحتملة.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
تتحقق خوارزمية cBot مما إذا كان سعر الافتتاح للشمعة المفتوحة حديثًا أعلى من أسعار الإغلاق للشمعتين السابقتين. إذا كان الأمر كذلك، يتم إدراج أمر شراء. إذا كان سعر الافتتاح أقل من أسعار الإغلاق للشمعتين السابقتين، يتم إدراج أمر بيع. يسمح لنا استخدام معالجين منفصلين للأحداث بتقسيم منطق التداول لدينا إلى مكونات أصغر يمكننا تعديلها بسهولة لاحقًا إذا لزم الأمر.
نتائج الاختبار العكسي على الإطار الزمني D1 إيجابية أيضًا.

الملخص
من خلال تعلم كيفية التعامل بشكل صحيح مع أحداث الشموع، يمكنك جعل خوارزميات cBot تفعل بالضبط ما تريدها أن تفعله وتريدها أن تفعله.