الأسئلة البرمجية MT5 & MT4

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

  • الأسئلة البرمجية MT5 & MT4

    الأسئلة البرمجية في مؤشرات واكسبرتات التداول
    mt5 & mt4


    ​السلام عليكم ورحمة الله وبركاته اعضاء وزوار موقع المضارب العربي

    هذا الموضوع سيكون مخصصا فقط للأسئلة البرمجية فيما يتعلق بمنصة الميتاتريدر النسخة الرابعة والنسخة الخامسة

    ويشمل الاسئلة الخاصة اما بالاكسبيرتات او المؤشرات
    التعديل الأخير تم بواسطة CASHU; 2023 - 07 - 21, 10:02.

  • #2
    موفق أخي الكريم
    وجزاك الله خيرا على ما تقدمه من مجهودات مثمرة بهذا الصدد

    تعليق


    • #3
      المشاركة الأصلية بواسطة zooz1o مشاهدة المشاركة
      موفق أخي الكريم
      وجزاك الله خيرا على ما تقدمه من مجهودات مثمرة بهذا الصدد
      واياكم اخي الكريم

      تعليق


      • #4
        موفق اخى الكريم
        وكل الشكر لك على هذا المجهود لهذا المنتدى الكبير
        ان شاء الله متابع معكم بدأت توا للتعلم فى البرمجة و سامحنا راح نرهقك معنا بالاسئلة :)

        تعليق


        • #5
          المشاركة الأصلية بواسطة Daily Trader مشاهدة المشاركة
          موفق اخى الكريم
          وكل الشكر لك على هذا المجهود لهذا المنتدى الكبير
          ان شاء الله متابع معكم بدأت توا للتعلم فى البرمجة و سامحنا راح نرهقك معنا بالاسئلة :)
          على الرحب والسعة اخي الكريم

          كلما كان السؤال واضحا عن طريق الشرح والصور كلما كانت الاجابة اسهل واوضح

          هنا تجد قائمة بالدروس المخصصة لتعليم برمجة ال mql4:

          بسم الله الرحمن الرحيم والصلاة والسلام على سيدنا محمد أهلا وسهلا بكم أيها الاخوة الاكارم تحت رعاية موقع المضارب العربي سيتم ان شاء الله متابعة سلسلة دروس ( تعلم البرمجة باسهل طريقة ) مرفق روابط السلسلة كاملة , فقط قم بالنقر على الدرس و ابدء بالتعلم برمجة المؤشرات و الاكسبيرتات مهم و من المهم تعلمه الدرس الأول (https://www


          تعليق


          • #6
            السلام عليكم أخي ترك
            فيه تحذير في اكسبيرت الميتاتريدر 4:
            return value of 'OrderSelect' should be checked

            وهذا هو سطر الكود:
            كود HTML:
            OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
            عندما اجعله هكذا ايضا نفس التحذير:
            كود HTML:
            OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); return(0);
            ​
            فما هي القيمة التي من المفترض أن يعود إليها؟

            تعليق


            • #7
              المشاركة الأصلية بواسطة zooz1o مشاهدة المشاركة
              السلام عليكم أخي ترك
              فيه تحذير في اكسبيرت الميتاتريدر 4:
              return value of 'OrderSelect' should be checked

              وهذا هو سطر الكود:
              كود HTML:
              OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
              عندما اجعله هكذا ايضا نفس التحذير:
              كود HTML:
              OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); return(0);
              ​
              فما هي القيمة التي من المفترض أن يعود إليها؟
              ببساطة هوا يقول لك ( لازم تتحقق من القيمة الراجعة لهذا الامر )

              اذا اردت فقط التخلص من التحذير أكتب التالي:

              bool ddddd = OrderSelect

              ثم اكمل العبارة

              تعليق


              • #8
                المشاركة الأصلية بواسطة Turkm مشاهدة المشاركة

                ببساطة هوا يقول لك ( لازم تتحقق من القيمة الراجعة لهذا الامر )

                اذا اردت فقط التخلص من التحذير أكتب التالي:

                bool ddddd = OrderSelect

                ثم اكمل العبارة
                شكراً أخي فعلاً تم حل المشكلة
                سؤال آخر:

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

الإسم:	kemm.png 
مشاهدات:	191 
الحجم:	2.1 كيلوبايت 
الهوية:	950115؟

                تعليق


                • #9
                  اضغط على الصورة لعرض أكبر. 

الإسم:	moaas.png 
مشاهدات:	181 
الحجم:	3.0 كيلوبايت 
الهوية:	950127


                  قومت بصنع هذا المؤشر ولكن أريد أن يدخل الإكسبيرت شراء
                  عندما تكون الاشارة للشمعة 0 هي زرقاء وما قبلها حمراء وما قبلها زرقاء وما قبلها حمراء
                  فكيف استدعي هذه الاشارات واحدة تلو الأخرى؟

                  تعليق


                  • #10
                    المشاركة الأصلية بواسطة zooz1o مشاهدة المشاركة
                    اضغط على الصورة لعرض أكبر.   الإسم:	moaas.png  مشاهدات:	0  الحجم:	3.0 كيلوبايت  الهوية:	950127



                    قومت بصنع هذا المؤشر ولكن أريد أن يدخل الإكسبيرت شراء
                    عندما تكون الاشارة للشمعة 0 هي زرقاء وما قبلها حمراء وما قبلها زرقاء وما قبلها حمراء
                    فكيف استدعي هذه الاشارات واحدة تلو الأخرى؟
                    باستخدام مؤشر الزجزاج ولعمل ذلك استخدم هذه الوظيفة:

                    كود PHP:
                    double ZagZag(int Q)
                    {
                    int First;
                    for(int i=0;i<Bars;i++)
                    {
                    double zag=iCustom(NULL,0,"ZigZag",12,5,3,0,i);
                    if(zag!=0)First++;
                    if(First==1&&Q==0&&zag!=0){return(zag);}
                    if(First==2&&Q==1&&zag!=0){return(zag);}
                    if(First==3&&Q==2&&zag!=0){return(zag);}
                    if(First==4&&Q==3&&zag!=0){return(zag);}
                    if(First==5&&Q==4&&zag!=0){return(zag);}
                    if(First==6&&Q==5&&zag!=0){return(zag);}
                    
                    }
                    return(0);
                    }

                    بالتوفيق

                    تعليق


                    • #11
                      المشاركة الأصلية بواسطة Turkm مشاهدة المشاركة

                      باستخدام مؤشر الزجزاج ولعمل ذلك استخدم هذه الوظيفة:

                      كود PHP:
                      double ZagZag(int Q)
                      {
                      int First;
                      for(int i=0;i<Bars;i++)
                      {
                      double zag=iCustom(NULL,0,"ZigZag",12,5,3,0,i);
                      if(zag!=0)First++;
                      if(First==1&&Q==0&&zag!=0){return(zag);}
                      if(First==2&&Q==1&&zag!=0){return(zag);}
                      if(First==3&&Q==2&&zag!=0){return(zag);}
                      if(First==4&&Q==3&&zag!=0){return(zag);}
                      if(First==5&&Q==4&&zag!=0){return(zag);}
                      if(First==6&&Q==5&&zag!=0){return(zag);}
                      
                      }
                      return(0);
                      }

                      بالتوفيق
                      ولو سأعتمد على المؤشر الذي صنعته سيكون الكود هكذا:

                      كود HTML:
                      double ZagZag(int Q)
                      {
                      int First;
                      for(int i=0;i<Bars;i++)
                      {
                      double zag=iCustom(NULL,0,"My_indicator");
                      if(zag!=0)First++;
                      if(First==1&&Q==0&&zag!=0){return(zag);}
                      if(First==2&&Q==1&&zag!=0){return(zag);}
                      if(First==3&&Q==2&&zag!=0){return(zag);}
                      if(First==4&&Q==3&&zag!=0){return(zag);}
                      if(First==5&&Q==4&&zag!=0){return(zag);}
                      if(First==6&&Q==5&&zag!=0){return(zag);}
                      
                      }
                      return(0);
                      }​  ​

                      وهذا السطر معناه الاشارة السادسة أليس كذلك؟
                      كود HTML:
                      if(First==6&&Q==5&&zag!=0){return(zag);}
                      وكيف أكتب الشرط هذا:
                      عندما تكون قيمة الاشارة السادسة تساوي قيمة الاشارة الخامسة على سبيل المثال؟

                      تعليق


                      • #12
                        يعني مثلاً المؤشر الذي صنعته يعطي اشارات بيع وشراء
                        وفي هذه الصورة أريد أن انشئ بافر جديد يكون الشرط فيه أن تكون قيمة الاشارة للشمعة 0 أقل من قيمة الاشارة الزرقاء السابقة​
                        اضغط على الصورة لعرض أكبر. 

الإسم:	mql5a.png 
مشاهدات:	210 
الحجم:	3.6 كيلوبايت 
الهوية:	950131

                        تعليق


                        • #13
                          المشاركة الأصلية بواسطة zooz1o مشاهدة المشاركة

                          ولو سأعتمد على المؤشر الذي صنعته سيكون الكود هكذا:

                          كود HTML:
                          double ZagZag(int Q)
                          {
                          int First;
                          for(int i=0;i<Bars;i++)
                          {
                          double zag=iCustom(NULL,0,"My_indicator");
                          if(zag!=0)First++;
                          if(First==1&&Q==0&&zag!=0){return(zag);}
                          if(First==2&&Q==1&&zag!=0){return(zag);}
                          if(First==3&&Q==2&&zag!=0){return(zag);}
                          if(First==4&&Q==3&&zag!=0){return(zag);}
                          if(First==5&&Q==4&&zag!=0){return(zag);}
                          if(First==6&&Q==5&&zag!=0){return(zag);}
                          
                          }
                          return(0);
                          }​ ​

                          وهذا السطر معناه الاشارة السادسة أليس كذلك؟
                          كود HTML:
                          if(First==6&&Q==5&&zag!=0){return(zag);}
                          وكيف أكتب الشرط هذا:
                          عندما تكون قيمة الاشارة السادسة تساوي قيمة الاشارة الخامسة على سبيل المثال؟
                          هذا شرط غير منطقي

                          يعني انت بتقول عندما يكون القاع السادس يساوي القمة الخامسة
                          ( كما ترى الترتيب مهم فلو كان مؤشر ازجزاج يكون قاع القريب من السعر فهذا رقمه صفر ثم ياتي بعده قمة ورقمها واحد ثم بعد القمة قاع ورقمه اثنين وهكذا )

                          ولكن لو اردت المقارنة مثلا هل القمة الرابعة اكبر من القمة السادسة

                          كود PHP:
                          if (ZagZag(3) > ZagZag(5)) 
                          

                          تعليق


                          • #14
                            نعم فهمت جزاء الله خيراً
                            سأحاول تطبيقها على المؤشر الذي صنعته الآن

                            تعليق


                            • #15
                              كود HTML:
                              #property indicator_chart_window
                              #property indicator_buffers 2
                              #property indicator_plots 2
                              
                              #property indicator_type1 DRAW_ARROW
                              #property indicator_width1 3
                              #property indicator_color1 0xFF901E
                              #property indicator_label1 "Buy"
                              
                              #property indicator_type2 DRAW_ARROW
                              #property indicator_width2 3
                              #property indicator_color2 0xFF00FF
                              #property indicator_label2 "Sell"
                              
                              //--- indicator buffers
                              double Buffer1[];
                              double Buffer2[];
                              
                              datetime time_alert; //used when sending alert
                              input bool Send_Email = true;
                              double myPoint; //initialized in OnInit
                              double Open[];
                              double Close[];
                              int RSI_handle;
                              double RSI[];
                              double Low[];
                              double High[];
                              
                              void myAlert(string type, string message)
                                {
                                 if(type == "print")
                                    Print(message);
                                 else if(type == "error")
                                   {
                                    Print(type+" | TEST @ "+Symbol()+","+IntegerToString(Period())+" | "+message);
                                   }
                                 else if(type == "order")
                                   {
                                   }
                                 else if(type == "modify")
                                   {
                                   }
                                 else if(type == "indicator")
                                   {
                                    if(Send_Email) SendMail("TEST", type+" | TEST @ "+Symbol()+","+IntegerToString(Period())+" | "+message);
                                   }
                                }
                              //+------------------------------------------------------------------+
                              //| Custom indicator initialization function                         |
                              //+------------------------------------------------------------------+
                              int OnInit()
                                {  
                                 SetIndexBuffer(0, Buffer1);
                                 PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
                                 PlotIndexSetInteger(0, PLOT_ARROW, 161);
                                 SetIndexBuffer(1, Buffer2);
                                 PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, EMPTY_VALUE);
                                 PlotIndexSetInteger(1, PLOT_ARROW, 161);
                                 //initialize myPoint
                                 myPoint = Point();
                                 if(Digits() == 5 || Digits() == 3)
                                   {
                                    myPoint *= 10;
                                   }
                                 RSI_handle = iRSI(NULL, PERIOD_CURRENT, 11, PRICE_CLOSE);
                                 if(RSI_handle < 0)
                                   {
                                    Print("The creation of iRSI has failed: RSI_handle=", INVALID_HANDLE);
                                    Print("Runtime error = ", GetLastError());
                                    return(INIT_FAILED);
                                   }
                                  
                                 return(INIT_SUCCEEDED);
                                }
                              
                              //+------------------------------------------------------------------+
                              //| Custom indicator iteration function                              |
                              //+------------------------------------------------------------------+
                              int    Account_Number=0;
                              string Expire_Date="2128.09.28 02:22";
                              
                              
                              int OnCalculate(const int rates_total,
                                              const int prev_calculated,
                                              const datetime& time[],
                                              const double& open[],
                                              const double& high[],
                                              const double& low[],
                                              const double& close[],
                                              const long& tick_volume[],
                                              const long& volume[],
                                              const int& spread[])
                                {
                                 int limit = rates_total - prev_calculated;
                                
                                 //--- counting from 0 to rates_total
                                 ArraySetAsSeries(Buffer1, true);
                                 ArraySetAsSeries(Buffer2, true);
                                 //--- initial zero
                                 if(prev_calculated < 1)
                                   {
                                    ArrayInitialize(Buffer1, EMPTY_VALUE);
                                    ArrayInitialize(Buffer2, EMPTY_VALUE);
                                   }
                                 else
                                    limit++;
                                 datetime Time[];
                                
                                 if(CopyOpen(Symbol(), PERIOD_CURRENT, 0, rates_total, Open) <= 0) return(rates_total);
                                 ArraySetAsSeries(Open, true);
                                 if(CopyClose(Symbol(), PERIOD_CURRENT, 0, rates_total, Close) <= 0) return(rates_total);
                                 ArraySetAsSeries(Close, true);
                                    if(BarsCalculated(RSI_handle) <= 0)
                                    return(0);
                                 if(CopyBuffer(RSI_handle, 0, 0, rates_total, RSI) <= 0) return(rates_total);
                                 ArraySetAsSeries(RSI, true);
                                 if(CopyLow(Symbol(), PERIOD_CURRENT, 0, rates_total, Low) <= 0) return(rates_total);
                                 ArraySetAsSeries(Low, true);
                                 if(CopyHigh(Symbol(), PERIOD_CURRENT, 0, rates_total, High) <= 0) return(rates_total);
                                 ArraySetAsSeries(High, true);
                                 if(CopyTime(Symbol(), Period(), 0, rates_total, Time) <= 0) return(rates_total);
                                 ArraySetAsSeries(Time, true);
                                 //--- main loop
                                 for(int i = limit-1; i >= 0; i--)
                                   {
                                    if (i >= MathMin(200000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation  
                                    
                                    //Indicator Buffer 1
                                    if(Low[1+i]>Low[5+i]
                                    && Low[2+i]>Low[5+i]
                                    && Low[3+i]>Low[5+i]
                                    && Low[4+i]>Low[5+i]
                                    && Low[6+i]>Low[5+i]
                                    && Low[7+i]>Low[5+i]
                                    && Low[8+i]>Low[5+i]
                                    && Low[9+i]>Low[5+i]
                                    )
                                      {
                                       Buffer1[5+i] = Low[5+i]; //Set indicator value at Candlestick Low
                                       if(i == 1 && Time[1] != time_alert) myAlert("indicator", "Buy"); //Alert on next bar open
                                       time_alert = Time[1];
                                      }
                                    else
                                      {
                                       Buffer1[i] = EMPTY_VALUE;
                                      }
                                    //Indicator Buffer 2
                                    if(High[1+i]<High[5+i]
                                    && High[2+i]<High[5+i]
                                    && High[3+i]<High[5+i]
                                    && High[4+i]<High[5+i]
                                    && High[6+i]<High[5+i]
                                    && High[7+i]<High[5+i]
                                    && High[8+i]<High[5+i]
                                    && High[9+i]<High[5+i]
                                    )
                                      {
                                       Buffer2[5+i] = High[5+i]; //Set indicator value at Candlestick High
                                       if(i == 1 && Time[1] != time_alert) myAlert("indicator", "Sell"); //Alert on next bar open
                                       time_alert = Time[1];
                                      }
                                    else
                                      {
                                       Buffer2[i] = EMPTY_VALUE;
                                      }
                                   }
                                 return(rates_total);
                                }
                              //+------------------------------------------------------------------+​
                              هذا كود المؤشر الأصلي الذي أريد التطبيق عليه وأيضاً أرفقته في ملف

                              والقادم هو كود المؤشر الأحدث بعدما قومت بتغيير الدالة بداخله لتتوافق مع ميتاتريدر 5 وأصبحت هكذا:

                              كود HTML:
                              double ZagZag(int Q)
                              {
                              int First;
                              int bars=Bars(_Symbol,_Period);
                              
                              for(int v=0;v<bars;v++)
                              {
                              double zag=iCustom(NULL,0,"test1124",0,v);
                              if(zag!=0)First++;
                              if(First==1&&Q==0&&zag!=0){return(zag);}
                              if(First==2&&Q==1&&zag!=0){return(zag);}
                              if(First==3&&Q==2&&zag!=0){return(zag);}
                              if(First==4&&Q==3&&zag!=0){return(zag);}
                              if(First==5&&Q==4&&zag!=0){return(zag);}
                              if(First==6&&Q==5&&zag!=0){return(zag);}
                              
                              }
                              return(0);
                              }​
                              لكن عندما وضعت الشرط هذا:
                              كود HTML:
                              if (ZagZag(3) > ZagZag(5))
                              في المؤشر الجديد لم تظهر أي اشارات!
                              الملفات المرفقة

                              تعليق

                              يعمل...
                              X