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

 
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/Signal;
     
}


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


Почему [i -k] ?  


SignalBuffer[i - k]
Это что вообще ?
 
Ivan Vlasov:

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


Потому что где limit нужно отнять размер периода Signal

 
Ivan Vlasov:

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

Поздравляю!

 
Renat Akhtyamov:

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

Реакции на тики не появилось(( Пересчитывается только при добавление на график, хотя раньше реагировал на изменение таймфрейма.

 
Evgeniy Chumakov:


Потому что где limit нужно отнять размер периода Signal

Евгений, спасибо! Все действительно теперь работает как надо!

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

Извиняюсь за то что туплю местами)))

Я только учусь писать алгоритмы!

 
Ivan Vlasov:

Евгений, спасибо! Все действительно теперь работает как надо!

Извиняюсь за то что туплю местами)))

Я только учусь писать алгоритмы!

А за что отвечает это, вы знаете, или просто скопипастили откуда-то?

for( int i = limit - Signal; i >= 0 && !IsStopped(); i--){
 
Vitaly Muzichenko:

А за что отвечает это, вы знаете, или просто скопипастили откуда-то?

Скопипастил из предыдущей моей темы, где Вы на писали "Шедеврально"

 
for( int i = limit - Signal; i >= 0 && !IsStopped(); i--){

И это, предположительно, не очень правильно. Посмотрите, используя функцию Comment(), чему равно  limit - Signal. Очень вероятно, что на каждом тике выполняется много лишних расчетов.