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

 
Добрый времени суток. Подскажите пожалуйста по такому вопросу. Решился написать индикатор на MQL4. Перелопатил уже все учебники, но найти не смог, то что искал. В моем индикаторе есть массив, в котором мне нужно найти определенные значения, а потом посчитать их количество. Подскажите как это сделать? ArrayBsearch возвращает индекс только первого найденного элемента в первом измерении массива.
 
В цикле перебирать все элементы массива и пересчитывать соответствующие критерию поиска.
 
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;
   }
//**********************************************************************************        
      

 
ALXIMIKS:


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

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

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

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

Поможешь?!

 
Limos:

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

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

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

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

Поможешь?!


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

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

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

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


Причина обращения: