تعليم لغة mql4 4

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

  • تعليم لغة mql4 4

    الحلقات والقرارات (جزء 1) في لغة MQL4

    اي برنامج تتم كتابته بلغة MQL4 (مؤشر او اكسبرت او اسكربت) او اي لغة برمجية أخرى يقوم بتنفيذ اوامره وشروطه بطريقة تسلسلية تنازلية ( من القمة الى القاع) .

    بمعنى أخر ينفذ اوامره جملة statment بعد أخرى (أذكركم هنا ان الجملة statment تتكون من مجموعة تعبيرات expressions التي تتكون بالتالي من اتحاد المعرفات identefires والعمليات operations (راجع الدرس السابق))

    يمكن تعريف الجملة statment ايضا بأنها سطر من الأكواد يخبر الكومبيوتر ان ينفذ امرا ما (اظهار اشارة بيع مثلا)

    مثال :


    كود PHP:
    Print("Hello World");

    return
    0
    ;

    الفاصلة المنقوطة في نهاية الجملة statment هامة للغاية في قواعد هذه اللغة , ونسيانها مصدر 90% من الأخطاء البرمجية.
    اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
    وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
    منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
    رحمتك وجنتك

  • #2
    رد: تعليم لغة mql4 4

    عملية التحكم في تنفيذ الأوامر تسلسليا من القمة الى القاع ليست هي الحالة الوحيدة بل هناك حالتين أخريين :

    هما الحلقات Loops والقرارات Decisions.

    البرامج التي نكتبها مثل قراراتنا البشرية تتغير تبعا لتغير الظروف من حولنا , في حالة البرامج عملية التحكم المتسلسل لتنفيذ الأوامر يمكن ان تقفز من جزء الى جزء أخر داخل البرنامج .

    الجمل البرمجية statments التي تتحكم بهذه القفزات (تنقلنا من امر الى أخر في البرنامج) تسمى بالجمل المسيطرة control statments .

    وتتركب من الحلقات loops والقرارات decisions
    اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
    وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
    منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
    رحمتك وجنتك

    تعليق


    • #3
      رد: تعليم لغة mql4 4

      الحلقات Loops
      ----------------------

      الحلقات loops تقوم بتكرار جزء ما من البرنامج لعدد محدد من المرات.

      وهذا التكرار يستمر طالما الشروط صحيحة true , وستنتهي الحلقة او التكرار مع اول مخالفة للشروط (احد الشروط او كلهم اصبحوا يعطوا نتيجة خاطئة false)

      متى انتهت الحلقة (التكرار) ستقوم بنقل التحكم في تنفيذ الأوامر الى الجملة التالية لتنفيذ امر أخر في البرنامج او الحلقة .. وهكذا.
      اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
      وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
      منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
      رحمتك وجنتك

      تعليق


      • #4
        رد: تعليم لغة mql4 4

        هناك نوعين من الحلقات في لغة MQL4 :

        1- الحلقة ( for ) :

        الحلقة ( for ) تعتبر اسهل انواع الحلقات وذلك لأن جميع عناصرها مجتمعة في مكان واحد (كما سنرى) , كما تقوم بتنفيذ قسم معين من البرنامج لعدد معروف ومحدد من المرات.

        دعونا نأخذ مثالا يوضح لنا هذا الكلام:


        كود PHP:
        int j;


        for(j=0; j<15; j++)

        Print(j);


        كيف تعمل هذه الحلقة في هذا المثال ؟

        السطر الأول قمنا بتعريف متغير ما واطلقنا عليه اسم ( j ) .... (راجع درس القواعد syntax)

        السطر الثاني يحتوي على جملة ( for ) والتي تتكون من الكلمة المحجوزة ( for ) و قوسين ( ) يحتويان بداخلهما على ثلاثة تعبيرات expressions مفصولين عن بعضهما البعض بالفاصلة المنقوطة ( ; )


        كود PHP:
        for(j=0; j<15; j++)



        هذه التعبيرات expressions الثلاثة هي : تعبير ابتداء الحلقة , تعبير اختبار قيمة المتغير , وتعبير زيادة قيمة المتغير .

        j=0 ....... تعبير ابتداء الحلقة
        j>15 ........ تعبير اختبار قيمة المتغير
        ++j ....... تعبير زيادة قيمة المتغير

        جسد الحلقة هو الكود الذي سينفذ الشروط اعلاها لعدد محدد من المرات في هذه الحلقة وهذا الكود هو :


        كود PHP:
        Print(j);



        وفي مثالنا هذا العدد المحدد لتنفيذ الحلقة هو 15 مرة.
        اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
        وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
        منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
        رحمتك وجنتك

        تعليق


        • #5
          رد: تعليم لغة mql4 4

          ملاحظة : الجملة ( for ) لا تنتهي بفاصلة منقوطة وذلك لأنها تكون مع جسد الحلقة Print(j); جملة statment كاملة .

          سنتكلم بشئ من التفصيل عن هذه التعبيرات الثلاثة :

          * تعبير ابتداء الحلقة The initialization expression :

          هذا التعبير ينفذ مرة واحدة فقط مع بداية تشغيل الحلقة ( البرنامج ) , ويعطى قيمة افتراضية للبدء ( وهي الصفر في مثالنا هنا j=0 )

          يمكننا اعداد متغير الحلقة خارج (قبل) الحلقة نفسها كما في مثالنا :


          كود PHP:
          int j;

          او يمكننا ايضا ان اعداد المتغير داخل الحلقة نفسها كما في هذا المثال:


          كود PHP:
          for(int j=0; j<15; j++)

          السطران السابقان من الأكواد متساويان , لكن الغرض من كل منهم قد يختلف بعض الشئ ( سنعرف تفاصيل المتغيرات واهدافها في درس المتغيرات ان شاء الله )

          ببساطة في حالة الأعداد الخارجي للمتغير يجعل كل سطور الحلقة تتعامل معه , اما في حالة الأعداد الداخلي فيجعل سطر جملة ( for ) فقط التي تتعامل معه .

          يمكننا ايضا عمل تعبيرين ابتدائيين للحلقة (مع متغيرين) والفصل بينهم بفاصلة ( , ) فقط .

          مثال:


          كود PHP:
          int i;

          int j
          ;

          for(
          i=0 ,j=0;i<15;i
          ++)

          Print(
          i
          );
          اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
          وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
          منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
          رحمتك وجنتك

          تعليق


          • #6
            رد: تعليم لغة mql4 4

            تعبير الأختبار The Test expression:

            تعبير الأختبار دائما يستخدم تعبيرات مقارنة باستخدام عمليات المقارنة ( رجاء راجع عمليات المقارنة في الدرس السابق )

            هذا التعبير (في مثالنا هنا ( j>15 ) يقوم بعقد مقارنة بصفة مستمرة بين قيمة j ورقم 15 طوال فترة تشغيل الحلقة , ووظيفتها تحديد نتيجة المقارنة اما صحيحة true (اي ان قيمة j فعلا اصغر من 15) فيستمر جسد الحلقة ويقوم بتنفيذ الأمر ( print j) , او خاطئة false ( اي ان قيمة j ليست اصغر من 15 ) وهنا تتوقف الحلقة عن العمل وينتقل البرنامج الى الجملة البرمجية التالية . (سأشرح دورة حياة البرنامج في درس لاحق ان شاء الله بتفصيل افضل , هنا فقط ارجو الأنتباه لوظيفة كل جزء ومراجعته)
            اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
            وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
            منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
            رحمتك وجنتك

            تعليق


            • #7
              رد: تعليم لغة mql4 4

              تعبير الزيادة The Increment expression:

              تعبير الزيادة يقوم بتغيير قيمة متغير الحلقة ( في مثالنا هنا j عن طريق ++j ) بزيادة قيمته 1 .

              هذا التعبير ينفذ كأخر خطوة من خطوات الحلقة الثلاثة ( ابتداء الحلقة واختبارها وتنفيذ جسد الحلقة ).

              وكما نستطيع ان نستخدم اكثر من تعبير ابتداء الحلقة (واكثر من متغير) يمكننا ايضا ان نستخدم اكثر من تعبير زيادة (او نقصان) والفصل بينهم بالفاصلة ( , ) .

              مثال:


              كود PHP:
              int i;


              int j;

              for(i=0 ,j=0;i<15,i<;i++,j++)

              Print(i);


              لكن لا نستطيع ان نستخدم اكثر من تعبير اختبار واحد فقط في الجملة .
              اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
              وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
              منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
              رحمتك وجنتك

              تعليق


              • #8
                رد: تعليم لغة mql4 4

                ملاحظة أخرى لتعبير الزيادة وهو اننا ممكن ان نستخدم تعبير نقصان ايضا كما في هذا المثال :


                كود PHP:
                int i;


                for(i=15;i>0,i<;i--)

                Print(i);


                في هذا المثال سيبدأ المتغير i بأخذ القيمة 15 الأفتراضية ومن ثم يبدأ الحلقة , وفي مراحل التنفيذ كل مرة ينقص القيمة بمقدار 1 ومن ثم يعمل لها اختبار i>0 ... وهكذا دواليك

                في النهاية سيخرج لنا البرنامج (الحلقة) هذه النتائج : 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 .
                اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
                وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
                منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
                رحمتك وجنتك

                تعليق


                • #9
                  رد: تعليم لغة mql4 4

                  جسد الحلقة Loop body:

                  يمكننا استخدام عدة جمل statments في جسد الحلقة لأخراج نتائج الحلقة .

                  في مثالنا السابق استخدمنا جملة واحدة فقط ( print j ) في جسد الحلقة , ويمكننا اضافة اكثر من جملة عليها .

                  عند اضافة اكثر من جملة في جسد الحلقة نحددهم بهذه الأقوس { } .

                  مثال:


                  كود PHP:
                  for(int i=1;i<=15;i++)


                  {

                  Print(i);

                  PlaySound("*****.wav");

                  }


                  في هذا المثال , جسد الحلقة يحتوي على جملتين برمجيتين , البرنامج سينفذ الأولى اولا وبعدها ينفذ الثانية في كل مرة.

                  ولا تنسى ان تضع الفاصلة المنقوطة ( ; ) في نهاية كل جملة .
                  اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
                  وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
                  منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
                  رحمتك وجنتك

                  تعليق


                  • #10
                    رد: تعليم لغة mql4 4

                    جملة الكسر The Break statment :

                    هي كلمة محجوزة من كلمات لغة MQL4 وظيفتها انهاء الحلقة عند قيمة محددة .

                    يتم وضعها كجملة تنفيذ في جسد الحلقة لتنهي الحلقة عند وصول المتغير لقيمة محددة ونقل البرنامج الى حلقة اخرى او جزء اخر .

                    مثال توضيحي :


                    كود PHP:
                    for(int i=0;i<15;i++)


                    {

                    if((i==10)

                    break;

                    Print(i);

                    }


                    في هذا المثال سيتم تنفيذ الحلقة حتى يصل المتغير i الى القيمة 10 , وبعدها تقوم الكلمة المحجوزة ( break ) بانهاء الحلقة.

                    في النهاية سينتج البرنامج هذه النتائج : 0 1 2 3 4 5 6 7 8 9.
                    اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
                    وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
                    منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
                    رحمتك وجنتك

                    تعليق


                    • #11
                      رد: تعليم لغة mql4 4

                      جملة الأستمرار The Continue Statement:

                      جملة الكسر أخرجتنا من الحلقة , ولكن جملة الأستمرار هذه ستعيدنا الى الحلقة في حالة خروجنا منها .

                      مثال توضيحي:


                      كود PHP:
                      for(int i=0;i<15; i++)

                      {

                      if(
                      i==10
                      ) continue;

                      Print(
                      i
                      )

                      }

                      في هذا المثال سيتم تنفيذ الحلقة حتى تصل قيمة المتغير i الى 10 وبعدها يجد الكلمة المحجوزة ( continue ) لتعيدنا ثانية الى الحلقة دون اخراج النتيجة ( 10 ) من الحلقة .

                      وتخرج النتائج هكذا من البرنامج : 0 1 2 3 4 5 6 7 9 11 12 13 14 ( لاحظ عدم وجود النتيجة 10 ).
                      اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
                      وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
                      منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
                      رحمتك وجنتك

                      تعليق


                      • #12
                        رد: تعليم لغة mql4 4

                        2- الحلقة ( while ) :

                        الحلقة ( for ) نستخدمها عادة في حالات التكرار لمرات انت تعرف عددها وتبرمج على اساسها , حسنا ماذا سيحدث لو لم تعرف عدد مرات التكرار التي تود استخدامها ( قد يستمر التكرار الى الأبد ) .

                        لهذا السبب ظهرت الحلقة ( while ) .

                        الحلقة ( while ) تشبه الحلقة ( for ) في تعبير الإختبار فقط , ولكنها لا تملك تعبير ابتداء الحلقة وتعبير الزيادة .

                        دعونا نرى مثالا توضيحيا :


                        كود PHP:
                        int i=0;

                        while(
                        i<15
                        )

                        {

                        Print(
                        i
                        );

                        i
                        ++;

                        }

                        في هذا المثال ستلاحظ الأتي :

                        a- متغير الحلقة تم اعداده declaration وابتداؤه قبل الدخول في الحلقة , لا يمكنك ان تعد او تبدأ المتغير داخل الحلقة بين القواس مثل الحلقة ( for ).

                        b- ال ( ++i ) ليست تعبير زيادة كما تظن , وانما يجب على جسد الحلقة ان يحتوي على اي جملة يمكنها من تغيير قيمة المتغير والا لن تنتهي ابدا ( مثلا لو لم تكن ++i موجودة سيقوم البرنامج بأطلاق النتيجة صفر الى ما لا نهاية )

                        * كيف يعمل المثال السابق ؟

                        جملة while تحتوي فقط على تعبير الأختبار فقط , وستظل تختبر الشرط كل مرة بدخول الحلقة , لو كانت نتيجة الأختبار ( المقارنة ) صحيحة true ستستمر الحلقة , وان كانت خاطئة ستنتهي الحلقة ويتم انتقال الى جملة لخرى في البرنامج .. وهكذا .

                        في مثالنا ستسمر الحلقة بتنفيذ اوامرها حتى تصل الى 16 , ففي هذه الحالة i<15 تكون خاطئة false وتنتهي الحلقة .

                        وكما اخبرتكم بتشابه الحلقتين هناك ايضا اوجه شبه اخرى مثل :

                        1- نستطيع ان نستخدم جملة الكسر وجملة الأستمرار في كليهما .

                        2- يمكنك وضع جملة واحدة او اكثر في جسد الحلقتين , وفي حالة وضع اكثر من واحدة يجب وضعهم داخل الأقواس { } .
                        اللهم انك سلطت علينا عدوا عليما بعيوبنا - يرانا هو
                        وقبيله من حيث لانراهم -- اللهم آيسه منا كما آيستـه من رحمتك وقنطه
                        منا كما قنطـته من عـفوك -- وباعــد بيننا وبينه كما باعـدت بينه وبين
                        رحمتك وجنتك

                        تعليق


                        • #13
                          رد: تعليم لغة mql4 4

                          أخي هناك الكثير من الأخطاء البرمجية فيما ذكرته يستحيل نقل لغة mq4 دون فهمها !!
                          راجع المشاركات السابقة

                          تعليق

                          يعمل...
                          X