Скачать MetaTrader 5

Вопрос к разработчикам - а что, функция Sleep в тестере не работает?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114269
Forex Trader  
Точнее она не работает у меня в цикле while. Билд скачал самый последний, с вашего сайта. Вот простой пример:
//+------------------------------------------------------------------+
//|                                                  Sample-0002.mq4 |
//|                                        Copyright © 2005, Registr |
//|                                                  Exsys@pochta.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Registr"
#property link      "Exsys@pochta.ru"


datetime PrevTime;
int CountBars;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{//1
//---- 
//----
   PrevTime=Time[0];
   CountBars=0;
   Print("Выполнен блок init");
   return(0);
}//1

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{//1
//---- 
//----
   Print("Выполнен блок deinit");
   return(0);
}//1

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{//1
   datetime InitialTime=CurTime();int i=0;bool NewBar=false;
   
//+------------------------------------------------------------------+
//| Модуль счетчика баров                                           
//+------------------------------------------------------------------+
   //Отфильтрововаем бары от ценовых тиков
   if (Time[0]!=PrevTime)
   {//2   
      CountBars++;
      NewBar=True;
      PrevTime=Time[0];
   }//2
//+------------------------------------------------------------------+
//| Конец модуля счетчика баров                                           
//+------------------------------------------------------------------+
   
   if((CountBars==1)&&(NewBar))
   {//3
      while(i<10)
      {//4
         i++;
         Print("CurTime: "+CurTime()+" InitialTime: "+InitialTime+" i: "+i); 
         Sleep(10000);
      }//4
   }//3
   
   return(0);
}//1
//+------------------------------------------------------------------+


результат работы в реале:


05:42:05 Sample-0002 EURUSD,M1: CurTime: 1135741329 InitialTime: 1135741329 i: 1
05:42:15 Sample-0002 EURUSD,M1: CurTime: 1135741338 InitialTime: 1135741329 i: 2
05:42:25 Sample-0002 EURUSD,M1: CurTime: 1135741347 InitialTime: 1135741329 i: 3
05:42:35 Sample-0002 EURUSD,M1: CurTime: 1135741354 InitialTime: 1135741329 i: 4
05:42:45 Sample-0002 EURUSD,M1: CurTime: 1135741367 InitialTime: 1135741329 i: 5
05:42:55 Sample-0002 EURUSD,M1: CurTime: 1135741370 InitialTime: 1135741329 i: 6
05:43:05 Sample-0002 EURUSD,M1: CurTime: 1135741387 InitialTime: 1135741329 i: 7
05:43:15 Sample-0002 EURUSD,M1: CurTime: 1135741391 InitialTime: 1135741329 i: 8
05:43:25 Sample-0002 EURUSD,M1: CurTime: 1135741405 InitialTime: 1135741329 i: 9
05:43:35 Sample-0002 EURUSD,M1: CurTime: 1135741416 InitialTime: 1135741329 i: 10

... в тестере:

05:54:38 Sample-0002: loaded successfully
05:54:44 Sample-0002 started for testing
05:54:44 Sample-0002: Выполнен блок init
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 1
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 2
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 3
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 4
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 5
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 6
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 7
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 8
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 9
05:54:44 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 10
05:54:49 2005.05.02 16:39 Sample-0002: Выполнен блок deinit

... видно, что никакой задержки нет. Это что, так и должно быть или опять глюк? В мануале ничего про это не нашёл... Да нет, как выяснилось она просто не работает в тестере:

//+------------------------------------------------------------------+
//|                                                  Sample-0002.mq4 |
//|                                        Copyright © 2005, Registr |
//|                                                  Exsys@pochta.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Registr"
#property link      "Exsys@pochta.ru"


datetime PrevTime;
int CountBars;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{//1
//---- 
//----
   PrevTime=Time[0];
   CountBars=0;
   Print("Выполнен блок init");
   return(0);
}//1

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{//1
//---- 
//----
   Print("Выполнен блок deinit");
   return(0);
}//1

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{//1
   datetime InitialTime=CurTime();int i=0;bool NewBar=false;
   
//+------------------------------------------------------------------+
//| Модуль счетчика баров                                           
//+------------------------------------------------------------------+
   //Отфильтрововаем бары от ценовых тиков
   if (Time[0]!=PrevTime)
   {//2   
      CountBars++;
      NewBar=True;
      PrevTime=Time[0];
   }//2
//+------------------------------------------------------------------+
//| Конец модуля счетчика баров                                           
//+------------------------------------------------------------------+
   
   if((CountBars==1)&&(NewBar))
   {//3
      Print("CurTime: "+CurTime()+" InitialTime: "+InitialTime+" i: "+i);
      i++;
      Sleep(2000);
      Print("CurTime: "+CurTime()+" InitialTime: "+InitialTime+" i: "+i);

//      while(i<10)
//      {//4
//         i++;
//         Print("CurTime: "+CurTime()+" InitialTime: "+InitialTime+" i: "+i); 
//         Sleep(10000);
//      }//4
   }//3
   
   return(0);
}//1
//+------------------------------------------------------------------+


результат:


06:13:57 Sample-0002: loaded successfully
06:13:57 Sample-0002 started for testing
06:13:57 Sample-0002: Выполнен блок init
06:13:57 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 0
06:13:57 2004.06.16 19:15 Sample-0002: CurTime: 1087413300 InitialTime: 1087413300 i: 1
06:14:00 2004.10.14 11:49 Sample-0002: Выполнен блок deinit

... странно, что эту функцию все используют для задержки, например:

while(!IsTradeAllowed()) Sleep(1000);


... а никакой задержки нет... вот прикол :-)
Млин, похоже и на реале эта функция не всегда работает:


06:26:40 Sample-0002 EURUSD,M1: Выполнен блок init
06:26:40 Sample-0002 EURUSD,M1: initialized
06:29:20 Sample-0002 EURUSD,M1: CurTime: 1135744153 InitialTime: 1135744153 i: 0
06:29:22 Sample-0002 EURUSD,M1: CurTime: 1135744153 InitialTime: 1135744153 i: 1

... а зачем она тогда нужна? Удалось выяснить, в реале при Sleep(3000) реальная задержка 1 сек, при меньших значениях задержки не видать...

Forex Trader
114269
Forex Trader  
в тестере слип не работает - об этом написано в статье "Особенности тестирования"
а в реале работает нормально
Forex Trader
114269
Forex Trader  
А вы представьте - что бы было, если бы в тестере реально работал Sleep.
Forex Trader
114269
Forex Trader  
А вы представьте - что бы было, если бы в тестере реально работал Sleep.

Ну дык, не реально же, конечно, а вертуально. Задерживать на те секунды, что возвращает CurTime() - там-то время в режиме тестирования вертуально!...
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий