إنشاء مؤشر فني في cTrader
يوضح هذا المقال خطوات إنشاء مؤشرات فنية مخصصة، بما في ذلك أدوات للتداول الخوارزمي أو الإجراءات اليدوية في cTrader.
في علامة التبويب المؤشرات في تطبيق الخوارزميات، انقر على زر جديد لفتح معالج إنشاء الخوارزمية.
أدخل اسمًا لمؤشرك، ثم حدد لغة برمجة بين C# وPython.
اختر طريقة إنشاء من:
-
من الصفر - سيحتوي المؤشر الجديد على قالب أساسي فقط.
-
باستخدام قالب - ستتمكن من اختيار خوارزمية جاهزة من قائمة قوالب Python# أو C#، والتي تغطي مجموعة واسعة من أنواع المؤشرات وأدوات التحليل الفني والمزيد.
ملاحظة
تحتوي الخوارزميات الجاهزة بالفعل على منطق للحسابات ومعلمات قابلة للتخصيص. هذه المؤشرات جاهزة للعرض على الرسوم البيانية بمجرد حفظها وبنائها.
بعد النقر على إنشاء، يفتح محرر الكود ويمكنك البدء في تحرير كود المؤشر.
تحرير الكود
اعتمادًا على طريقة الإنشاء الخاصة بك، يجب أن يحتوي نموذج كود المؤشر على واحد أو أكثر من العناصر التالية:
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 27 28 | |
تسبق سمة Indicator، مع خصائصها الاختيارية مثل TimeZone وAccessRights، إعلان فئة المؤشر (SimpleIndicator).
يتم تضمين هذه الطرق في كل مؤشر بشكل افتراضي:
- يتم استدعاء طريقة
Initialize()مرة واحدة عند بدء تشغيل المؤشر الخاص بك. يتم استخدامها عادةً لإعداد المتغيرات والمؤشرات المتداخلة والسلاسل التي تحتاج إلى أن تكون جاهزة منذ البداية. - يتم استدعاء طريقة
Calculate()تلقائيًا على كل شمعة تاريخية وفي الوقت الفعلي على كل نقرة جديدة. هنا تقوم بتنفيذ صيغة المؤشر وتحديد كيفية حساب النتائج وعرضها.
تحدد سمة [Output()] القيم التي ينتجها المؤشر الخاص بك وكيف تظهر على الرسم البياني. يمكنك تخصيص اسم وأسلوب كل مخرج، على سبيل المثال عن طريق تعيين لون الخط الخاص به.
تشكل طرق Initialize() وCalculate() أساس كل مؤشر مخصص ويجب عدم حذفها أبدًا. يمكنك إضافة طرق خاصة بك لتوسيع الوظائف، تمامًا كما تفعل عند برمجة cBot. لمعرفة المزيد عن الخوارزميات، ابدأ بدليل أساسيات C# واستكشف أمثلة كود المؤشر.
ملاحظة
يتضمن المراجع جميع الفئات والأحداث والطرق والمتغيرات وما إلى ذلك لبناء الخوارزميات في cTrader، بينما تتوفر أمثلة الخوارزميات الكاملة والقوالب في مستودع GitHub."
طبق معرفتك الجديدة لتحرير كود المؤشر وتكييفه وفقًا لاحتياجاتك.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
تحدد فئة SimpleIndicator مؤشرًا مخصصًا في Python.
يتم تضمين هذه الطرق في كل مؤشر بشكل افتراضي:
- يتم استدعاء طريقة
initialize(self)مرة واحدة عند بدء تشغيل المؤشر الخاص بك. يتم استخدامها عادةً لتهيئة المتغيرات والمؤشرات المتداخلة والسلاسل التي تحتاج إلى أن تكون جاهزة منذ البداية. - يتم استدعاء طريقة
calculate(self, index)تلقائيًا على كل شمعة تاريخية وفي الوقت الفعلي على كل نقرة جديدة. هنا تقوم بتنفيذ صيغة المؤشر وتحديد كيفية حساب النتائج وعرضها.
تشكل طرق initialize(self) وcalculate(self, index) أساس كل مؤشر مخصص ويجب عدم حذفها أبدًا. يمكنك أيضًا إضافة طرق مساعدة خاصة بك داخل الفئة لتوسيع الوظائف، تمامًا كما تفعل عند برمجة cBot. لمعرفة المزيد عن الخوارزميات، ابدأ بـ أساسيات Python واستكشف أمثلة كود المؤشر.
طبق معرفتك الجديدة لتحرير كود المؤشر وتكييفه وفقًا لاحتياجاتك.
حفظ وبناء
احفظ الكود الخاص بك بالنقر على زر حفظ في أعلى محرر الكود أو استخدم اختصار Ctrl+S.
قبل أن تتمكن من استخدام المؤشر الخاص بك، تحتاج إلى التحقق من صحة الكود عن طريق بناء مشروع المؤشر. انقر على زر بناء في أعلى محرر الكود أو اضغط على Ctrl+B.
احفظ الكود الخاص بك بالنقر على أيقونة حفظ في أعلى محرر الكود أو استخدم اختصار Cmd+S.
قبل أن تتمكن من استخدام المؤشر الخاص بك، تحتاج إلى التحقق من صحة الكود عن طريق بناء مشروع المؤشر. انقر على أيقونة بناء في أعلى محرر الكود أو اضغط على Cmd+B.
عندما ينجح البناء، سترى رسالة تأكيد في نتيجة البناء. إذا فشل البناء، يظهر ملخص لجميع الأخطاء التي تمت مواجهتها بدلاً من ذلك.
إذا كانت هناك تغييرات في الكود منذ آخر عملية بناء، تظهر علامة نجمة بجوار أيقونة بناء. في هذه الحالة، يجب عليك بناء المؤشر مرة أخرى قبل إضافة نسخة منه إلى أي رسم بياني.
لاستخدام المؤشر أو عرضه على رسم بياني، أضف نسخة منه، أو يمكنك الاستمرار في تعديل كود المؤشر كما هو موضح في الأقسام.
استخدام حساب NaN
تقوم المؤشرات بإجراء حسابات لإخراج رسومات محددة، ومن الضروري أن يتعامل الكود الخاص بك بشكل صحيح مع الحالات الهامشية والشروط الحدودية أثناء هذه الحسابات.
ضع في اعتبارك المقتطف التالي من مؤشر يُخرج مذبذب السعر المُزال الاتجاه:
1 2 3 4 5 6 7 8 9 10 11 | |
يحدد الكود أعلاه قواعد الحساب العامة ولكنه يغفل الشروط الحدودية. على سبيل المثال، إذا تم تعيين Periods إلى 10 و index يقع ضمن النطاق 0-9، فإن الحساب سيعيد NaN (ليس رقمًا). تحدث هذه المشكلة لأن المؤشر لا يمكنه حساب القيم لمخطط شريطي بفهرس سالب.
لمعالجة المشكلة، يمكنك إضافة شرط كما هو موضح أدناه:
1 2 3 4 5 6 7 | |
يجب أن يتحقق الكود الخاص بالمتوسط المتحرك البسيط نفسه أيضًا من أن index >= Periods. إذا كنت تستخدم مؤشرًا متداخلاً، مثل نوع آخر من المتوسط المتحرك، فسيختلف الشرط لمراعاة الحسابات الإضافية.
على الرغم من أنه يمكنك تحديد شروط حدودية صريحة، إلا أن C# توفر طريقة مريحة لتجنب هذه المشكلات من خلال حساب NaN. على وجه التحديد، يدعم نوع البيانات double بشكل كامل حسابات NaN. على سبيل المثال:
1 2 3 4 5 | |
ومع ذلك، عندما يكون أي معامل في الحساب NaN، فإن النتيجة ستكون أيضًا NaN. نظرًا لأن مؤشرات cTrader المخصصة تعمل على نوع DataSeries، إذا حاولت الوصول إلى عنصر DataSeries بفهرس سالب، فسيعيد NaN، ولن يتم رسم القيمة على مخطط التداول. يسمح هذا السلوك للمؤشر بمواصلة العمل دون إلقاء استثناءات. في معظم الحالات، يمكنك تجاهل الشروط الحدودية بأمان والتركيز فقط على منطق الحساب العام.
إضافة فحوصات صريحة
في حين أن حساب NaN يبسط التعامل مع الشروط الحدودية، إلا أن بعض الحالات لا تزال تتطلب فحوصات NaN صريحة. المؤشرات التكرارية هي مثال شائع. يحسب المؤشر التكراري قيمته الحالية بناءً على القيمة المحسوبة سابقًا.
ضع في اعتبارك التنفيذ التالي للمتوسط المتحرك الأسي:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
عندما يحسب المؤشر الفترة الأولى، يجب تعيين القيمة الأولية بشكل صريح إلى نوع غير NaN. وإلا، فإن جميع الحسابات اللاحقة ستعيد NaN، مما يجعل المؤشر عديم الفائدة.
في الكود أعلاه، يتم التعامل مع هذا باستخدام طريقة double.IsNaN(previousValue). لا يمكن استخدام المعامل == لهذا الفحص (previousValue == double.NaN) لأن أي مقارنة لـ NaN مع قيمة أخرى، بما في ذلك نفسها، دائمًا ما تُقيَّم بـ false.
عندما تكون راضيًا عن كود المؤشر، قم ببنائه، ثم استخدمه عن طريق إضافة نسخة إلى رسم بياني.
