في هذا المقال
بعد قراءة المقال ستتمكن من…
- تميز قيد العناصر الرسومية الموثق من محاكاة الصفحة التعليمية.
- تسجل بيئة التشغيل وأول تباعد دون إرسال أوامر.
- تفصل المساواة العددية من غياب البيانات ومن ملاحظة ذات معرف مختلف.
شرح المصطلحات داخل المقال
المستشار الخبير EA الاختبار على البيانات التاريخيةإذا عمل المستشار الخبير في الاختبار المرئي وحده، فالسؤال الأول هو: هل يعتمد القرار على بيانات أم على شيء مرسوم على المخطط؟ لا تجعل عنصرًا رسوميًا بديلًا من قيمة الإشارة الصريحة. قارن النمط والإصدارات والبيانات وأول اختلاف في السجل قبل تعديل الاستراتيجية.
لا يشغل المثال التالي منصة MT5. إنه نموذج تعليمي من إعدادنا يفصل العدد من القراءة غير المتاحة. يظل المدخل المفقود مجهولًا بدل تحويله إلى صفر، ولا يرسل أي طلب تداول.
ما الذي يختلف فعلًا في النمط المرئي؟
توضح وثائق MQL5 أن العناصر الرسومية لا ترسم أثناء الاختبار أو التحسين خارج النمط المرئي، وأن طلب خصائص العنصر المنشأ يعيد قيمًا صفرية في هذا السياق. وتستثني الوثائق الاختبار المرئي من هذا القيد. هذه خاصية موثقة للمنصة، وليست تجربة أجريناها على برنامجك، ولا تثبت أن كل اختلاف بين تشغيلين سببه واحد.
إذا قرأ البرنامج سعر خط أو حالة زر، فسجل هذه المرحلة منفصلة عن قراءة المؤشر أو بيانات السعر. تحقق أولًا من وجود القيمة في النمط المستخدم. يمكن لحالة «غير متاح» الصريحة إيقاف التشخيص قبل الحساب، بدل قبول صفر تقني كسعر. ظهور المخطط لا يثبت جاهزية جميع مدخلات الاستراتيجية.
كيف تفصل الإشارة العددية من عنصر المخطط؟
محاكاة تعليمية بلا تداول: نفترض إشارة موجبة 1.1050 وعتبة 1.1040. الشرط هو «الإشارة أكبر من العتبة». نقارن العدد الصريح بقراءة عنصر مصنفة غير متاحة. هذه ليست أسعار MT5 أو سجلات تنفيذ حقيقية؛ اخترنا الحالات لتوضيح مسار البيانات.
المدخل غير المتاح ليس سعرًا صفريًا
مرّر أفقيا لعرض الرسم كاملا.
| المسار | المدخل | التقييم |
|---|---|---|
| إشارة عددية صريحة | 1.1050 | 1.1050 > 1.1040: true في النموذج. |
| عنصر غير متاح | null: لا قيمة | لا يقيم الشرط. |
| استبدال خاطئ | 0 بدل غياب القيمة | 0 > 1.1040: يبدو كأنه false عادي. |
يبين الصف الأخير النسخة الخاطئة من المقارنة. يحتفظ المسار المحمي بالغياب على هيئة null في نموذجنا، بينما تبين النسخة الأخرى نتيجة استبداله بصفر. الصفر عدد، أما null هنا فحالة فقدان مدخل. ولو عكسنا الشرط إلى «أصغر من العتبة»، لأمكن للصفر البديل أن يحقق الشرط ظاهريًا. لا تصلح البرنامج بإدخال قيمة احتياطية اعتباطية.
افصل البيانات من عنصر المخطط
نموذج تعليمي يعمل داخل متصفحك؛ لا يتصل بحساب أو API ولا يرسل المدخلات أو يحفظها حفظاً دائماً. لا تدخل كلمات مرور أو بيانات شخصية.
يتيح النموذج تغيير قيمتين موجبتين محدودتين. يقيم العدد الصريح، ويترك مسار العنصر غير المتاح دون نتيجة مقارنة. الصفحة لا تقرأ مخططًا، ولا تختبر برنامجًا في المنصة، ولا تنتج إشارة استثمار. فائدتها التمييز بين شرط غير محقق وشرط لا يمكن تقييمه. المثال الحسابي أعلاه متاح أيضًا عند تعطيل JavaScript. لا تدخل كلمات مرور أو بيانات شخصية في أداة تعليمية.
كيف تسجل نمط البرنامج دون تداول؟
تصف الأعلام MQL_TESTER و MQL_VISUAL_MODE و MQL_OPTIMIZATION بيئة البرنامج، ويحدد TERMINAL_BUILD إصدار بناء المنصة. سجل القراءات الفعلية بدل استنتاج النمط من شكل النافذة. لا يثبت هذا السجل وحده تطابق البيانات أو المعلمات.
البرنامج التشخيصي المستقل التالي يسجل الإعدادات في OnInit، وله معالج OnTick فارغ. لا يرسل أو يعدل أوامر. احفظه في ملف MQ5 منفصل، وجمعه في MetaEditor، ثم قارن سجلات منصتك الفعلية. لم نشغل هذا المقتطف في MT5 ضمن هذا المثال.
#property strict
int OnInit()
{
PrintFormat("tester=%d visual=%d optimization=%d build=%d symbol=%s period=%d",
(int)MQLInfoInteger(MQL_TESTER),
(int)MQLInfoInteger(MQL_VISUAL_MODE),
(int)MQLInfoInteger(MQL_OPTIMIZATION),
(int)TerminalInfoInteger(TERMINAL_BUILD),
_Symbol, (int)_Period);
return INIT_SUCCEEDED;
}
void OnTick() {}
لا تنشئ OnInit ثانية داخل برنامج موجود، ولا تستبدل تهيئته بهذا المقتطف. إضافة التسجيل تتطلب الحفاظ على مسار البرنامج الأصلي. تشرح وثائق الاختبار استثناء OnInit من قيد PrintFormat أثناء التحسين؛ لذلك غياب الطباعة من المراحل الأخرى لا يثبت أنها لم تنفذ. تشير وثائق OnInit إلى أن INIT_SUCCEEDED يسمح باستمرار الاختبار بعد التهيئة الناجحة، ولا يثبت صحة استراتيجية التداول.
كيف تجد أول اختلاف بدل مقارنة الربح؟
أنشئ سجلًا لتشغيلين: النمط المرئي وغير المرئي، إصدار المنصة والشيفرة، المدخلات، الرمز والإطار الزمني، نموذج توليد التيكات، البداية المطلوبة والفعلية، لقطة البيانات، التكاليف والحالة الابتدائية. احتفظ بملفات الإعداد ومعرفات الإصدارات. إذا اختلفت هذه التصريحات، فلا تنسب كل النتيجة إلى نافذة المخطط. تساعدك أداة مقارنة سجلي الاختبار على ترتيب الفحص.
ابحث عن أبكر مرحلة اختلفت فيها قيمة: نجاح الاسترجاع، وقت البيانات، جاهزية المؤشر، الإشارة، الشرط أو القرار. عبارة «الربح 120 بدل 80» لا تحدد هذه المرحلة. احتفظ بالسجلات الأصلية، وضع جدول مقارنة صغيرًا بجانبها. لا تخترع قيمًا لم يسجلها البرنامج أصلًا.
اجعل السجل صغيرًا بما يكفي لمطابقة الحدث بين التشغيلين. تسجيل كل شيء دون معرف ثابت قد يخفي أول تباعد. سجل المدخل المطلوب ووقته أو موقعه في التسلسل، وهل قبله البرنامج. أضف معرف ملاحظة بدل التخمين أن سعرين متشابهين جاءا من المرحلة نفسها. هذه اختيارات عملية لتصميم السجل، وليست ضمانًا لاكتشاف كل اعتماد برمجي.
قيمة صحيحة حسابيًا، لكنها تخص ملاحظة أخرى
إضافة من إعدادنا: نفترض قاعدة قبول تشخيصية تشترط تطابق معرف الطلب مع معرف البيانات، لا مهلة عالمية للمنصة. العتبة 1.1040 في الحالات الثلاث التالية. الأوقات موسومة UTC صراحة، ولا تحتاج إلى تحويل توقيت بلد القارئ. القيم والأوقات مصطنعة وليست سجل سوق.
| الطلب | البيانات المتاحة | النتيجة وفق قاعدة النموذج |
|---|---|---|
| OBS-18؛ 00:01 UTC | OBS-18؛ 00:01 UTC؛ 1.1050 | المعرف مطابق: true. |
| OBS-18؛ 00:01 UTC | لا قراءة | unknown؛ لا مقارنة. |
| OBS-18؛ 00:01 UTC | قيمة مخزنة OBS-17؛ 00:00 UTC؛ 1.1050 | المعرف مختلف: unknown للطلب الحالي، رغم أن العدد أكبر من العتبة. |
لو سجلت العدد وحده، لتساوى الصفان الأول والثالث. إضافة معرف المصدر والطلب تكشف الفرق الذي لا يظهر في الحساب. لا يعني ذلك رفض كل قيمة قديمة في كل استراتيجية؛ قد تقصد استراتيجيتك استخدام شمعة سابقة. المطلوب أن تعلن هذا الربط في القاعدة، لا أن تستبدل المدخل بصمت. اختبر أيضًا قيمة تساوي 1.1040: الشرط الصارم > غير محقق، مع بقاء البيانات متاحة. هذا يختلف عن unknown.
ما الذي يتغير في تصميم الإشارة؟
ليعد الحساب قيمة صريحة مع حالة توافر البيانات، ثم تعرض الطبقة الرسومية هذه القيمة. عند تعطيل الرسم لا يلزم تغيير مصدر المدخل عمدًا. افحص الوحدة نفسها بمدخلات مضبوطة، تشمل غياب البيانات والمساواة بالعتبة. هذا لا يضمن تطابق نتائج المختبر كله؛ تظل الإصدارات والبيانات والتكاليف والاعتمادات الأخرى مؤثرة.
إن لم تتوفر الشيفرة، جهز لمؤلف البرنامج سجل التشغيلين وأول اختلاف موثق. لا تستبدل التشخيص بسلسلة أوامر تجريبية على حساب حقيقي. يشرح دليل الاختبار التاريخي في MT4 و MT5 إعداد الاختبار العام.
القيمة والتوافر سؤالان منفصلان
احتفظ بحالة الغياب بدل تحويلها إلى عدد.
على الشاشات الصغيرة، مرّر الرسم أفقيا أو كبّره. تجد القيم والخلاصة أيضا في النص أدناه.
- عدد صريح
- 1.1050 > 1.1040 – true في النموذج
- عنصر غير متاح
- null – لا يقيم الشرط
- صفر بديل خاطئ
- 0 > 1.1040 – false يخفي فقدان المدخل
ماذا تطبق غدًا؟
- أكمل سجل النمطين. احتفظ بالإصدارات والمدخلات والبيانات والفترة لتشغيلين، وميز الحقول غير المؤكدة. الملف نفسه لا يثبت تطابق الإعدادات والبيانات الأخرى.
- افصل الغياب من الصفر. جرب 1.1050 مقابل 1.1040، ثم قيمتين متساويتين. يبقى العنصر غير المتاح null، مهما كانت نتيجة المسار العددي. لا تحتاج إلى حساب تداول.
- حدد أول مرحلة متباعدة. اجمع قيودًا تشخيصية لا ترسل أوامر داخل إعداد تجريبي منفصل أو المختبر. قارن التسلسل وتحقق هل تغير المدخل أو التوافر أو الشرط. لا يثبت التشخيص الربحية أو أفضلية استثمارية.
اختبر فهمك
الوقت التقديري للتمرين: نحو 3 د.
عرض الإجابة والشرح
صحيح. هذا تمثيل صريح في نموذجنا، لا ادعاء بأن دالة MT5 ترجع null.
الأسئلة الشائعة
هل تعيد دالة MT5 القيمة null عند غياب العنصر؟
هل true في النموذج تعني أن المستشار سيفتح صفقة؟
هل إزالة اعتماد الرسم تكفي لتطابق الاختبارين؟
هل المقتطف التشخيصي يرسل أو يعدل أوامر؟
المصادر والتحقق
- MetaQuotes: الاختبار في MQL5
قسم العناصر الرسومية واستثناء OnInit من قيد الطباعة أثناء التحسين، دون تجربة برنامج بعينه.
- MetaQuotes: خصائص البرنامج الجاري
تعريف الأعلام الثلاثة بواسطة MQLInfoInteger.
- MetaQuotes: OnInit
توقيع التهيئة وقيمة النجاح، لا صحة الاستراتيجية.
- MetaQuotes: PrintFormat
الطباعة المنسقة وقيد التحسين؛ يشرح مرجع المختبر استثناء OnInit.
تُذكر افتراضات الأمثلة الحسابية بوضوح. وهي لا تحل محل بيانات السوق الحالية أو شروط مزوّد الخدمة.
