Как из тестера получить системное время компьютера?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Yury Kirillov
5298
Yury Kirillov  

Хочется замерять время тестирования эксперта. Соответственно получать время запуска и завершения теста.

Есть ли такая возможность?

Ihor Herasko
21191
Ihor Herasko  
Да, к сожалению TimeLocal() при тестировании тоже моделируется (как и TimeCurrent()). Тогда путь один - через вызов API-функции GetSystemTime().
Edgar Akhmadeev
2360
Edgar Akhmadeev  
Yury Kirillov:

Хочется замерять время тестирования эксперта. Соответственно получать время запуска и завершения теста.

Есть ли такая возможность?

Я использую GetTickCount() в OnInit  и OnDeinit. Разница и есть время выполнения (если нужно именно это).

fxsaber
16830
fxsaber  

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2018.10.17 12:50

// Возвращает TimeLocal даже в Тестере
datetime GetTimeLocal( void )
{ 
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  static uint TickCount = 0;
  static datetime InitTimeLocal = 0;
  
  datetime Res = 0;
  
  if (IsTester)
  {
    if (InitTimeLocal)
      Res = InitTimeLocal + (GetTickCount() - TickCount) / 1000;
    else
    {
      int Array[];    
      const string FileName = __FUNCTION__;  
      
      if (FileSave(FileName, Array))
      {
        TickCount = GetTickCount();
        
        Res = InitTimeLocal = (datetime)FileGetInteger(FileName, FILE_MODIFY_DATE);
      }
    }
  }
  else
    Res = TimeLocal();
    
  return(Res);
}


Применение

void OnInit()
{
  Print(GetTimeLocal());  
}

double OnTester()
{
  Print(GetTimeLocal());
  
  return(0);
}
fxsaber
16830
fxsaber  
Yury Kirillov:

Хочется замерять время тестирования эксперта. Соответственно получать время запуска и завершения теста.

Есть ли такая возможность?

https://www.mql5.com/ru/code/18804

TesterBenchmark
TesterBenchmark
  • www.mql5.com
При написании разных версий кода может возникнуть необходимость измерения влияния их на общую производительность советника в тестере. Это позволяет не только понять, насколько оптимален написанный код по сравнению с другим, но и дает предпосылки к будущей быстрой оптимизации советника. Такой подход позволяет выявить "бутылочное горлышко" в...
SeriousRacoon
1079
SeriousRacoon  
#import "Kernel32.dll"
void GetLocalTime(ushort& time[]);
#import

// +------------------------------------------------------------------+
// | Script program start function                                    |
// +------------------------------------------------------------------+
void OnStart()
{
    ushort time[8];
    GetLocalTime(time);
    PrintFormat("Year=%d, Mn=%d, DOW=%d, Day=%d, H=%d, M=%d, S=%d, Msec=%d",
                time[0], time[1], time[2], time[3], time[4], time[5], time[6], time[7]);
}

// +------------------------------------------------------------------+


https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getlocaltime

GetLocalTime function (sysinfoapi.h)
GetLocalTime function (sysinfoapi.h)
  • 2018.12.05
  • windows-sdk-content
  • docs.microsoft.com
Retrieves the current local date and time.
Vladimir Karputov
Модератор
183471
Vladimir Karputov  

Вызовы WinAPI функций с недавних пор добавлены в MQL5:

//+------------------------------------------------------------------+
//|                                                 GetLocalTime.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#include <WinAPI\sysinfoapi.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   SYSTEMTIME system_time;
   GetLocalTime(system_time);
   PrintFormat("Year=%d, Month=%d, DayOfWeek=%d, Day=%d, Hour=%d, Minute=%d, Second=%d, Milliseconds=%d",
               system_time.wYear,system_time.wMonth,system_time.wDayOfWeek,system_time.wDay,
               system_time.wHour,system_time.wMinute,system_time.wSecond,system_time.wMilliseconds);
  }
//+------------------------------------------------------------------+

Результат:

2019.04.21 18:52:34.353 Year=2019, Month=4, DayOfWeek=0, Day=21, Hour=18, Minute=52, Second=34, Milliseconds=340
2019.04.21 18:54:13.830 Year=2019, Month=4, DayOfWeek=0, Day=21, Hour=18, Minute=54, Second=13, Milliseconds=818


Добавлено: а вот запуск в тестере:

2019.04.03 00:00:00   Year=2019, Month=4, DayOfWeek=0, Day=21, Hour=18, Minute=59, Second=14, Milliseconds=254
Файлы:
Yury Kirillov
5298
Yury Kirillov  
Edgar:

Я использую GetTickCount() в OnInit  и OnDeinit. Разница и есть время выполнения (если нужно именно это).

Спасибо! Как раз то, что нужно.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий