في هذا المقال
بعد قراءة المقال ستتمكن من…
- تمييز توافر دالة API من جودة الأرشيف التاريخي.
- اختيار النسخة المعروفة وقت القرار وفصل null من الصفر.
- تحويل الوقت المحلي المسمى إلى UTC دون إسناد معرفة لاحقة.
شرح المصطلحات داخل المقال
الاختبار على البيانات التاريخية المستشار الخبير EA التقويم الاقتصاديقد ينزل EA بيانات API على حساب تجريبي،لكن لا يتلقى الرد نفسه في المختبر. لا يثبت ذلك تعطل الخادم؛افحص توافر الدالة في بيئة الاختبار قبل جودة الأرشيف. إسناد قيمة اليوم إلى قرارات ماضية يخلق اختباراً مختلفاً. يعيد المثال نسخاً محددة ويفصل التعديل من عدم الإتاحة،ولا يتصل بواجهة API خارجية.
نجاح WebRequest لا يكفي للاختبار التاريخي
توثيق MQL5 يقول إن WebRequest لا تنفذ في Strategy Tester. إضافة العنوان إلى قائمة URLs المسموحة لا تزيل هذا القيد. فرق بين دالة غير متاحة في المختبر وخطأ شبكة أو تفويض أو الرد خلال تشغيل EA العادي. لا تحول طلباً فاشلاً إلى صفر؛قد يكون الصفر قيمة صحيحة،بينما الفشل يعني مدخلاً غير متاح.
استبدال الطلب بملف لا يحل المشكلة إن احتوى مراجعات لم تكن معروفة وقت القرار. عرف المشاهدة والنسخة والقيمة ووقت الإتاحة قبل ربط منطق الإشارة بطلب HTTP. افصل البيانات والقرارات والتنفيذ؛تبديل المحول لا ينبغي أن يغير معنى المعلومة أو كيفية التعامل مع غيابها سراً.
محول حي وآخر تاريخي بالعقد نفسه
المحول الحي يعالج رد المزود،والتاريخي يختار سجلاً محفوظاً كان متاحاً عند القرار. يسلمان إلى المنطق نوع نتيجة واحداً:قيمة صالحة،أو عدم إتاحة صريحاً،أو خطأ. هذا تنظيم برمجي نقترحه،لا روبوت كامل أو وعد توافق مع كل API. احفظ الرد الخام منفصلاً من سجلات الاختبار،ومعه المصدر ونسخة المخطط ووقت الجلب ودليل الإتاحة.
الفترة التي تصفها مشاهدة ليست تاريخ معرفتها. إذا عرفت تاريخ نسخة يومياً فقط فلا تخترع ساعة نشر دقيقة. يشرح FRED الفترات الآنية لتمييز ما يعرف اليوم عن المعرفة السابقة؛والمعلمات الافتراضية تشير عادة إلى اليوم. لكنه مثال بيانات ذات نسخ،لا API فوركس عامة،ولا يعطي تاريخ النسخة وحده ساعة نشر UTC لإسنادها لاختبار لحظي.
توثيق FileOpen يحدد مساحة الملفات،وفي الاختبار قد يكون المسار النسبي داخل مجلد العامل لا مجلد المنصة العادي. افحص نجاح الفتح والقراءة. غياب الملف يجب أن ينتج حالة عدم إتاحة معروفة،لا جدولاً فارغاً يعامل كأنه تاريخ مكتمل.
أي نسخة تصلح لقرار سابق؟
ثلاثة ردود مؤلفة لا بيانات GDP فعلية
نفترض المشاهدة GDP-model في 1 أكتوبر 2026. كل الأوقات UTC. الحقل availableAt يصف إتاحة المدخل في نموذجنا،لا وقت تنفيذ أمر. القيم نصوص رقمية وليست تحويلات إلى Number،و null حالة غياب صريحة.
| availableAt | revision | value |
|---|---|---|
| 2026-10-01T12:00:00Z | initial | "1.0" |
| 2026-10-01T13:00:00Z | revised | "1.4" |
| 2026-10-01T14:00:00Z | unavailable | null |
هذه أسماء حقول وقيم تبادل تقني محفوظة؛initial تعني النسخة الأولية و revised المعدلة و unavailable غياباً. عند 12:30 آخر سجل مؤهل 1.0،وعند 13:30 يصبح 1.4،وعند 14:30 آخر سجل مؤهل null فتظل النتيجة غير متاحة. لا يرجع نموذجنا إلى 1.4 ولا يستبدل الغياب بصفر.
التعديل اللاحق لا يغير المعرفة السابقة
مرّر أفقيا لعرض الرسم كاملا.
قاعدة مؤلفة تطلب قيمة أكبر من 1.2 تكون خاطئة عند 12:30 مع 1.0. إدخال 1.4 اللاحقة يعكس القرار حتى إن لم تتغير بيانات السعر. هذا فحص إتاحة معلومات لا ربحية استراتيجية. تختار الأداة سجلاً ولا تحسب إشارة تداول أو عائداً.
إن كانت استراتيجيتك تستبقي آخر قيمة معروفة حين يأتي غياب،فهذه سياسة مختلفة. عرف العمر المسموح وسبب استعمال السجل القديم قبل تقييم النتائج؛نسختنا ذات null الصريح لا تنفذ ذلك. لا تضف الرجوع بعد رؤية نتيجة أجمل وتسمي الاختبار غير متغير.
ما الذي يفحصه المعيد المحلي؟
الصق كائن JSON ذا version عددي يساوي 1 ومصفوفة events. كل حدث يحوي availableAt و observation و value و revision فقط. الصيغة الزمنية YYYY-MM-DDTHH:mm:ssZ،بلا كسور ثانية أو إزاحة أخرى. observation و revision نصان؛value نص رقمي بنقطة عشرية وأرقام ASCII أو null،دون تحويله إلى Number. صيغة التبادل مقصودة،فلا تستبدل أرقامها بأرقام العرض العربية أو تطبق تطبيع NFKC على معرفات وسجلات أصلية.
أعد تشغيل المعلومات المتاحة عند لحظة القرار
نموذج تعليمي يعمل داخل متصفحك؛ لا يتصل بحساب أو API ولا يرسل المدخلات أو يحفظها حفظاً دائماً. لا تدخل كلمات مرور أو بيانات شخصية.
أدخل decisionAt منفصلاً بالصيغة UTC نفسها. يختار النموذج آخر نسخة للمشاهدة لا يتجاوز availableAt فيها القرار. قبل السجل الأول لا قيمة،وسجلان للمشاهدة نفسها ووقت الإتاحة نفسه ملتبسان فيرفضان؛لا يحسم ترتيب اللصق التعارض. واسم revision ليس عداداً زمنياً عددياً.
الحدود 1–200 حدث و 64 KiB،وعمق 8 مستويات و 2,000 قيمة JSON. observation و value حتى 128 محرفاً و revision حتى 64؛القيمة نص رقمي أو null. يعمل التمرين على السجلات الملصقة محلياً،دون تنزيل بيانات أو مفاتيح API. لا تدخل أسراراً أو بيانات شخصية. اختيار السجل لا يتحقق من صدق توقيت المزود؛JSON صالح لا يثبت أرشيفاً حقيقياً.
لو خمنت التواريخ أو نسبت كل التعديلات إلى وقت النشر الأول،فخوارزمية سليمة تعيد افتراضات خاطئة. احفظ منهجية المصدر ودليل النسخ لأي بحث فعلي. وبيئات الملفات والعوامل منفصلة عن المنصة؛استخدم نسخة مجموعة بيانات ثابتة للعمليات المتوازية،ولا تستبدلها برد حي أثناء الدراسة. سجل نسخة البيانات الفعلية مع تقريرك لا اسم نقطة النهاية وحده.
إعادة المدخلات لا تعيد التنفيذ تلقائياً:أسعار Bid/Ask والتكاليف والكمية ورد الخادم ومراكز الحساب مكونات أخرى. قارن بضعة قرارات دون وضع صفقات قبل نسبة الفرق إلى الاستراتيجية. التوقيت الزمني للانضمام إلى السعر والمراجعات جزء من منهج الاختبار،لا مجرد نقل ملف.
إضافة:15:30 في الرياض ليست 15:30Z
مقارنة مستقلة مؤلفة على أحداث الجدول نفسه،بتاريخ 1 أكتوبر 2026. قرار 15:30 في Asia/Riyadh يساوي 12:30UTC؛وقرار 16:30 في Asia/Dubai يساوي 12:30UTC أيضاً. لذلك كلاهما يختار 1.0. أما وضع حرف Z بعد 15:30 المحلي دون تحويل المنطقة فيعطي 15:30UTC خطأ،فيختار آخر null عند 14:00 بدلاً من 1.0.
ليست المشكلة اختلاف استجابة API أو فشل Strategy Tester؛إنها إسناد زمن خاطئ يغير نافذة المعرفة. احتفظ بالوقت المحلي والمنطقة والتحويل UTC في سجل التحضير،ثم مرر الصيغة التي تقبلها الأداة. اختلاف تنسيق الأرقام في واجهة عربية لا يجعلها توقيتاً عربياً موحداً؛الرياض ودبي منطقتان مختلفتان. والأداة لا تخمن منطقة من اللغة ولا تصلح توقيت نشر ادعى المستخدم صحته.
التحويل يسبق صيغة التبادل؛لغة الواجهة لا تحدد منطقة،واختيار سجل صحيح لا يصحح وقتاً مصرحاً به خطأ.
على الشاشات الصغيرة، مرّر الرسم أفقيا أو كبّره. تجد القيم والخلاصة أيضا في النص أدناه.
- 15:30 في Asia/Riyadh
- 2026-10-01T12:30:00Z → "1.0" – فرق 3 ساعات في المنطقة المسماة.
- 16:30 في Asia/Dubai
- 2026-10-01T12:30:00Z → "1.0" – فرق 4 ساعات؛اللحظة UTC نفسها.
- نسخ 15:30 ثم إلحاق Z خطأ
- 2026-10-01T15:30:00Z → null – قرار بعد 3 ساعات؛آخر سجل حينها غياب 14:00 لا قيمة 1.0.
قبل الحكم على نتائج EA
- حدد عقد البيانات وافصل المحولين،واحفظ الرد الخام وتعريف المشاهدة ودليل الإتاحة. اذكر غياب النسخ التاريخية قيداً لا قيمة اليوم مسندة إلى الماضي.
- تتبع المشاهدة قبل النسخة الأولية وبين النشر والمراجعة وبعد null،وقارن الجدول. افحص المساواة عند حد الإتاحة والتوقيت المتعارض قبل التوسع.
- تحقق في المختبر من قراءة الملف المقصود وحالة الغياب،واحفظ نسخته وتقريره. بعد تفسير الاختلاف افحص الإشارات والتنفيذ والتكاليف منفصلة؛سلامة المدخلات لا تثبت ربحية لاحقة.
تابع اختبار Python وتسلسل الإشارات والتنفيذ والكلفة بعد تثبيت النسخ الزمنية.
اختبر فهمك
الوقت التقديري للتمرين: نحو 3 د.
عرض الإجابة والشرح
سجل 12:00 مؤهل؛المراجعة التالية لا تغير مدخل التقييم السابق.
الأسئلة الشائعة
هل السماح بعنوان URL يفعل WebRequest في المختبر؟
هل يكفي جدول اليوم لقراءات فترات سابقة؟
هل null صفر أو إعادة آخر قيمة؟
هل يعادل المعيد الصحيح اختباراً كاملاً صحيحاً؟
المصادر والتحقق
- www.mql5.com
مرجع للمحتوى؛ راجع نطاق التطبيق والافتراضات داخل المقال.
- www.mql5.com
مرجع للمحتوى؛ راجع نطاق التطبيق والافتراضات داخل المقال.
- fred.stlouisfed.org
مرجع للمحتوى؛ راجع نطاق التطبيق والافتراضات داخل المقال.
تُذكر افتراضات الأمثلة الحسابية بوضوح. وهي لا تحل محل بيانات السوق الحالية أو شروط مزوّد الخدمة.
