Разработка ATR за несколько дней

 
Здравствуйте, получилось у меня написать алгоритм вычисления АТР за несколько дней. Но проблема в том, что он не работает, хотя писал по готовому коду на C#. Можете подсказать пожалуйста, в чем именно может быть ошибки. Он вычисляет АТР, а затем после него пишет всегда 0.

      TimeToStruct(time[i],count);      
      double maxPrice = high[0];
      double minPrice = low[0];
      ATRBuffer[0] = 0;
      double AverageATR = 0;
      count.day += 1;
      for(int i=1;i<rates_total;i++)
      {
         TimeToStruct(time[i],date);
         if(date.day == count.day) // Ждем, пока наступит следующий день
         {
            dayATR.Add(maxPrice - minPrice); // Вычисляем АТР за день
            maxPrice = high[i]; // обнуляем хай и лоу
            minPrice = low[i];
            if(dayATR.Total() > ATRPeriod) // После каждого дня удаляем АТР за старый день и добавляем новый, чтобы был список из АТР за нужный Период
            {
               dayATR.Delete(0);
            }  
            if(dayATR.Total() < ATRPeriod) // Ждем, когда пройдет нужное количество дней для вычисления общего АТР
            {
               count.day += 1;
               continue;
            
            }
            for(int j = 0;j<ATRPeriod;j++) // Суммируем АТР по каждому дню
            {
               AverageATR += dayATR[j];
            }
            ATRBuffer[i] = AverageATR / ATRPeriod; // Вычисляем средний АТР за кол-во дней
            AverageATR = 0;
            count.day += 1; // Переходим к следующему дню
         }
         else
         {
            ATRBuffer[i] = ATRBuffer[i-1];
            if (high[i] > maxPrice)
                {
                    maxPrice = high[i];
                }
                if (low[i] < minPrice)
                {
                    minPrice = low[i];
                }
         }
 

Навскидку сложно сказать, что тут не так. Тем более, что код неполон.

Впечатление, что тут много излишних сложностей. Особенно удивила какая-то хитрая завязка "за следующий день", вычисляемая как просто добавление к номеру дня в месяце единицу, и без проверки, что будет, когда единица добавится к 31 числу. 

Для выяснения, что не так - следует пройтись по коду в отладчике, проверяя на каждом этапе значения.

 
а в чем сложность использовать готовый индикатор ATR из стандартной поставки терминала? 
 
Sergey Gritsay:
а в чем сложность использовать готовый индикатор ATR из стандартной поставки терминала? 
Он там вычисляет за бары, а не за дни
 
George Merts:

Навскидку сложно сказать, что тут не так. Тем более, что код неполон.

Впечатление, что тут много излишних сложностей. Особенно удивила какая-то хитрая завязка "за следующий день", вычисляемая как просто добавление к номеру дня в месяце единицу, и без проверки, что будет, когда единица добавится к 31 числу. 

Для выяснения, что не так - следует пройтись по коду в отладчике, проверяя на каждом этапе значения.

Просто я только перешел на mql5, в C# есть переменная даты и там добавление дня вычисляется правильно основываясь на количестве дней и дате.

P.s. оказывается добавление единицы это просто в переменную добавляет единицу, а не вычисляет следующий день по времени. Надо пересмотреть функции.
 
Добавил немного другое условие
date[i].day != date[i-1].day
И всё работает и высчитывает
Причина обращения: