Мелкая DLL с исходником - текущее время в микросекундном разрешении
Необходимость такой функции вызвана отсутствием аналога в платформе MT и полным недоверием серверным меткам времени. То что сервер проставляет в поля time_mcs тиков больше похоже на полную лажу, чем на правду.
Желающие могут переделать непосредственно на MQL, без дополнительной DLL, но мне как С-шнику проще так:
#ifndef MQL_MCS_H #define MQL_MCS_H 1 #define MQL_API(ret) __declspec(dllexport) ret __stdcall #include <stdint.h> MQL_API(uint64_t) mcs(void); #endif
#include <windows.h> #include <sysinfoapi.h> #include "mql_mcs.h" MQL_API(uint64_t) mcs(void) { FILETIME ft; //ZeroMemory(ft); GetSystemTimeAsFileTime(&ft); // 64-bit number of 100-nanosecond intervals since midnight Jan 1, 1601 long long nsc100 = (LONGLONG)ft.dwLowDateTime + ((LONGLONG)(ft.dwHighDateTime) << 32LL); // convert to unix epoch (since Jan 1, 1970) nsc100 = nsc100 - 116444736000000000LL; // 100 nsc = 0.1 mcs return (uint64_t)(nsc100/10L); }
время получается в микросекундах, без смещения таймзоны. То есть непосредственно UTC
мейк-файл в архиве сделан для GCC (собственно я только им и пользуюсь, обхожу визуальную студию за версту)
Файлы:
mql_mcs.zip
31 kb