iVolume среднее значение

 
Помогите пожалуйста. Как вычислить при помощи кода среднее значение 100 последних  iVolume ?
 
berezhnuy >>:
Помогите пожалуйста. Как вычислить при помощи кода среднее значение 100 последних iVolume ?

вот так

double avarage=0;
for(int g=0;g<100;g++)avarage=avarage+iVolume(Symbol(),0,g);
avarage=avarage/100;
 
vasya_vasya >>:

вот так

Не оптимально. Будет пересчитываться весь цикл на каждом тике (да хоть баре!). Можно, например, так:

double ma=SMAvol[i+1]*SMAperiod-Volume[i+SMAperiod];
SMAvol[i]=(ma+Volume[i])/SMAperiod;

где

SMAvol - инд.буфер для усредненных значений;

SMAperiod - период усреднения;

i - текущий бар.

 
Svinozavr >>:

Не оптимально. Будет пересчитываться весь цикл на каждом тике (да хоть баре!). Можно, например, так:

где

SMAvol - инд.буфер для усредненных значений;

SMAperiod - период усреднения;

i - текущий бар.


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

 
vasya_vasya >>:

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

))) А из вашего?

 
double sum=0;  
for(int i=0;i<Bars;i++)
  {
  if(i==0){for(int j=0;j<100;j++){sum=sum+iVolume(NULL,0,j);}}
  if(i>0)sum=sum+iVolume(NULL,0,i+100)-iVolume(NULL,0,i-1);
  ExtMapBuffer[i]=sum/100;
  }  
Может так?
 

Жуть господа - вам надо работать над стилем и сильно. :))

 
А что не так?
 
Обнаружил у себя лишнюю пару скобок.
 
double sum=0;  

for ( int i=0; i<Bars; i++ ){
  if ( i == 0 ){
    for ( int j=0; j<100; j++ ){
        sum= sum + iVolume ( NULL, 0, j );
    }
  }
  
  if ( i > 0 ){
    sum = sum + iVolume ( NULL, 0, i+100 ) - iVolume ( NULL, 0, i-1 );
  }
  
  ExtMapBuffer[i] = sum/100;
}  
Есть несколько вариантов но раз MQ4 это всетаки Си, наверное что-то подобное должно быть.
 
double sum=0;
for(int i=0;i<Bars;i++)
  {
  if (i==0)
    {
    for (int j=0;j<100;j++)
      {
      sum=sum+iVolume(NULL,0,j);
      }
    }
  if (i>0)
    {
    sum=sum+iVolume(NULL,0,i+100)-iVolume(NULL,0,i-1);
    }
  ExtMapBuffer[i]=sum/100;
  }
Так лучше!
Причина обращения: