النتائج 1 إلى 4 من 4
  1. #1
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,851

    افتراضي أهم الأخطاء الشائعة عند برمجة إكسبرت وكيفية حلها

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

    بعد التحديث الأخير للغه تم إضافة Property إسمه strict
    كود PHP:
    #property strict 
    والمقصود به أن يقوم الكومبايلر بإستخدام الشروط القصوى لكتابة اللغه مثلا عدم تجاهل التحذيرات فعند إستخدام strict لا يمكن عمل كومبايل للبرنامج إلا بعد إصلاح هذه التحذيرات بعكس
    إذا لم تستخدم strict فسوف يتجاهل الكومبايلر هذه التحذيرات .
    التحذيرات المشروحه في هذا الموضوع في حال إستخدام property strict فسوف تظهر كأخطاء يجب تفاديها

    يوجد ثلاثة أنواع من الأخطاء في لغة MQL4

    1- أخطاء تظهر عند عمل Compile للبرنامج وفي هذه الحاله لن يعمل البرنامج
    2- أخطاء تظهر عند تشغيل البرنامج في الميتاتريدر
    3- تحذيرات تظهر عند عمل Compile للبرنامج

    سوف أقوم بشرح كل جزء بالتفصيل على مراحل

    1- أخطاء تظهر عند عمل Compile للبرنامج وفي هذه الحاله لن يعمل البرنامج

    1.1- إستخدام switch في المقارنه illegal switch expression type
    اضغط على الصورة لعرض أكبر

الاســـم:	2.png
المشاهدات:	57
الحجـــم:	5.5 كيلوبايت
الرقم:	427544
    لا يمكن إستخدام أي قيم غير الأعداد الصحيحه في المقارنه
    كود PHP:
    double value=0.1;
        switch(
    value)
        {
         case 
    0:Print("some text");
         case 
    0.1:Print("some text");
         case 
    0.2:Print("some text");
        } 
    الصحيح
    إستخدم if بدلا من switch إذا كان في المقارنه أعداد غير صحيحه
    كود PHP:
    double value=0.1;
        if(
    value==0)Print("some text");
        if(
    value==0.1)Print("some text");
        if(
    value==0.2)Print("some text"); 
    1.2- خطأ عند تغيير قيمة المتغيرات الخارجيه constant cannot be modified
    اضغط على الصورة لعرض أكبر

الاســـم:	8.png
المشاهدات:	43
الحجـــم:	2.6 كيلوبايت
الرقم:	427554
    يظهر هذا الخطأ عند محاولة تغيير قيمة متغير خارجي داخل كود البرنامج
    كود PHP:
    Lots=Lots*2;;
       
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"EA",MagicNumber,0,Blue); 
    الصحيح
    قم بتعريف متغير جديد داخل الداله وقم بتغيير قيمته ثم إستخدامه لاحقا
    كود PHP:
    double newlot=Lots*2;
       
    OrderSend(Symbol(),OP_BUY,newlot,Ask,3,0,0,"EA",MagicNumber,0,Blue); 
    1.3- خطأ عند إستخدام الأقواس unbalanced parentheses
    أحيانا الخطأ يكون بأسماء أخرى على حسب مكان الخطأ
    unexpected token
    unbalanced right parenthesis
    اضغط على الصورة لعرض أكبر

الاســـم:	10.png
المشاهدات:	44
الحجـــم:	2.7 كيلوبايت
الرقم:	427556
    يحدث غالبا بدون قصد عند فتح قوس { أو ( وعدم إغلاقه مثلا ويجب تتبع البرنامج سطر سطر حتى إيجاد مكان الخطأ وتصحيحه


    2- أخطاء تظهر عند تشغيل البرنامج على الميتاتريدر

    2.1- خطأ في حجم اللوت invalid lots amount for OrderSend function
    اضغط على الصورة لعرض أكبر

الاســـم:	7.png
المشاهدات:	286
الحجـــم:	1.9 كيلوبايت
الرقم:	427553
    رقم الخطأ 4051 ويظهر عندما يحاول الإكسبرت فتح صفقه ويظهر خطأ بسبب حجم اللوت إما بسبب صغر حجم اللوت أقل من البروكر الذي يسمح به أو أكبر من حجم اللوت الذي يسمح به البروكر أو به فاصله عشريه لا يسمح بها البروكر مثلا حجم اللوت 1.21 والبروكر لا يسمح بحجم لوت أقل من 0.01 بالتالي يجب أن يكون حجم اللوت 1.2 فقط
    التصحيح :
    أولا قم بتعريف متغير لتحديد أقل حجم لوت يقبله البروكر
    كود PHP:
    int Lot_Decimal
    ثم بداخل الداله OnInit ستحدد أقل حجم لوت يقبله البروكر
    كود PHP:
    if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)Lot_Decimal=2;
      else if(
    MarketInfo(Symbol(),MODE_MINLOT)<1)Lot_Decimal=1;
      else 
    Lot_Decimal=0
    ثم في الداله OrderSend
    كود PHP:
     double lot;
        if(
    Lots>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT);
        else if(
    Lots<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT);
        
    OrderSend(Symbol(),OP_BUY,NormalizeDouble(lot,Lot_Decimal),Ask,3,0,0,"EA",MagicNumber,0,Blue); 

    2.2- خطأ القسمه على 0 zero divide
    اضغط على الصورة لعرض أكبر

الاســـم:	9.png
المشاهدات:	283
الحجـــم:	3.2 كيلوبايت
الرقم:	427555
    يظهر الخطأ عند القسمه على 0 ويتوقف البرنامج عن العمل في بعض الأحيان
    الصحيح
    قم بوضع شرط للتأكد من أن المقسوم عليه لا يساوي0 في حال كنت تتوقع أن تساوي قيمته 0 في بعض الأحيان
    كود PHP:
        int A=10;
        
    int B=0;
        
    int result;
        if(
    B!=0)result=A/B
    2.3- خطأ إسم العمله غير صحيح unknown symbol name

    سابقا كان يمكن إستخدام 0 بدلا من Null أو Symbol لمعرفة إسم العمله وإستخدامها في الدوال المختلفه مثل OrderSend
    لكن بعد التحديث الأخير لا يمكن إستخدام 0
    كود PHP:
    OrderSend(0,OP_BUY,lot,Ask,3,0,0,"EA",MagicNumber,0,Blue); 
    الصحيح
    كود PHP:
    OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,"EA",MagicNumber,0,Blue); 
    3- تحذيرات تظهر عند عمل Compile للبرنامج

    3.1- إستخدام المقارنه الخطائة expression not boolean
    اضغط على الصورة لعرض أكبر

الاســـم:	1.png
المشاهدات:	39
الحجـــم:	2.5 كيلوبايت
الرقم:	427542
    يظهر هذا الخطأ عند وضع مقارنة (يساوي) وإستخدام = بدلا من ==
    كود PHP:
    int Num=10;   
        if(
    Num 10
    الصحيح
    كود PHP:
     int Num=10;   
        if(
    Num == 10
    3.2- الداله تعود بقيمة معينه return value of .... should be checked
    اضغط على الصورة لعرض أكبر

الاســـم:	3.png
المشاهدات:	44
الحجـــم:	2.9 كيلوبايت
الرقم:	427545
    يظهر هذا التحذير عند إستدعاء دالة معرفه في اللغه تعود بقيمة معينه ولا يتم إرجاع هذه القيمه
    كود PHP:
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3*P,0,0,"EA",MagicNumber,0,Blue); 
    الصحيح
    كود PHP:
    int ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3*P,0,0,"EA",MagicNumber,0,Blue); 
    يتم تعريف المتغير حسب نوع القيمه التي تعود بها الداله مثلا الداله OrderSelect تعود بقيمة true أو false فيتم تعريف المتغير لها من نوع bool
    كود PHP:
    bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
    3.3- دالة معرفة لا تعود بقيمة معينه not all control paths return a value
    اضغط على الصورة لعرض أكبر

الاســـم:	4.png
المشاهدات:	45
الحجـــم:	2.7 كيلوبايت
الرقم:	427546
    عندما تقوم بتعريف دالة ولا تعود بقيمة الداله بإستخدام return
    جميع الدوال المعرفه يجب أن تعود بقيمة معينه ما عدا الداله من نوع void
    كود PHP:
    int calculate()
    {
     
    int A=10int B=20;
     
    int result=A*B;
     Print(
    result);

    الصحيح
    كود PHP:
    void calculate()
    {
     
    int A=10int B=20;
     
    int result=A*B;
     Print(
    result);

    3.4- تعريف متغير array parameter للداله arrays passed by reference only
    اضغط على الصورة لعرض أكبر

الاســـم:	5.png
المشاهدات:	48
الحجـــم:	2.7 كيلوبايت
الرقم:	427548
    عند تعريف المتغير يجب أن يمرر بإستخدام العنوان في ذاكرة الجهاز أو address
    كود PHP:
    void calculate(int array[])
    {
     
    int result=array[0]*array[1];
     Print(
    result);

    الصحيح
    يجب إستخدام & قبل تعريف المصفوفه
    كود PHP:
    void calculate(int &array[])
    {
     
    int result=array[0]*array[1];
     Print(
    result);

    3.5- تعريف متغير وعدم إستخدامه variable ... not used
    اضغط على الصورة لعرض أكبر

الاســـم:	6.png
المشاهدات:	44
الحجـــم:	2.5 كيلوبايت
الرقم:	427550
    يظهر عند تعريف أي متغير وعدم إستخدامه داخل الكود
    كود PHP:
    int var; 
    الصحيح
    قم بحذف المتغيرات الغير مستخدمه لأنها تأخذ مساحه من الميموري بدون فائده


    هذا ما أتذكره إلى الآن و الموضوع سيظل محدث دائما بأهم الأخطاء التي تظهر حتى يكون مرجع دائم ومتجدد بإذن الله

  2. #2
    الصورة الرمزية صلاح الدين الفوركساوى
    صلاح الدين الفوركساوى غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2012
    الإقامة
    مصر
    المشاركات
    740

    افتراضي

    جزاك الله تعالى خيرا مشرفنا الحبيب اسامه

    أطال الله فى عمرك

  3. #3
    الصورة الرمزية shivaa
    shivaa غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jun 2016
    الإقامة
    مصر
    المشاركات
    113

    افتراضي

    جزاك الله خيراااااااااااااااااااا

  4. #4
    الصورة الرمزية larcen65
    larcen65 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2020
    الإقامة
    ألمانيا
    المشاركات
    80

    افتراضي

    السلام عليكم أخي العزيز
    كيف أصح هذه الأخطاء المرافقة
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة Error.png‏  


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17