لقد نجحت في إضافة إستراتيجية إلى الرسم البياني، لكنها لا تنشئ أي أوامر
إذا كانت التبويبتان "قائمة الصفقات" و "نظرة عامة" في "اختبار الإستراتيجية" تعرض "لا توجد بيانات" بعد إضافة إستراتيجية إلى الرسم البياني، فمن المحتمل أنها لا تحاكي أي أوامر، مما ينتج عنه عدم وجود بيانات لإضافتها للتبويبات. إذا كان نصك البرمجي لا يقوم بإنشاء أوامر، فقد يرجع ذلك إلى أحد الأسباب التالية:
لا يتم تصنيف النص البرمجي كاستراتيجية أو لا يستخدم الأوامر التي تنشئ أوامر
لا يعمل الاختبار العكسي مع Strategy Tester إلا مع إستراتيجيات Pine Script™، التي تستخدم الدالة `strategy()` لبيان الإعلان الخاص بها. لا يمكنه التفاعل مع وحدة اختبار الإستراتيجية عند الإعلان عن النصوص البرمجية بـ `indicator()`أو`library()`.
يجب أن تستخدم النصوص البرمجية المُعلن عنها كاستراتيجيات ``Strategy.*`` لطلبات وضع الأوامر (على سبيل المثال، ``strategy.order()' أو `strategy.entry()`) لمحاكاة الأوامر وعرض البيانات في نختبر الاستراتيجيات trategy Tester، بغض النظر عن شراء/بيع الإشارات التي قد يكون مؤلف النص قد أدرجها في النص البرمجي.
لا تملك الإستراتيجية رأس مال كافٍ لفتح مركز
لكي تفتح إستراتيجية مركزا، يجب أن يكون لديها ما يكفي من المال لشراء العدد المحدد من العقود/الحصص/الأسهم/الوحدات. لن تدخل في صفقة إذا لم يكن لديها رأس مال كافٍ لتغطية التكلفة. على سبيل المثال، إذا كان رأس المال الأولي للإستراتيجية هو 1000 دولار أمريكي وكان حجم الأمر عقدًا واحدًا، فلا يمكن دخول المركز إلا إذا انخفض سعر الأصل عن 1000 دولار أمريكي نظرًا لأنه لا يمكنه تحمل تكلفة الصفقة بأكملها. ستحاول الإستراتيجيات دائمًا شراء العدد المحدد من العقود/الأسهم/الحصص/الوحدات وليس أقل من ذلك.
ملاحظة مهمة حول الاختبار العكسي للعقود الآجلة:
عادةً ما تحتوي رموز العقود الآجلة على ما يُعرف باسم وحدة العقد (ممثلة بقيمة النقطة على TradingView ويمكن الوصول إليها في Pine عبر `syminfo.pointvalue`). يمثل السعر على الرسم البياني سعر وحدة واحدة من السلعة المتداولة مثل الرموز الأخرى. ومع ذلك، فإن العقود الآجلة لها كمية محددة يمثلها كل منها، لذا فإن شراء وحدة واحدة غير ممكن عادةً. لحساب رأس المال المطلوب لعقد ما، اضرب سعر الرسم البياني في قيمة النقطة.
لتوضيح تأثيرات قيمة النقطة على الاستراتيجيات التي تعمل على العقود الآجلة، دعنا نلقي نظرة على الرمز CME_MINI:ES1!، الذي يمثل عقد ES الآجل مع أفضل سيولة والذي له قيمة 50 نقطة:
في المثال أدناه، أدخلت الإستراتيجية التي أضفناها إلى الرسم البياني مركزًا عند 4000 دولار أمريكي بالضبط وخرجت عند 4500 دولار أمريكي. كان المبلغ الذي تم إنفاقه على العقد بسعر الدخول 4000 دولار أمريكي ضعف قيمة النقطة 50، أي 200000 دولار أمريكي. عندما أغلقت الاستراتيجية مركزها عند الخروج، كان المبلغ المستلم 4500 دولار أمريكي * 50 = 225000 دولار أمريكي، مما أدى إلى ربح 25000 دولار أمريكي، وهو ما يمكننا تأكيده من خلال مشاهدة عمود "الربح" في التبويبة "قائمة التداولات" في اختبار الإستراتيجية:
إذا كانت الإستراتيجية تحتوي على قيمة رأس مال مبدئي أقل من 200000 دولار أمريكي في هذه الحالة، فلن تكون قادرة على وضع الأمر لأنها لا تستطيع تحمل سعر الدخول، والذي يمثل 50 ضعف للسعر الموضح على الرسم البياني. لمحاكاة المركز، يجب علينا زيادة رأس المال الأولي أو خفض قيم هامش الشراء/البيع على المكشوف للسماح للاستراتيجية بالعمل.
تقوم الإستراتيجية بإرجاع خطأ تشغيل
إذا واجهت الإستراتيجية مشكلة أثناء حساباتها، فسوف تظهر خطأ وقت التشغيل وتعرض علامة تعجب حمراء في الزاوية العلوية اليسرى من جزء الرسم البياني الذي يحتوي على الإستراتيجية. تمنع أخطاء التشغيل النص البرمجي من متابعة العمليات الحسابية، لذلك لا يمكنه محاكاة الاوامر. أخطاء التشغيل المختلفة في Pine لها أسباب مختلفة وإصلاحات محتملة. سيؤدي النقر فوق علامة التعجب إلى إظهار رسالة خطأ النص البرمجي.
لم يتم استيفاء الشروط المطلوبة لوضع أوامر الإستراتيجية
أحد الأسباب المحتملة لعدم عرض الإستراتيجية أي بيانات هو عدم وجود شرط أدى إلى تشغيل أمر في نطاق الاختبار. في هذه الحالة، لن يكون هناك إدخالات على الرسم البياني لأنه لا توجد أوامر لتنفيذها. يمكن للمستخدمين إصلاح هذا عن طريق تغيير الشروط في كود المصدر للاستراتيجية. قد يكون من المفيد غالبًا إجراء فحص لتاريخ شروط طلب الإستراتيجية عن طريق رسمها على الرسم البياني.
يستخدم النص البرمجي أدناه دالة Pine plotshape()` لرسم تقاطعات زرقاء وحمراء فوق الأعمدة عند استيفاء ظروف الشراء والبيع، مما يسمح لنا بفحص تاريخها على الرسم البياني:
//@version=5
strategy('My Strategy', overlay = true)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if longCondition
strategy.entry('Long', strategy.long)
plotshape(longCondition, color=color.new(color.blue, 0))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if shortCondition
strategy.entry('Short', strategy.short)
plotshape(shortCondition, color=color.new(color.red, 0))
للحصول على معلومات إضافية حول هذا الموضوع، راجع صفحة دليل المستخدم لإصلاح الأخطاء.
خصائص الإستراتيجية غير صحيحة
تحتوي كل إستراتيجية على العديد من المعلمات التي تحكم قواعد فتح الأوامر. يمكن للمبرمجين تعيين هذه المعلمات في كود المصدر للاستراتيجية، ويمكن للمستخدمين تجاوزها بالمدخلات في التبويبة "الخصائص" في إعدادات الإستراتيجية.
ملاحظة: هناك عدة أماكن في كود المصدر للاستراتيجية حيث يمكن للمستخدمين تعيين عدد العقود/الأسهم/الحصص/الوحدات لأوامرها:
- المعلمات في الدالة strategy() تسمح للمستخدمين بتعيين كمية ونوع التداول الافتراضي، والتي تحدد القيم الافتراضية في التبويبة "خصائص". يمكن للمستخدمين تجاوز هذه القيم عن طريق ضبط مدخلات "حجم الأمر".
- يمكن لطلبات وضع الأوامر التي ينتج عنها أوامر الدخول، مثل `strategy.entry()`، تعيين حجم الصفقة على أساس كل أمر على حدة. في هذه الحالة، لن تؤثر التغييرات التي يتم إجراؤها على الإدخال في التبويبة "خصائص" على حجم أمر الإستراتيجية.
يجب على المستخدمين التأكد من تحديد أحجام أوامر استراتيجياتهم بشكل صحيح. للإضافة إلى "لا تملك الإستراتيجية رأس مال كافٍ لفتح مركزأعلاه، يجب ملاحظة ما يلي:
- إذا تم تعيين "نوع الأمر" لإحدى الإستراتيجيات على "العقود" (مكافئ لـ `strategy.fixed` باعتباره default_qty_type في شفيرة المصدر)، يجب أن يكون حجم الأمر أكبر من 1 لمعظم الرموز. بعض العملات الرقمية تسهل الأحجام الصغرى. على سبيل المثال، حجم أمر 0.1 صالح لـ BTCUSD ولكن ليس لـ AAPL أو EURUSD.
- يجب أن يكون حجم الأمر موجبًا؛ سوف تتسبب الأرقام السالبة في حدوث أخطاء في التشغيل، ولن يكون للقيمة 0 أي تأثير.
- لا يمكن أن يتجاوز حجم المركز الإجمالي (عدد العقود) 1e12. لن تحاكي الإستراتيجيات الأوامر الجديدة إذا تجاوز حجم المركز هذا الرقم.