Как вычислить время тестирования эксперта.

 
Такая проблема, оптимизирую эксперт по времени выполнения, чтобы было комфортнее (быстрее) оптимизировать. Соответственно, порой хотелось бы оценивать время выполнения эксперта при тестировании не на глазок, а иметь точное значение. Как можно вычислить это время?
 
TimeLocal и TimeCurrent при тестировании моделируются, соответственно на вскидку 2 варианта:
1) первым и последним вызовом создавать какой-нить файл (FileWrite) и по вреемни их создания считать время тестирования;
2) юзать WinAPI.

BRGDS
 

Ответ правильный, приз в студию!

Всем участникам спасибо и досвидания!

 

Я делаю таким образом:

int    BeginTest;                           // Время начала теста
 
//+------------------------------------------------------------------+
//|  expert initialization function                                  |
//+------------------------------------------------------------------+
void init() {
  if (IsTesting()) BeginTest=GetTickCount();
}
 
//+------------------------------------------------------------------+
//|  expert deinitialization function                                |
//+------------------------------------------------------------------+
void deinit() {
  if (IsTesting()) Print("Продолжительность прогона ",
                         NormalizeDouble((GetTickCount()-BeginTest)/1000.0, 1),
                         " сек.");
}
 

Не буду уж новую ветку заводить - т.к. тоже есть по тестированию вопрос. Вот у меня эксперт есть в двух версиях. Одна "тестовая". А вторая рабочая. - ТАК МНЕ СКАЗАЛИ.

Вторая версия "рабочая" - не желает оптимизироваться в тестере. При этом все внешние признаки текущей оптимизации имеются. Полоска зеленая идет - прогоны отмечены цифрами. Нр результаты пустые. Хотя заведомо я знаю - что должны быть ПОЛОЖИТЕЛЬНЫЕ результаты . Но при одиночных прогонах (без оптимизирования) работает.

Я не могу усмотреть в коде - где стоит запрет на оптимизацию. Да и возможно ли такое? Может кто, - знает в чем тут дело?

 
rid:

Я не могу усмотреть в коде - где стоит запрет на оптимизацию. Да и возможно ли такое? Может кто, - знает в чем тут дело?


Можно запретить оптимизацию влепив в начале эксперта например такое,
  if(IsOptimization()) return(0);
 

Да вроде нет такого. Эксперт устроен непривычно и странно для меня. Там в функции int start() нет привычных операций. А есть только команды на выполнение различных функций - на открытие позиций; на трейлинг стоп; на комментарии на графике и даже на муз. сопровождение некоторых операций.

//-------------------------------------------------------
int start()
  {
   if(Bars<NumberBars) return(0);
   if(DayOfWeek()==0 || DayOfWeek()==6) return(0);
   if(FirstTickExpert) InitStateOrders();
   ControlStateOrders();
   if(BuyTicket<0 || SellTicket<0) { SetMainOrders(); return(0); }
   if(BuyType==OP_BUY) if(BuyOrderTrailing()) return(0);
   if(SellType==OP_SELL) if(SellOrderTrailing()) return(0);
   if(BuyTicket==0 && SellTicket==0 && NumberCycle>0) SetNewOrders();
   return(0);
  }
И лишь в одном только месте есть нечто похожее на запрет:
 for(int t=WaitTime; t>0; t--)
     {
      if(IsStopped()) return;
      Comment("До начала установки ордеров осталось ",t," сек.");
      Sleep(1000);
     }
   PlaySound(ControlLevelsSound);
 

Все нормально - при выполнении условий , вызываются функции. Функции должны быть либо тут же, либо вызываться через инклюдники.

 
Функции, конечно, есть. Тут же они все. Но ни в одной из них нет, вроде бы, запрета на оптимизацию !
Причина обращения: