النتائج 1 إلى 12 من 12
  1. #1
    الصورة الرمزية ZoozFX
    ZoozFX غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2021
    الإقامة
    مصر
    المشاركات
    26

    Thumbs up مشكلة في صنع loop في mql5 سهلة (للخبراء)

    السلام عليكم

    بصنع مؤشر بلغة mql5 حاليا وواجهتني مشكلة في صنع Loop

    الفكرة باختصار اني عايز احط 40 شرط في المؤشر وهم:
    1- مستوى الديماركر في شمعة رقم 0 اكبر من 20
    2- مستوى الديماركر في شمعة رقم 1 اكبر من 20
    3- مستوى الديماركر في شمعة رقم 2 اكبر من 20

    .... وهكذا لحد شمعة رقم 40

    فبدلا من كتابة 40 سطر؛ اريد اختزال هذه الشروط كلها في شرط واحد فقط عن طريق الLoop

    الكود المرفق صحيح لكن لما بشغله بيحققلي الشرط الاول فقط بدون باقي الشروط

    حد عنده فكرة الكود ده يتصحح ازاي؟


    كود PHP:
          //Indicator Buffer 1
    bool conditionMet false;
    for (
    int j 0<= 40j++) {
          if(
    DEM[j+i] > 20

          

    {
    conditionMet true;
    // Break out of the loop.
    break;
    }
    }
    if (
    conditionMet) {
    Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
             
    if(== && Time[1] != time_alertmyAlert("indicator""Buy"); //Alert on next bar open
             
    time_alert Time[1];
            }
          else
            {
             
    Buffer1[i] = EMPTY_VALUE;
            } 

  2. #2
    الصورة الرمزية ZoozFX
    ZoozFX غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2021
    الإقامة
    مصر
    المشاركات
    26

    افتراضي

    أين خبراء المنتدى للمساعدة؟

  3. #3
    الصورة الرمزية ZoozFX
    ZoozFX غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2021
    الإقامة
    مصر
    المشاركات
    26

    افتراضي

    المؤشر المرفق به شروط عديدة هل بالامكان تعديله واختصار هذه الشروط في شرط واحد من خلال Loop؟
    الملفات المرفقة الملفات المرفقة
    • نوع الملف: mq4 Loop.mq4‏ (5.5 كيلوبايت, المشاهدات 3)

  4. #4
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة ZoozFX مشاهدة المشاركة
    أين خبراء المنتدى للمساعدة؟
    انت السبب في انه ياخذ اول قيمة تحقق الشرط ثم يكسر اللوب ب break

  5. #5
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    The DeMax(i) is calculated:
    If high(i) > high(i-1) , then DeMax(i) = high(i)-high(i-1), otherwise DeMax(i) = 0


    The DeMin(i) is calculated:
    If low(i) < low(i-1), then DeMin(i) = low(i-1)-low(i), otherwise DeMin(i) = 0


    The value of the DeMarker is calculated as:
    DMark(i) = SMA(DeMax, N)/(SMA(DeMax, N)+SMA(DeMin, N))


    Where:
    SMA - Simple Moving Average;
    N - the number of periods used in the calculation.
    ==
    مراجعة معادلات هذا المؤشر
    يشبه ال rsi في رسمته

  6. #6
    الصورة الرمزية ZoozFX
    ZoozFX غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2021
    الإقامة
    مصر
    المشاركات
    26

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة سلمان_العتيبي مشاهدة المشاركة
    انت السبب في انه ياخذ اول قيمة تحقق الشرط ثم يكسر اللوب ب break
    كيف الغي كسر اللوب في هذا المؤشر المرفق؟
    هل يمكنك تعديل هذا الجزء من اجلي؟

  7. #7
    الصورة الرمزية ZoozFX
    ZoozFX غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2021
    الإقامة
    مصر
    المشاركات
    26

    افتراضي

    الكود ده قبل اللوب والتعديل:

    كود:
    #include <stdlib.mqh>
    #include <stderror.mqh>
    
    //--- indicator settings
    #property indicator_chart_window
    #property indicator_buffers 2
    
    #property indicator_type1 DRAW_ARROW
    #property indicator_width1 3
    #property indicator_color1 0xFFAA00
    #property indicator_label1 "Buy"
    
    #property indicator_type2 DRAW_ARROW
    #property indicator_width2 3
    #property indicator_color2 0xFB00FF
    #property indicator_label2 "Sell"
    
    //--- indicator buffers
    double Buffer1[];
    double Buffer2[];
    
    double myPoint; //initialized in OnInit
    
    void myAlert(string type, string message)
      {
       if(type == "print")
          Print(message);
       else if(type == "error")
         {
          Print(type+" | loop @ "+Symbol()+","+IntegerToString(Period())+" | "+message);
         }
       else if(type == "order")
         {
         }
       else if(type == "modify")
         {
         }
      }
    
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int OnInit()
      {   
       IndicatorBuffers(2);
       SetIndexBuffer(0, Buffer1);
       SetIndexEmptyValue(0, EMPTY_VALUE);
       SetIndexArrow(0, 241);
       SetIndexBuffer(1, Buffer2);
       SetIndexEmptyValue(1, EMPTY_VALUE);
       SetIndexArrow(1, 242);
       //initialize myPoint
       myPoint = Point();
       if(Digits() == 5 || Digits() == 3)
         {
          myPoint *= 10;
         }
       return(INIT_SUCCEEDED);
      }
    
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    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++;
       
       //--- main loop
       for(int i = limit-1; i >= 0; i--)
         {
          if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
          
          //Indicator Buffer 1
          if(iDeMarker(NULL, PERIOD_CURRENT, 14, i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 1+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 2+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 3+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 4+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 5+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 6+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 7+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 8+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 9+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 10+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 11+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 12+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 13+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 14+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 15+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 16+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 17+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 18+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 19+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 20+i) > 0.20
          
          )
            {
             Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
            }
          else
            {
             Buffer1[i] = EMPTY_VALUE;
            }
          //Indicator Buffer 2
          if(iDeMarker(NULL, PERIOD_CURRENT, 14, i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 1+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 2+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 3+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 4+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 5+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 6+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 7+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 8+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 9+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 10+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 11+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 12+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 13+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 14+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 15+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 16+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 17+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 18+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 19+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 20+i) < 0.80
          )
            {
             Buffer2[i] = High[i]; //Set indicator value at Candlestick High
            }
          else
            {
             Buffer2[i] = EMPTY_VALUE;
            }
         }
       return(rates_total);
      }
    //+------------------------------------------------------------------+
    وده كود تاني بعد اللوب والتعديل واختصار الشروط:

    كود:
    #include <stdlib.mqh>
    #include <stderror.mqh>
    
    //--- indicator settings
    #property indicator_chart_window
    #property indicator_buffers 2
    
    #property indicator_type1 DRAW_ARROW
    #property indicator_width1 3
    #property indicator_color1 0xFFAA00
    #property indicator_label1 "Buy"
    
    #property indicator_type2 DRAW_ARROW
    #property indicator_width2 3
    #property indicator_color2 0xFB00FF
    #property indicator_label2 "Sell"
    
    //--- indicator buffers
    double Buffer1[];
    double Buffer2[];
    
    double myPoint; //initialized in OnInit
    
    void myAlert(string type, string message)
      {
       if(type == "print")
          Print(message);
       else if(type == "error")
         {
          Print(type+" | loop @ "+Symbol()+","+IntegerToString(Period())+" | "+message);
         }
       else if(type == "order")
         {
         }
       else if(type == "modify")
         {
         }
      }
    
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int OnInit()
      {   
       IndicatorBuffers(2);
       SetIndexBuffer(0, Buffer1);
       SetIndexEmptyValue(0, EMPTY_VALUE);
       SetIndexArrow(0, 241);
       SetIndexBuffer(1, Buffer2);
       SetIndexEmptyValue(1, EMPTY_VALUE);
       SetIndexArrow(1, 242);
       //initialize myPoint
       myPoint = Point();
       if(Digits() == 5 || Digits() == 3)
         {
          myPoint *= 10;
         }
       return(INIT_SUCCEEDED);
      }
    
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    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++;
       
       //--- main loop
       for(int i = limit-1; i >= 0; i--)
         {
          if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
          
          //Indicator Buffer 1
          for(int j = 0; j<= 20; j++)
          {
             if(iDeMarker(NULL, PERIOD_CURRENT, 14, j + i) > 0.20)
             {
                Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
             }
             else
             {
                Buffer1[i] = EMPTY_VALUE;
             }
          }
          
          //Indicator Buffer 2
          for(int jj = 0; jj<= 20; jj++)
          {
             if(iDeMarker(NULL, PERIOD_CURRENT, 14, jj + i) < 0.80)
             {
                Buffer2[i] = High[i]; //Set indicator value at Candlestick High
             }
             else
             {
                Buffer2[i] = EMPTY_VALUE;
             }
         }
       }
       return(rates_total);
      }
    //+------------------------------------------------------------------+
    سؤالي بالظبط: ما هو الخطأ لان في الكود الثاني لا يعطيني اشارات صحيحة؟

  8. #8
    الصورة الرمزية ZoozFX
    ZoozFX غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2021
    الإقامة
    مصر
    المشاركات
    26

    افتراضي

    منتظر الرد يا اخوة

  9. #9
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    صعب جدا اخي احد يفهم مطلوبك
    الصور قد تساعد

  10. #10
    الصورة الرمزية ZoozFX
    ZoozFX غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2021
    الإقامة
    مصر
    المشاركات
    26

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة سلمان_العتيبي مشاهدة المشاركة
    صعب جدا اخي احد يفهم مطلوبك
    الصور قد تساعد
    يعني مثلا اريدك ان تساعدني في صناعة مؤشر بلغة MQL5
    شروط الشراء:
    وجود 100 شمعة اعلى من 30 في الRSI
    وشروط البيع :
    وجود 100 شمعة اقل من 70 في الRSI

    هل هذا سهل بالنسبالك ام صعب تحقيقه؟

  11. #11
    الصورة الرمزية اميرالمنتدى
    اميرالمنتدى غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Dec 2008
    الإقامة
    الإمارات العربية المتحدة
    المشاركات
    603

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة ZoozFX مشاهدة المشاركة
    الكود ده قبل اللوب والتعديل:

    كود:
    #include <stdlib.mqh>
    #include <stderror.mqh>
     
    //--- indicator settings
    #property indicator_chart_window
    #property indicator_buffers 2
     
    #property indicator_type1 DRAW_ARROW
    #property indicator_width1 3
    #property indicator_color1 0xFFAA00
    #property indicator_label1 "Buy"
     
    #property indicator_type2 DRAW_ARROW
    #property indicator_width2 3
    #property indicator_color2 0xFB00FF
    #property indicator_label2 "Sell"
     
    //--- indicator buffers
    double Buffer1[];
    double Buffer2[];
     
    double myPoint; //initialized in OnInit
     
    void myAlert(string type, string message)
      {
       if(type == "print")
          Print(message);
       else if(type == "error")
         {
          Print(type+" | loop @ "+Symbol()+","+IntegerToString(Period())+" | "+message);
         }
       else if(type == "order")
         {
         }
       else if(type == "modify")
         {
         }
      }
     
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int OnInit()
      {   
       IndicatorBuffers(2);
       SetIndexBuffer(0, Buffer1);
       SetIndexEmptyValue(0, EMPTY_VALUE);
       SetIndexArrow(0, 241);
       SetIndexBuffer(1, Buffer2);
       SetIndexEmptyValue(1, EMPTY_VALUE);
       SetIndexArrow(1, 242);
       //initialize myPoint
       myPoint = Point();
       if(Digits() == 5 || Digits() == 3)
         {
          myPoint *= 10;
         }
       return(INIT_SUCCEEDED);
      }
     
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    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++;
       
       //--- main loop
       for(int i = limit-1; i >= 0; i--)
         {
          if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
          
          //Indicator Buffer 1
          if(iDeMarker(NULL, PERIOD_CURRENT, 14, i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 1+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 2+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 3+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 4+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 5+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 6+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 7+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 8+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 9+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 10+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 11+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 12+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 13+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 14+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 15+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 16+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 17+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 18+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 19+i) > 0.20
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 20+i) > 0.20
          
          )
            {
             Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
            }
          else
            {
             Buffer1[i] = EMPTY_VALUE;
            }
          //Indicator Buffer 2
          if(iDeMarker(NULL, PERIOD_CURRENT, 14, i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 1+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 2+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 3+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 4+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 5+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 6+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 7+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 8+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 9+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 10+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 11+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 12+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 13+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 14+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 15+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 16+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 17+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 18+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 19+i) < 0.80
          && iDeMarker(NULL, PERIOD_CURRENT, 14, 20+i) < 0.80
          )
            {
             Buffer2[i] = High[i]; //Set indicator value at Candlestick High
            }
          else
            {
             Buffer2[i] = EMPTY_VALUE;
            }
         }
       return(rates_total);
      }
    //+------------------------------------------------------------------+
    وده كود تاني بعد اللوب والتعديل واختصار الشروط:

    كود:
    #include <stdlib.mqh>
    #include <stderror.mqh>
     
    //--- indicator settings
    #property indicator_chart_window
    #property indicator_buffers 2
     
    #property indicator_type1 DRAW_ARROW
    #property indicator_width1 3
    #property indicator_color1 0xFFAA00
    #property indicator_label1 "Buy"
     
    #property indicator_type2 DRAW_ARROW
    #property indicator_width2 3
    #property indicator_color2 0xFB00FF
    #property indicator_label2 "Sell"
     
    //--- indicator buffers
    double Buffer1[];
    double Buffer2[];
     
    double myPoint; //initialized in OnInit
     
    void myAlert(string type, string message)
      {
       if(type == "print")
          Print(message);
       else if(type == "error")
         {
          Print(type+" | loop @ "+Symbol()+","+IntegerToString(Period())+" | "+message);
         }
       else if(type == "order")
         {
         }
       else if(type == "modify")
         {
         }
      }
     
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int OnInit()
      {   
       IndicatorBuffers(2);
       SetIndexBuffer(0, Buffer1);
       SetIndexEmptyValue(0, EMPTY_VALUE);
       SetIndexArrow(0, 241);
       SetIndexBuffer(1, Buffer2);
       SetIndexEmptyValue(1, EMPTY_VALUE);
       SetIndexArrow(1, 242);
       //initialize myPoint
       myPoint = Point();
       if(Digits() == 5 || Digits() == 3)
         {
          myPoint *= 10;
         }
       return(INIT_SUCCEEDED);
      }
     
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    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++;
       
       //--- main loop
       for(int i = limit-1; i >= 0; i--)
         {
          if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
          
          //Indicator Buffer 1
          for(int j = 0; j<= 20; j++)
          {
             if(iDeMarker(NULL, PERIOD_CURRENT, 14, j + i) > 0.20)
             {
                Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
             }
             else
             {
                Buffer1[i] = EMPTY_VALUE;
             }
          }
          
          //Indicator Buffer 2
          for(int jj = 0; jj<= 20; jj++)
          {
             if(iDeMarker(NULL, PERIOD_CURRENT, 14, jj + i) < 0.80)
             {
                Buffer2[i] = High[i]; //Set indicator value at Candlestick High
             }
             else
             {
                Buffer2[i] = EMPTY_VALUE;
             }
         }
       }
       return(rates_total);
      }
    //+------------------------------------------------------------------+
    سؤالي بالظبط: ما هو الخطأ لان في الكود الثاني لا يعطيني اشارات صحيحة؟
    باختصار : اللوب عندك يمشي للاخر و يعطيك اخر قيمة متحققة على اخر شمعة
    في الكود الاول التشييك يتم على كل الشمعات عشان هيك بطلع النتيجة عندك صح
    في الكود الثاني
    فرضا انت بتشيك على فرضا 5 شمعات
    يتم تحقق اللوب على الشمعة الاولى و ياخذ القيمة
    عند التشييك على الشمعة اللاحقة ( الثانية ) يقوم بالتشييك مع اهمال القيمة المتحققة في الشمعة الاولى ( خربت الدنيا )

    اتمنى هذا التوضيح يساعدك في فهم الامر .

    و اذا كان في فهمي لكودك خطأ ارجو المعذرة " جاد الفقير بما عنده "

  12. #12
    الصورة الرمزية ZoozFX
    ZoozFX غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2021
    الإقامة
    مصر
    المشاركات
    26

    افتراضي

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

    اتمنى هذا التوضيح يساعدك في فهم الامر .

    و اذا كان في فهمي لكودك خطأ ارجو المعذرة " جاد الفقير بما عنده "
    فهمك صحيح ولكن لم تعطيني الحل لاهمال هذه القيمة في الشمعة الاولى؟

الاوسمة لهذا الموضوع


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