Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй статью. Мы сами переведем ее на другие языки!
Сергей
70
Сергей 2013.02.24 01:22 

Здравствуйте.

Как  можно посчитать количество тиков за определенный промежуток времени, ведь в mql4 нет такой функции?

IgorM М
4801
IgorM М 2013.02.24 05:23  

если "определенный промежуток времени" кратен периодам графиков, то используйте тиковые объемы: Volume[]

вот набросал индикатор для подсчета 10-тиминутных тиковых объемов (онлайн не правильно работать будет - нулевой бар не правильно пересчитывается), индикатор бросать на М1

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red

extern int min = 10;
double buf[];

int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,buf);
return(0);
}

int deinit(){
return(0);
}

int start(){
   int i,limit,tmp_vol;
   limit=Bars-IndicatorCounted();
   if (limit>1) limit = Bars-1;
   tmp_vol = 0;
   for(i=limit; i>=0; i--){
      tmp_vol += Volume[i];
      if(TimeMinute(Time[i])%min == 0){
         buf[i] = tmp_vol;
         tmp_vol = 0;
      }
   }
return(0);
}
//+------------------------------------------------------------------+

 если речь идет о подсчете тиков онлайн - тогда нужно создать эксперт и в ф-ции start() считать кол-во вызовов  start(), в эксперте вызов ф-ции  start()  происходит по приходу нового тика

ну или как вариант: зацикленный скрипт, который будет отслеживать изменение Ask и Bid, что будет соответствовать приходу нового тика

zoritch
4329
zoritch 2013.02.24 05:45  
... который будет отслеживать изменение Ask и Bid, что будет соответствовать приходу нового тика....

 

   добавлю - при постоянном спреде всё равно, что отслеживать, либо по Ask, либо по Bid... а вот на плавающем - любое изменение и Ask и Bid...

 (при всем при том - конструкции логического "ИЛИ" обслуживаются намного дольше...это может быть важно...)

IgorM М
4801
IgorM М 2013.02.24 06:40  
zoritch: (при всем при том - конструкции логического "ИЛИ" обслуживаются намного дольше...это может быть важно...)

тестовый скрипт:

int start(){
   int i,count,x,y,st_ms;
   x = 1;
   y = -1;
//  ||
   count = 0;
   st_ms = GetTickCount();
   for(i=0;i<1000000;i++)
      if(x > y || x > y || x > y || x > y || x > y || x > y || x > y || x > y || x > y || x > y || x > y || x > y) count++;
   Print(" || = ",GetTickCount()-st_ms);
//  &&   
   count = 0;
   st_ms = GetTickCount();
   for(i=0;i<1000000;i++)
      if(x > y && x > y && x > y && x > y && x > y && x > y && x > y && x > y && x > y && x > y && x > y && x > y) count++;
   Print(" && = ",GetTickCount()-st_ms);
return(0);
}

на 1 миллион операций вроде не сильно критично:

10:39:53 test EURUSD,M1: loaded successfully
10:39:53 test EURUSD,M1:  || = 156
10:39:54 test EURUSD,M1:  && = 172
10:39:54 test EURUSD,M1: uninit reason 0
10:39:54 test EURUSD,M1: removed
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий