Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поделись своими разработками. Это увеличит твой рейтинг.
ivan
313
ivan 2010.04.14 14:49 
Помогите пожалуйста. Как вычислить при помощи кода среднее значение 100 последних  iVolume ?
Vasiliy Orlov
1175
Vasiliy Orlov 2010.04.14 14:56  
berezhnuy >>:
Помогите пожалуйста. Как вычислить при помощи кода среднее значение 100 последних iVolume ?

вот так

double avarage=0;
for(int g=0;g<100;g++)avarage=avarage+iVolume(Symbol(),0,g);
avarage=avarage/100;
Петр
6084
Петр 2010.04.14 15:08  
vasya_vasya >>:

вот так

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

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

где

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

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

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

Vasiliy Orlov
1175
Vasiliy Orlov 2010.04.14 15:34  
Svinozavr >>:

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

где

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

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

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


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

Петр
6084
Петр 2010.04.14 15:38  
vasya_vasya >>:

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

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

Дмитрий
1460
Дмитрий 2010.04.14 15:55  
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;
  }  
Может так?
John
3254
John 2010.04.14 15:56  

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

Дмитрий
1460
Дмитрий 2010.04.14 15:57  
А что не так?
Дмитрий
1460
Дмитрий 2010.04.14 15:58  
Обнаружил у себя лишнюю пару скобок.
John
3254
John 2010.04.14 16:01  
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 это всетаки Си, наверное что-то подобное должно быть.
Дмитрий
1460
Дмитрий 2010.04.14 16:05  
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;
  }
Так лучше!
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий