Разработчикам. Еще один вопрос по работе тестера по контрольным точкам.

 

Обнаружилась, на мой взгляд, некорректная работа функции iTime при тестировании в режиме по контрольным точкам.

На скрине видно, что iTime берет время с минутного таймфрейма не корректно, когда в то же время этот же тик с других таймфреймов считывается правильно.

Причем, это происходит два тика подряд и выдаёт правильное значение аж только на третем тике. Это видно из записи журнала:

2008.10.26 02:15:43 2006.01.02 04:14 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:00:00
2008.10.26 02:15:43 2006.01.02 04:14 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:00:00
2008.10.26 02:15:43 2006.01.02 04:14 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:10:00
2008.10.26 02:15:43 2006.01.02 04:14 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:14:00
2008.10.26 02:15:42 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:00:00
2008.10.26 02:15:42 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:00:00
2008.10.26 02:15:42 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:00:00
2008.10.26 02:15:42 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:10:00
2008.10.26 02:15:42 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 03:58:00
2008.10.26 02:08:25 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:00:00
2008.10.26 02:08:25 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:00:00
2008.10.26 02:08:25 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:00:00
2008.10.26 02:08:25 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 04:10:00
2008.10.26 02:08:25 2006.01.02 04:10 TEST_Tick_Time GBPUSD,M5: 2006.01.02 03:58:00

   string Sym=Symbol();
   ///////////////////////
   int t1=iTime(Sym,1,0);
   int t5=iTime(Sym,5,0);
   int t15=iTime(Sym,15,0);
   int t30=iTime(Sym,30,0);
   int t60=iTime(Sym,60,0);
   Comment( "\n\n\n\n",
            TimeToStr(t1,TIME_DATE|TIME_SECONDS),"\n\n",
            TimeToStr(t5,TIME_DATE|TIME_SECONDS),"\n\n",
            TimeToStr(t15,TIME_DATE|TIME_SECONDS),"\n\n",
            TimeToStr(t30,TIME_DATE|TIME_SECONDS),"\n\n",
            TimeToStr(t60,TIME_DATE|TIME_SECONDS));

   Print(TimeToStr(t1,TIME_DATE|TIME_SECONDS));
   Print(TimeToStr(t5,TIME_DATE|TIME_SECONDS));
   Print(TimeToStr(t15,TIME_DATE|TIME_SECONDS));
   Print(TimeToStr(t30,TIME_DATE|TIME_SECONDS));
   Print(TimeToStr(t60,TIME_DATE|TIME_SECONDS));

Возможно, это звенья одной и той же нехорошей цепочки, с которой обещали разобраться в другой ветке 'Разработчикам. Ошибка работы тестера или действительно результаты тестирования по контрольным точкам нельзя воспринимать серьезно!'

 

Для поиска обяснений непонятной мне работы тестера по контрольным точкам набросал следующий код:

