إذا عمل المستشار الخبير في الاختبار المرئي وحده، فالسؤال الأول هو: هل يعتمد القرار على بيانات أم على شيء مرسوم على المخطط؟ لا تجعل عنصرًا رسوميًا بديلًا من قيمة الإشارة الصريحة. قارن النمط والإصدارات والبيانات وأول اختلاف في السجل قبل تعديل الاستراتيجية.

لا يشغل المثال التالي منصة MT5. إنه نموذج تعليمي من إعدادنا يفصل العدد من القراءة غير المتاحة. يظل المدخل المفقود مجهولًا بدل تحويله إلى صفر، ولا يرسل أي طلب تداول.

ما الذي يختلف فعلًا في النمط المرئي؟

توضح وثائق MQL5 أن العناصر الرسومية لا ترسم أثناء الاختبار أو التحسين خارج النمط المرئي، وأن طلب خصائص العنصر المنشأ يعيد قيمًا صفرية في هذا السياق. وتستثني الوثائق الاختبار المرئي من هذا القيد. هذه خاصية موثقة للمنصة، وليست تجربة أجريناها على برنامجك، ولا تثبت أن كل اختلاف بين تشغيلين سببه واحد.

إذا قرأ البرنامج سعر خط أو حالة زر، فسجل هذه المرحلة منفصلة عن قراءة المؤشر أو بيانات السعر. تحقق أولًا من وجود القيمة في النمط المستخدم. يمكن لحالة «غير متاح» الصريحة إيقاف التشخيص قبل الحساب، بدل قبول صفر تقني كسعر. ظهور المخطط لا يثبت جاهزية جميع مدخلات الاستراتيجية.

كيف تفصل الإشارة العددية من عنصر المخطط؟

محاكاة تعليمية بلا تداول: نفترض إشارة موجبة 1.1050 وعتبة 1.1040. الشرط هو «الإشارة أكبر من العتبة». نقارن العدد الصريح بقراءة عنصر مصنفة غير متاحة. هذه ليست أسعار MT5 أو سجلات تنفيذ حقيقية؛ اخترنا الحالات لتوضيح مسار البيانات.

المدخل غير المتاح ليس سعرًا صفريًا

مرّر أفقيا لعرض الرسم كاملا.

غياب المدخل ليس سعرًا يساوي الصفرإشارة افتراضية 1.1050 أكبر من 1.1040. العنصر غير المتاح يبقى null في نموذجنا ولا يقيم الشرط. لا طلب تداول.قيمة صريحة1.1050العتبة: 1.1040عنصر غير متاحnullلا توجد قيمةنتيجة النموذجtrue / unknownلا طلب تداولافحص القيمة والتوافر كلًا على حدة.نموذج تعليمي بقيم افتراضية.
إشارة افتراضية 1.1050 أكبر من 1.1040. العنصر غير المتاح يبقى null في نموذجنا ولا يقيم الشرط. لا طلب تداول.
عتبة واحدة ومدخلات مختلفة
المسارالمدخلالتقييم
إشارة عددية صريحة1.10501.1050 > 1.1040: true في النموذج.
عنصر غير متاحnull: لا قيمةلا يقيم الشرط.
استبدال خاطئ0 بدل غياب القيمة0 > 1.1040: يبدو كأنه false عادي.

يبين الصف الأخير النسخة الخاطئة من المقارنة. يحتفظ المسار المحمي بالغياب على هيئة null في نموذجنا، بينما تبين النسخة الأخرى نتيجة استبداله بصفر. الصفر عدد، أما null هنا فحالة فقدان مدخل. ولو عكسنا الشرط إلى «أصغر من العتبة»، لأمكن للصفر البديل أن يحقق الشرط ظاهريًا. لا تصلح البرنامج بإدخال قيمة احتياطية اعتباطية.

افصل البيانات من عنصر المخطط

نموذج تعليمي يعمل داخل متصفحك؛ لا يتصل بحساب أو API ولا يرسل المدخلات أو يحفظها حفظاً دائماً. لا تدخل كلمات مرور أو بيانات شخصية.

هذا يحاكي قاعدتنا التعليمية ولا يختبر EA داخل MT5. أدخل قيماً موجبة من 10⁻⁸ إلى 10⁸، حتى 15 رقماً. يقبل حقلا القيمة والعتبة الأرقام العربية ١٢٣ والفارسية ۱۲۳ أو ASCII، والفاصل العشري ٫ أو النقطة، دون فواصل آلاف. يمثل غياب قراءة الكائن هنا بـnull؛ نسخة خاطئة مستقلة تستبدله بصفر. لا يثبت هذا سبب تعطل برنامجك الفعلي.

يتيح النموذج تغيير قيمتين موجبتين محدودتين. يقيم العدد الصريح، ويترك مسار العنصر غير المتاح دون نتيجة مقارنة. الصفحة لا تقرأ مخططًا، ولا تختبر برنامجًا في المنصة، ولا تنتج إشارة استثمار. فائدتها التمييز بين شرط غير محقق وشرط لا يمكن تقييمه. المثال الحسابي أعلاه متاح أيضًا عند تعطيل 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 UTCOBS-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.1040 وإشارة 1.1050.حساب وفق افتراضاتعدد صريح1.1050 > 1.1040عنصر غير متاحnullصفر بديل خاطئ0 > 1.1040
القيمة والتوافر سؤالان منفصلان. عتبة افتراضية 1.1040 وإشارة 1.1050.

احتفظ بحالة الغياب بدل تحويلها إلى عدد.

على الشاشات الصغيرة، مرّر الرسم أفقيا أو كبّره. تجد القيم والخلاصة أيضا في النص أدناه.

عدد صريح
1.1050 > 1.1040 – true في النموذج
عنصر غير متاح
null – لا يقيم الشرط
صفر بديل خاطئ
0 > 1.1040 – false يخفي فقدان المدخل

ماذا تطبق غدًا؟

  1. أكمل سجل النمطين. احتفظ بالإصدارات والمدخلات والبيانات والفترة لتشغيلين، وميز الحقول غير المؤكدة. الملف نفسه لا يثبت تطابق الإعدادات والبيانات الأخرى.
  2. افصل الغياب من الصفر. جرب 1.1050 مقابل 1.1040، ثم قيمتين متساويتين. يبقى العنصر غير المتاح null، مهما كانت نتيجة المسار العددي. لا تحتاج إلى حساب تداول.
  3. حدد أول مرحلة متباعدة. اجمع قيودًا تشخيصية لا ترسل أوامر داخل إعداد تجريبي منفصل أو المختبر. قارن التسلسل وتحقق هل تغير المدخل أو التوافر أو الشرط. لا يثبت التشخيص الربحية أو أفضلية استثمارية.