الحلقة الخامسة و العشرون من سلسلة تعلم البرمجة باسهل طريقة

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • الحلقة الخامسة و العشرون من سلسلة تعلم البرمجة باسهل طريقة

    معالجة الأخطاء
    Error Handling


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

    نتحقق من الأخطاء المحتملة من خلال فحص مخرجات الوظائف مثل OrderSend () ،
    OrderModify () و OrderClose (). إذا لم تكتمل الوظيفة بنجاح ، فستقوم الوظيفة
    بإرجاع -1 لـ OrderSend () ، أو false لـ OrderModify () و OrderClose ().

    في هذا الدرس ، سننشئ روتينا لمعالجة الأخطاء لوظيفة OrderSend (). إذا كانت
    القيمة الراجعة OrderSend () هي -1 ، سنقوم بتشغيل روتين معالجة الأخطاء لعرض تنبيه للمستخدم ، و
    تطبع معلمات التجارة ذات الصلة ومعلومات الأسعار في السجل (Log).

    أولاً ، يجب علينا أولاً استرداد رمز الخطأ. يتم ذلك باستخدام دالة GetLastError (). نحن
    بحاجة إلى تخزين القيمة المرجعة لـ GetLastError () في متغير ، لأنه بمجرد أن نستدعي GetLastError ()
    بتم ارجاع رمز الخطأ وسيتم مسح قيمة الخطأ وسيتم ارجاع 0 للأستدعاء التالي لوظيفة GetLastError (). سنقوم
    بتعريف متغير عام يسمى ErrorCode ونستخدمه لتخزين قيمة GetLastError ().

    بعد ذلك ، سنحتاج إلى الحصول على بعض المعلومات الوصفية عن الخطأ. الملف المضمن stdlib.mqh
    يحتوي على وظيفة تسمى ErrorDescription (). هذه الدالة ترجع سلسلة نصية مع وصف
    للخطأ. في الواقع ليس وصفيًا دقيقا للغاية ، لكنه أفضل من لا شيء. سنحتاج إلى إضافة

    كود PHP:
    #include stdlib.mqh 
    
    أعلى ملفنا.

    ثم سنقوم بطباعة تنبيه على شاشة المستخدم باستخدام وظيفة Alert() المدمجة. هذه المعلومات سيت
    طباعتها أيضًا في السجل. سيتضمن التنبيه رمز الخطأ ووصف الخطأ وملخصًا قصيرًا
    لوصف العملية التي حاولنا تنفيذها للتو. بهذه الطريقة ستعرف بالضبط أي
    قسم في برنامجك نتج عنه الخطأ.

    أخيرًا ، سنقوم بطباعة معلومات الأسعار ذات الصلة إلى السجل باستخدام وظيفة Print(). جنبا إلى جنب مع
    أسعار العرض Bid والطلب Ask الحالية ، سنقوم بتضمين معلمات التجارة مثل حجم اللوت وسعر الأمر.

    كود PHP:
    // Preprocessor section
    #include <stdlib.mqh>
    // Global variable
    int ErrorCode;
    // Order placement
    int Ticket = OrderSend(Symbol(),OP_BUYSTOP,LotSize,PendingPrice ,UseSlippage,0,0,
    "Buy Stop Order",MagicNumber,0,Green);
    if(Ticket == -1)
    {
    ErrorCode = GetLastError();
    string ErrDesc = ErrorDescription(ErrorCode);
    string ErrAlert = StringConcatenate("Open Buy Stop Order - Error ",
    ErrorCode,": ",ErrDesc);
    Alert(ErrAlert);
    string ErrLog = StringConcatenate("Bid: ",Bid," Ask: ",Ask," Price: ",
    PendingPrice," Lots: ",LotSize);
    Print(ErrLog);
    } 
    

    في الجزء العلوي ، نقوم بتضمين ملف stdlib.mqh. نضيف المتغير العام ErrorCode لتخزين
    شفرة الخطأ. يضع OrderSend () أمر إيقاف الشراء. إذا لم تنجح الوظيفة ، فإن معالجة الأخطاء لدينا
    يتم تشغيل التعليمات البرمجية.

    أولاً ، نقوم بتخزين قيمة GetLastError () في ErrorCode. ثم نستدعي دالة ErrorDescription ()
    ، باستخدام ErrorCode كوسيط. بعد ذلك ، نستخدم وظيفة StringConcatenate () لنقوم
    بإنشاء رسالة التنبيه الخاصة بنا ، والتي يتم تخزينها في متغير السلسلة ErrAlertالنصية .

    StringConcatenate () هي دالة MQL تسمح لك بإنشاء سلاسل معقدة باستخدام المتغيرات
    والثوابت. كل عنصر سلسلة نصية يتم ربطه (أو "متسلسل") معًا يتم فصله بواسطة
    فاصلة.

    يمكنك أيضًا ربط السلاسل النصية من خلال دمجها بعلامة الجمع (+). باستخدام
    StringConcatenate () يكون أكثر وضوحًا وفعالية ، ولكن إذا كنت تريد ببساطة ربط سلسلة قصيرة
    ، استخدم علامة الجمع للجمع بين ثوابت السلسلة والمتغيرات:

    string PlusCat = "The current Ask price is "+Ask;
    // Sample output: The current Ask price is 1.4320

    تعرض الوظيفة Alert () نافذة منبثقة على سطح مكتب المستخدم ، تحتوي على محتويات
    متغير ال ErrAlert.

    نقوم ببناء سلسلة أخرى بمعلمات السعر والتجارة الخاصة بنا ، ونخزنها في متغير ErrLog ،
    التي نمررها إلى وظيفة Print() .
    Print() تطبع محتويات وسيطة الدالة إلى سجل الخبراء.
    يمكن الاطلاع على سجل الخبراء من علامة تبويب الخبراء داخل نافذة Terminal ، أو من
    علامة التبويب Journal في نافذة Tester إذا كنت تستخدم Strategy Tester.

    ها هي محتويات السجل. السطر الأول هو الناتج من وظيفة Alert(). السطر الثاني هو
    إخراج وظيفة Print(). لاحظ الخطأ "حجم تداول غير صالح" "invalid trade volume"، وحقيقة أن
    حجم اللوت المبلغ عنه في السجل هو 0. في هذه الحالة ، تكمن المشكلة في أن حجم اللوت غير صالح.

    يمكنك إنشاء إجراءات معالجة أخطاء مماثلة لوظائف أخرى أيضًا ، خاصةً لـ
    دالات OrderModify () و OrderClose (). يمكنك أيضًا إنشاء معالجة أكثر تعقيدًا لأخطاء
    الإجراءات التي توفر رسائل خطأ مخصصة بناءً على رمز الخطأ ، أو تنفذ إجراءات أخرى.

    على سبيل المثال ، إذا تلقيت الخطأ 130: "وقف غير صالح" "invalid stops" ، يمكنك عرض رسالة مثل سعر وقف الخسارة أو جني الأرباح غير صالح. " "The stop
    loss or take profit price is invalid." إليك مثال على كيفية القيام بذلك:

    كود PHP:
    ErrorCode = GetLastError();
    string ErrDesc;
    if(ErrorCode == 129) ErrDesc = "Order opening price is invalid!";
    if(ErrorCode == 130) ErrDesc = "Stop loss or take profit is invalid!";
    if(ErrorCode == 131) ErrDesc = "Lot size is invalid!";
    string ErrAlert = StringConcatenate("Open Buy Order - Error ",ErrorCode,": ",ErrDesc);
    Alert(ErrAlert); 
    
يعمل...
X