///////////////
void start() //
{
   if(NewBar1(15))Print("NewBar1() = ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   if(NewBar2())Print("NewBar2() = ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   return;
}
//////////////////////////
bool NewBar1(int tf)   //
{////////////////////////
   static int BarTime=0;
   int time0=iTime(NULL,tf,0);
   if(BarTime!=time0)
   {
      BarTime=time0;
      return(true);
   }
   else
      return(false);
}
//////////////////
bool NewBar2() //  
{///////////////
   static int BarTime=0;
   int time0=Time[0];
   if(BarTime!=time0)
   {
      BarTime=time0;
      return(true);
   }
   else
      return(false);
}
/////////////////////////

И при запуске на разных валютах проскакивают следующие лаги:

2008.10.27 15:08:16 2006.01.02 02:45 TEST_NewBar() USDCHF,M15: NewBar2() = 2006.01.02 02:45:00
2008.10.27 15:08:16 2006.01.02 02:45 TEST_NewBar() USDCHF,M15: NewBar1() = 2006.01.02 02:45:00
2008.10.27 15:08:16 2006.01.02 02:29 TEST_NewBar() USDCHF,M15: NewBar2() = 2006.01.02 02:29:59
2008.10.27 15:08:16 2006.01.02 02:29 TEST_NewBar() USDCHF,M15: NewBar1() = 2006.01.02 02:29:59
2008.10.27 15:08:16 2006.01.02 02:00 TEST_NewBar() USDCHF,M15: NewBar2() = 2006.01.02 02:00:00
2008.10.27 15:08:16 2006.01.02 02:00 TEST_NewBar() USDCHF,M15: NewBar1() = 2006.01.02 02:00:00
2008.10.27 15:08:16 2006.01.02 01:59 TEST_NewBar() USDCHF,M15: NewBar2() = 2006.01.02 01:59:59
2008.10.27 15:08:16 2006.01.02 01:59 TEST_NewBar() USDCHF,M15: NewBar1() = 2006.01.02 01:59:59
2008.10.27 15:08:16 2006.01.02 01:30 TEST_NewBar() USDCHF,M15: NewBar2() = 2006.01.02 01:30:00
2008.10.27 15:08:16 2006.01.02 01:30 TEST_NewBar() USDCHF,M15: NewBar1() = 2006.01.02 01:30:00


2008.10.27 15:12:08 2006.01.02 01:00 TEST_NewBar() GBPUSD,M15: NewBar2() = 2006.01.02 01:00:00
2008.10.27 15:12:08 2006.01.02 01:00 TEST_NewBar() GBPUSD,M15: NewBar1() = 2006.01.02 01:00:00
2008.10.27 15:12:08 2006.01.02 00:59 TEST_NewBar() GBPUSD,M15: NewBar2() = 2006.01.02 00:59:59
2008.10.27 15:12:08 2006.01.02 00:59 TEST_NewBar() GBPUSD,M15: NewBar1() = 2006.01.02 00:59:59
2008.10.27 15:12:08 2006.01.02 00:30 TEST_NewBar() GBPUSD,M15: NewBar2() = 2006.01.02 00:30:00
2008.10.27 15:12:08 2006.01.02 00:30 TEST_NewBar() GBPUSD,M15: NewBar1() = 2006.01.02 00:30:00
2008.10.27 15:12:08 2006.01.02 00:14 TEST_NewBar() GBPUSD,M15: NewBar2() = 2006.01.02 00:14:59
2008.10.27 15:12:08 2006.01.02 00:14 TEST_NewBar() GBPUSD,M15: NewBar1() = 2006.01.02 00:14:59


2008.10.27 15:12:57 2006.01.02 00:30 TEST_NewBar() USDJPY,M15: NewBar2() = 2006.01.02 00:30:00
2008.10.27 15:12:57 2006.01.02 00:30 TEST_NewBar() USDJPY,M15: NewBar1() = 2006.01.02 00:30:00
2008.10.27 15:12:57 2006.01.02 00:29 TEST_NewBar() USDJPY,M15: NewBar2() = 2006.01.02 00:29:59
2008.10.27 15:12:57 2006.01.02 00:29 TEST_NewBar() USDJPY,M15: NewBar1() = 2006.01.02 00:29:59
2008.10.27 15:12:48 2006.01.02 00:00 TEST_NewBar() USDJPY,M15: NewBar2() = 2006.01.02 00:00:00
2008.10.27 15:12:48 2006.01.02 00:00 TEST_NewBar() USDJPY,M15: NewBar1() = 2006.01.02 00:00:00

Как такое может быть?

С моделированием, по-моему, что-то не так? Или я чего-то не понимаю?

Хотелось бы услышать мнение разработчиков.

 

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

Это чисто мое замечание, возможно, Слава, что-то добавит.

 

Может просто в минутках нет точно соответствующего бара? Ночное время таки...

 
Rosh писал(а) >>

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

Это чисто мое замечание, возможно, Слава, что-то добавит.

Последний тест проводился на 15 минутном графике(в листинге видно) с поиском момента появления нового бара. Но новый 15-й бар никак не должен начинаться в 29:59 или 14:59.

 
Трудно сказать, я сейчас прогнал Ваш тестовый советник на новом билде (который еще кажется не выкладывался) и там такой ошибки нет.
Причина обращения: