Где взять время с миллисекундами?

 

Смотрю в лог-файлы терминала, вижу  12:41:32.818 в

"ER    0    12:41:32.818    Terminal    update C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5 folder started"

и слюнки текут. Где в программе на MQL5 добыть такое же шикарное время? TimeLocal дает без миллисекунд, GetTickCount в мс, но его старт привязан не к астрономическому времени, а к моменту запуска компьютера.

Может, кто-нибудь посоветует? Ведь сам-то терминал выдает время в таком виде, и оно связано с астрономическим (настолько же, насколько с ним связан ход системного таймера).

 

ПОИСК 

EventSetMillisecondTimer

 
Vladimir:

Смотрю в лог-файлы терминала, вижу  12:41:32.818 в

"ER    0    12:41:32.818    Terminal    update C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5 folder started"

и слюнки текут. Где в программе на MQL5 добыть такое же шикарное время? TimeLocal дает без миллисекунд, GetTickCount в мс, но его старт привязан не к астрономическому времени, а к моменту запуска компьютера.

Может, кто-нибудь посоветует? Ведь сам-то терминал выдает время в таком виде, и оно связано с астрономическим (настолько же, насколько с ним связан ход системного таймера).

Например ORDER_TIME_SETUP_MSC, ORDER_TIME_DONE_MSC, POSITION_TIME_MSC, DEAL_TIME_MSC

Как вариант:

TimeToString(HistoryOrderGetInteger(order_ticket,ORDER_TIME_SETUP),TIME_DATE|TIME_SECONDS)+"."+IntegerToString(HistoryOrderGetInteger(order_ticket,ORDER_TIME_SETUP_MSC)%1000,3,'0')
 
Структура MqlTick при запросе SymbolInfoTick()
 

Можно через dll. Включаем:

#include <WinAPI\sysinfoapi.mqh>

Получаем время:

        SYSTEMTIME time;
        GetLocalTime( time );
 

Спасибо тем, кто ответил. Уточню: речь идет не о моменте открытия сделки и не о моменте последнего тика. Просто само текущее время на компьютере.  Честно говоря, отметкам времени, проставленным на сервере, я не доверяю, поскольку крайне мало кто из ДЦ реализует хорошую синхронизацию времени с астрономическим. А на своем компьютере я добиваюсь погрешности до 12 мс от астрономического. Почему, стоит уйти из языков MQL, сразу появляется доступ к локальному времени, связаннному с системным таймером, с точностью в мс, даже до микросекунд, а в MQL4 и MQL5 только целые секунды, хотя сам терминал работает с этим временем и показывает мс? Вот это удивительно...

  Неужели придется устраивать танцы с экспериментальным определением положения концов круглых секунд в нумерации из GetTickCount? Может, есть доступ ко времени, которой выдается в лог-файлы? Или хотя бы можно обеспечить их запись и читать их, не закрывая терминал каждый раз? Тогда выводить в них номера из  GetTickCount и все...

Пока писал это, появилось сообщение с предложением выдергивать время из других программных сред через WinApi. Очень нравится.
Документация по MQL5: Общие функции / GetTickCount
Документация по MQL5: Общие функции / GetTickCount
  • www.mql5.com
GetTickCount - Общие функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir:

Спасибо тем, кто ответил. Уточню: речь идет не о моменте открытия сделки и не о моменте последнего тика. Просто само текущее время на компьютере.  Честно говоря, отметкам времени, проставленным на сервере, я не доверяю, поскольку крайне мало кто из ДЦ реализует хорошую синхронизацию времени с астрономическим. А на своем компьютере я добиваюсь погрешности до 12 мс от астрономического. Почему, стоит уйти из языков MQL, сразу появляется доступ к локальному времени, связаннному с системным таймером, с точностью в мс, даже до микросекунд, а в MQL4 и MQL5 только целые секунды, хотя сам терминал работает с этим временем и показывает мс? Вот это удивительно...

  Неужели придется устраивать танцы с экспериментальным определением положения концов круглых секунд в нумерации из GetTickCount? Может, есть доступ ко времени, которой выдается в лог-файлы? Или хотя бы можно обеспечить их запись и читать их, не закрывая терминал каждый раз? Тогда выводить в них номера из  GetTickCount и все...

как-то экспериментировал..но чё-то оно всё одно медленно "плыло" в милисек. и забил на это дело. Всё одно DLL использую, не грех и системное дёрнуть

 

GetTickCount не только не привязан, но еще и дискретизирован. Числа которые эта функция возвращает прыгают скачками на 15-16 мс.

В MT есть функция получения счетчиков микросекунд, но (почему-то) функция для локального времени ограничена точностью в 1 секунду. Поэтому используйте через dll.

Если захотеть можно получить локальное время даже точнее чем 1 мс, так как на современных компах локальные часы обычно имеют точность 100 мкс.

 

интересно правильно я Millisecond проверяю ???

//+------------------------------------------------------------------+
//|                                                      OnTimer.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input int  milliseconds=0;      // количество миллисекунд
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   EventSetMillisecondTimer(milliseconds);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| OnTimer tick function                                             |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   Print("Millisecond: ",milliseconds);
  }
//+------------------------------------------------------------------+

Millisecond

 
SanAlex:

интересно правильно я Millisecond проверяю ???


всё понял - всё работает как надо !

Millisecond 2

 
Ilya Baranov:

GetTickCount не только не привязан, но еще и дискретизирован. Числа которые эта функция возвращает прыгают скачками на 15-16 мс.

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