HELP! Как нормально посчитать среднюю из буфера?

 

Помогите пожалуйста! 

Написал индикатор с одним буфером, хочу чтобы на графике отображалась средняя за определенный период.

Добавляю еще один буфер и считаю его из основного вот так

for( i = limit; i >= 0 && !IsStopped(); i--)
     {
      double sum=0.0;
      for(k=0; k<Signal; k++)
        { sum+=Buffer[i-k];
          SignalBuffer[i]=sum/Signal;}
     }

в таком варианте  получается, что на графике не хватает участка равного периоду для средней линии((( 

Что делать? Как поправить?

 
Попробуйте [i+k]
 
Dmitry Fedoseev:
Попробуйте [i+k]

пробовал, линия совсем пропадает

 

 
for(int i = limit; i >= 0 && !IsStopped(); i--){
      
double sum = 0.0;
      
for(int k = 0; k < Signal; k++){ sum += Buffer[i + k]; }
         
SignalBuffer[i] = sum/Signal;
     
}
 
[i - k]


Так у вас получается среднее за будущие значения. 

Если i < k , то [ i - k ] < 0  там значений нет.

 
Ivan Vlasov:

пробовал, линия совсем пропадает

 

Посмотрите, что там в логах, вероятно есть выход за пределы массива. Надо правильно вычислить начала обсчета.

 
Evgeniy Chumakov:

В таком варианте средняя линия не отображается на графике и индикатор перестает реагировать на поступление новых тиков(((

 
Dmitry Fedoseev:

Посмотрите, что там в логах, вероятно есть выход за пределы массива. Надо правильно вычислить начала обсчета.

Надо правильно вычислить начала обсчета." - это я понимаю))) 

 
for(int i = limit; i >= 0 && !IsStopped(); i--){
      
double sum = 0.0;
      
for(int k = 0; k < Signal; k++){ sum += Buffer[i - k]; }
         
SignalBuffer[i - k] = sum/Signal;
     
}

Вот так работает!!!! Одному сложновато искать ошибки, а на форуме в обсуждении сразу все получается))


Правда теперь нет реакции на поступление новых тиков ((((((((((   

 
Ivan Vlasov:

Вот так работает!!!! Одному сложновато искать ошибки, а на форуме в обсуждении сразу все получается))


Правда теперь нет реакции на поступление новых тиков ((((((((((   

попробуйте так

for(int i = limit; i >= 0 && !IsStopped(); i--){
      
double sum = 0.0;
      
for(int k = 0; k <= Signal; k++){ sum += Buffer[i - k]; }
         
SignalBuffer[i - k] = sum/((double)(Signal+1));
     
}
 
Renat Akhtyamov:

попробуйте так

for(int i = limit; i >= 0 && !IsStopped(); i--){
      
double sum = 0.0;
      
for(int k = 0; k <= Signal; k++){ sum += Buffer[i - k]; }
         
SignalBuffer[i - k] = sum/((double)(Signal+1));
     
}


Был у него период средней = Signal он порекомендовал добавить единицу. ))

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