Скачать MetaTrader 5

Поиск элементов в массиве и их подсчет

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Eqilibrius
15
Eqilibrius  
Добрый времени суток. Подскажите пожалуйста по такому вопросу. Решился написать индикатор на MQL4. Перелопатил уже все учебники, но найти не смог, то что искал. В моем индикаторе есть массив, в котором мне нужно найти определенные значения, а потом посчитать их количество. Подскажите как это сделать? ArrayBsearch возвращает индекс только первого найденного элемента в первом измерении массива.
Vitalie Postolache
12444
Vitalie Postolache  
В цикле перебирать все элементы массива и пересчитывать соответствующие критерию поиска.
Sergey Dzyublik
5179
Sergey Dzyublik  
Limos:
Добрый времени суток. Подскажите пожалуйста по такому вопросу. Решился написать индикатор на MQL4. Перелопатил уже все учебники, но найти не смог, то что искал. В моем индикаторе есть массив, в котором мне нужно найти определенные значения, а потом посчитать их количество. Подскажите как это сделать? ArrayBsearch возвращает индекс только первого найденного элемента в первом измерении массива.

// код для себя любимого но о вашей проблеме, он не проверенный, нету компилятора (((( не с своего компа писал
//**********************************************************************************
//   функция возвращает количество значений равных find в массиве muss[] с определенной точностью accuracy
//**********************************************************************************
int F(
   double&        muss[],                     // массив в котором ищем
   double         find,                       // что ищем
   int            begin=-1,                   // откуда (номер элемента в массиве) (если -1 - ищем от начала до кончала) (если -2 - ищем от конца до начала)
   int            end=-1,                     // покуда (номер элемента в массиве) (если -1 - ищем до конца)             (если -2 - ищем до начала)
   int            accuracy=8                  // точность сравнения типов double, если меньше 0  - сравниваем без точности
   ){
//**********************************************************************************
      int size=ArraySize(muss);  
//**********************************************************************************
//     блок проверки верности входящих данных 
//**********************************************************************************
      if (size==0)     return (-1);                 // массив не заполнен
      if (begin<-2)    return (-2);                // значение begin меньше допустимого
      if (end<-2)      return (-3);               // значение end   меньше допустимого
      if (begin>=size) return (-4);              // значение begin больше допустимого
      if (end>=size)   return (-5);             // значение end   больше допустимого
//**********************************************************************************
//     блок подготовки данных к расчету
//**********************************************************************************
      int dd=1,                                 // имеет значение +1 или -1
          count=0;                              // количество совпадений - возвращаемый результат
      if (begin==-1){                           // параметры для расчета от начала до конца
         i=0;
         end=size-1;
      }
      else{
         if (begin==-2){                        // параметры для расчета от конца до начала
            i=size-1;
            begin=0,
            end=i;
            dd=-1;
         } 
         else{
            if (end==-1){                       // параметры для расчета от кудось до конца
               i=begin;                                   
               end=size-1;
            }
            else{
               if (end==-2){                    // параметры для расчета от кудось до начала
                  i=begin;
                  end=i;
                  begin=0;
                  dd=-1;
               }
               else{
                  i=begin;
                  if (begin>end){                // если begin>end
                     dd=-1;
                     begin=end;
                     end=i;
                  } 
               }
            }   
         }  
      }
//**********************************************************************************
//     блок расчета
//**********************************************************************************
      if (accurecy<0){                                      // если точность < 0 
         for(,i>=begin && i<=end,i+dd)
            if (muss[i]==find)
               count++;
         return count;
      }
      else                                                  // если точность > 0 
         for(,i>=begin && i<=end,i+dd)
            if (NormalizeDouble(muss[i]-find,accurecy)==0)
               count++;
      return count;
   }
//**********************************************************************************        
      

Eqilibrius
15
Eqilibrius  
ALXIMIKS:


Спасибо огромное!

Буду признателен если поможешь еще в одном.

Количество я посчитал. Но мне теперь надо каждое найденное значение сравнить через определенное количество баров с другим значением. Допустим с последующим баром.

Например: есть массив из 10 значений, в нем нужно найти "2", допустим их в массиве 3. И мы должны сравнить эти найденные "2" с последующими барами.

Поможешь?!

Sergey Dzyublik
5179
Sergey Dzyublik  
Limos:

Спасибо огромное!

Буду признателен если поможешь еще в одном.

Количество я посчитал. Но мне теперь надо каждое найденное значение сравнить через определенное количество баров с другим значением. Допустим с последующим баром.

Например: есть массив из 10 значений, в нем нужно найти "2", допустим их в массиве 3. И мы должны сравнить эти найденные "2" с последующими барами.

Поможешь?!


1) Рад что помог

2) помог от того что не было чего делать в тот вечер (код этот еще не смотрел даже)

3) ни чего не понял что вы просите в этот раз

4) нет не помогу - причины тут и тут.


Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий