غالبًا ما نواجه الحاجة إلى حساب عدد الأيدي في سجلات المعاملات التاريخية ، أو للحصول على معلومات حول آخر طلب معاملة تاريخي. هذه الوظيفة ليست صعبة بالنسبة لنا ، إليك مثال بسيط على الكود:
عقد مزدوج = 0 ؛
لـ (int i = 0 ؛ i <OrdersHistoryTotal () ؛ i ++)
{
إذا كان (OrderSelect (i، SELECT_BY_POS، MODE_HISTORY) == false) تابع ؛
الكثير + = OrderLots () ؛
}
طباعة ("إجمالي اللوت:" ، الكثير) ؛
هذا الرمز هو حساب جميع أرقام اللوت التاريخية من خلال الحلقة. في الواقع ، هذا الرمز هو فقط لتغيير الكود الذي يمر عبر جميع الطلبات الحالية. قم بتغيير دالة OrdersTotal () إلى OrdersHistoryTotal () ، وأضف معلمة إلى دالة OrderSelect: MODE_HISTORY. فهل هناك مشكلة في مثل هذا البرنامج البسيط؟ الجواب نعم.
لنقم بتشغيل برنامج EA هذا ، النتيجة المعروضة في الجهاز هي:
العدد الإجمالي للأيدي هو في الواقع 0! إنه أمر لا يصدق ، من الواضح أن لدي الكثير من سجلات المعاملات.
فلنقم الآن ببعض العمليات مع المحرر ، ثم قم بتشغيل البرنامج لمعرفة النتيجة النهائية
انقر بزر الماوس الأيمن في سجل الحساب ، وحدد جميع سجلات المعاملات ، والآن تظهر جميع السجلات التاريخية للمعاملات السابقة في سجل الحساب
ثم نقوم بتشغيل برنامج EA وتجربته ، وستكون النتيجة طبيعية:
هذه "حفرة" للحصول على السجلات التاريخية من خلال البرنامج. في MT4 ، سيعرض البرنامج فقط السجلات التاريخية للشهر الحالي افتراضيًا ، وسيبحث البرنامج فقط بناءً على السجلات التاريخية الحالية للبرنامج عند الحصول على السجلات التاريخية بما أنني لا أملك أي معاملات ، لذلك عندما تحسب العدد الإجمالي للأيدي ، تحصل على 0 ، وإذا تم عرض جميع سجلات المعاملات في البرنامج ، فيمكن للبرنامج في النهاية العمل بشكل طبيعي.
السبب الذي يجعلنا نادرًا ما نجد هذه المشكلة هو أن الحساب التجريبي العام لمنصة MT4 له وقت قصير.بعد تسجيل حساب تجريبي ، تنتهي صلاحيته قريبًا ، لذلك قلة من الناس يمكنهم العثور على هذه المشكلة. لذلك ، من المهم جدًا أن يكون لديك نظام أساسي يمكنه فتح حساب محاكاة طويل المدى. نوصي باستخدام منصة xxx ، والتي يمكن أن توفر حسابًا محاكاة لمدة تصل إلى xx يومًا.
إن محاكاة المستخدم على المدى الطويل نفسه مفيد جدًا بالنسبة لنا لتطوير واختبار برامج EA. كما نعلم جميعًا ، لا يكفي استخدام المحاكاة التاريخية بعد تطوير برنامج EA جديد. من الضروري أيضًا إنهاء الاختبار. إذا ينتهي الاختبار في غضون أيام قليلة ، وسيكون الأمر كذلك. إنه أمر مزعج للغاية لتطوير EA.
"الحفرة" الثانية حول هذا السجل التاريخي هي أنه إذا أردنا الحصول على السجل التاريخي ، فيمكننا فقط استخدام برنامج EA للحصول عليه. إذا كتبنا برنامج نصي ، فلن نتمكن من الحصول على السجل التاريخي ، حتى إذا كنا قد عرضناه بالفعل في سجل الحساب.جميع السجلات.
فكيف نتجنب هذه المشكلة؟ لأن العميل ليس على علم بهذه المشكلة عند استخدام برنامج EA الخاص بنا ، إذا كان العميل لا يعرف أو لن يفعل ذلك على الإطلاق ، فكيف يمكننا تجنب هذه المشكلة في البرنامج؟ هناك طريقة بسيطة نسبيًا وهي تخزين جميع سجلات الطلبات في ملف أثناء تشغيل برنامج EA الخاص بك ، بحيث يمكن الحصول على معلومات السجل التاريخي حتى إذا لم يقم العميل بأي عمليات. وفيما يلي مثال بسيط على رمز لحفظ الملفات:
// المحتوى هو المحتوى الذي سيتم تخزينه
ملف مجموعة باطل (محتوى سلسلة)
{
string filename = "اسم الملف المراد تخزينه"؛
int filehandle = FileOpen (اسم الملف ، FILE_WRITE | FILE_TXT) ؛ // يمكن أيضًا حفظه كملف CSV واستبدال FILE_TXT بـ FILE_CSV ، بحيث يمكن تخزين أجزاء متعددة من المعلومات
if (filehandle == INVALID_HANDLE) // الحكم على ما إذا كان هناك خطأ في قراءة الملف
{
إغلاق الملف (مقبض الملف) ؛
طباعة ("حدث خطأ في حفظ الملف") ؛
}
آخر // فتح بشكل طبيعي ، يمكنك كتابة المحتوى
{
FileWriteString (مقبض الملف ، المحتوى) ؛
إغلاق الملف (مقبض الملف) ؛
}
}
من خلال الأساليب المذكورة أعلاه ، يجب أن يفهم الجميع ، وسيكون برنامجنا أكثر كمالًا وقوة في التطوير المستقبلي.