التنفيذ المتوازي للأوامر في cTrader
إحدى الميزات التي تميز cTrader هي القدرة على استخدام البرمجة المتزامنة وغير المتزامنة لتنفيذ أوامرك. يمكنك استخدام البرمجة المتزامنة لتنفيذ الاستراتيجيات التي تحتاج إلى انتظار نتائج تنفيذ الأمر قبل المتابعة؛ بدلاً من ذلك، تُستخدم البرمجة غير المتزامنة بشكل أفضل عند إنشاء استراتيجية عالية السرعة يمكنها إرسال أوامر متعددة في وقت واحد.
في هذا الفيديو والمقال المقابل له، سنشرح الفرق بين التنفيذ المتزامن وغير المتزامن وسنوضح لك كيفية استخدام كلا النهجين لوضع أوامر جديدة.
التنفيذ المتزامن مقابل غير المتزامن للأوامر
التدفقات الأساسية
يمكن شرح تنفيذ الأوامر المتزامن باستخدام مخطط بسيط. عند وضع أوامر جديدة بشكل متزامن، يجب على cBot الانتظار حتى يتم تنفيذ أمر واحد قبل اتباع أي تعليمات أخرى. بعبارة أخرى، ترسل cTrader أمرًا إلى الخادم، وتنتظر الاستجابة، ثم تبدأ فقط في تنفيذ السطر التالي من التعليمات البرمجية.
flowchart LR
A([الأمر 1، 100 مللي ثانية]) --> B([الأمر 2، 70 مللي ثانية]) --> C([الأمر 3، 80 مللي ثانية]) --> D([التعليمات اللاحقة]) عند وضع الأوامر المذكورة أعلاه بشكل متزامن، سيتعين على cBot الخاص بك قضاء ما مجموعه 250 مللي ثانية قبل المتابعة إلى أي تعليمات محددة بعد الأمر 3.
من ناحية أخرى، يسمح التنفيذ غير المتزامن لـ cTrader بإرسال أوامر متعددة بالتوازي دون توقع استجابة من الخادم. باستخدام البرمجة غير المتزامنة، يمكن للاستراتيجية تقليل الوقت الإجمالي المطلوب لتنفيذ أوامر متعددة.
flowchart LR
subgraph Orders
direction TB
A([الأمر 1، 100 مللي ثانية]) --- B([الأمر 2، 70 مللي ثانية]) --- C([الأمر 3، 80 مللي ثانية])
end
D([التعليمات اللاحقة])
Orders --> D في المخطط أعلاه، يتم إرسال جميع الأوامر الثلاثة في نفس الوقت تمامًا ولا ينتظر cBot نتائج تنفيذها قبل المتابعة إلى التعليمات اللاحقة.
أمثلة على التعليمات البرمجية
يمكننا أيضًا استخدام التعليمات البرمجية لتوضيح كيفية عمل التنفيذ المتزامن.
1 2 3 4 5 6 7 8 9 | |
إذا قمنا بتشغيل cBot بهذه التعليمات البرمجية، فسيظهر السجل أن عدد المراكز يزداد فقط بعد تنفيذ كل مركز. تنتظر التعليمات البرمجية تنفيذ كل أمر قبل إرسال طلب لتنفيذ الأمر التالي.
للتغيير إلى التنفيذ غير المتزامن للأوامر، يمكننا استخدام طريقة ExecuteMarketOrderAsync.
1 2 3 4 5 6 7 8 9 | |
سنقوم أيضًا بإضافة معالج حدث للاستماع إلى حدث Positions.Opened.
1 2 3 4 5 6 7 8 9 10 | |
في معالج الحدث الخاص بنا، سنقوم بطباعة رسالة في السجل بمجرد فتح مركز بالإضافة إلى عدد المراكز المفتوحة في تلك اللحظة.
إذا قمنا بتشغيل cBot بهذه التعليمات البرمجية وألقينا نظرة على السجل، فسنرى أنه تم إرسال جميع الأوامر دون تلقي تأكيد بشأن نتائج التعليمات السابقة. ظل عداد المراكز عند 0 طوال الوقت. وصلت التأكيدات وتمت طباعتها في السجل بعد بضع مللي ثانية من إرسال جميع الأوامر إلى الخادم.
استخدام أوامر رد الاتصال
الآن يمكننا العودة إلى التعليمات البرمجية المصدرية الخاصة بنا وتوضيح ميزة قيمة أخرى للتنفيذ غير المتزامن، وهي خيار استخدام طرق رد الاتصال التي يتم استدعاؤها بمجرد الانتهاء من تنفيذ الأمر. سنقوم بإزالة معالج حدث Positions.Opened الخاص بنا وتنفيذ طريقة رد اتصال تطبع تأكيدًا بمجرد تنفيذ الأمر.
1 2 3 4 5 6 7 8 9 10 11 | |
ثم سنقوم بتمرير هذه الطريقة كوسيطة إلى طريقة ExecuteMarketOrderAsync.
1 | |
على عكس نهجنا السابق، سيتم استدعاء طريقة رد الاتصال بغض النظر عما إذا كانت الصفقة قد نجحت أم لا، مما يعني أيضًا أنه يتم إبلاغك بالصفقات غير الناجحة ويمكنك التصرف وفقًا لذلك.
مراقبة حالة التنفيذ غير المتزامن
توفر cTrader أيضًا أداة سهلة الاستخدام لتتبع حالة الصفقات غير المتزامنة. تُرجع طريقة ExecuteMarketOrderAsync كائن TradeOperation يحتوي على معلومات حول ما إذا كان الأمر لا يزال قيد التنفيذ.
يمكننا البدء بإعلان حقل جديد.
1 | |
سنقوم بعد ذلك بإزالة حلقة for الخاصة بنا، وتعيين نتيجة تنفيذ الأمر إلى الحقل الجديد.
1 | |
سنقوم أيضًا بإضافة مؤقت إلى cBot الخاص بنا. سيقوم المؤقت بالتحقق من حالة العملية كل 100 مللي ثانية.
1 2 | |
إذا كانت العملية لا تزال قيد التنفيذ، فسيقوم المؤقت بطباعة ذلك في السجل.
1 2 3 4 5 6 7 8 | |
بعد بناء cBot، يمكننا اختبار كيفية عمله على حساب تجريبي. في السجل، يجب أن يطبع المؤقت تحديثات منتظمة عن حالة التنفيذ غير المتزامن.
الملخص
التنفيذ غير المتزامن هو أداة قوية يمكن أن تجعل وضع الأوامر التلقائي أسرع بكثير مقارنة بالبرمجة المتزامنة. ومع ذلك، لا يزال من الممكن استخدام التنفيذ المتزامن في حالة الحاجة إلى معرفة نتيجة الصفقة قبل المتابعة إلى الخطوة التالية. من ناحية أخرى، يُفضل استخدام التنفيذ غير المتزامن عندما تحتاج إلى إرسال أوامر متعددة بالتوازي دون أي تأخير.