Новая версия платформы MetaTrader 4 build 1170 - страница 17

 
fxsaber:

Тогда где можно взять миллисекунды?

 
Alexey Viktorov:

Тогда где можно взять миллисекунды?

Их нет в MT4 напрямую.

 
fxsaber:

Их нет в MT4 напрямую.

Ну, хоть накривую.

 
Alexey Viktorov:

Ну, хоть накривую.

Постоянная синхронизация под TimeCurrent микросекундного таймера + расчет времени от "чистой секунды" к моменту получения тика.

 
fxsaber:

Постоянная синхронизация под TimeCurrent микросекундного таймера + расчет времени от "чистой секунды" к моменту получения тика.

Об этом я думал перед экспериментами которые привели меня к таким ошибочным результатам. Но вот как синхронизировать микросекундный таймер под TimeCurrent... не хватило фантазии. И как вы себе представляете "расчет времени от "чистой секунды" к моменту получения тика."? Как запустить GetTickCount ровно в 00 секунд?

 
Alexey Viktorov:

Об этом я думал перед экспериментами которые привели меня к таким ошибочным результатам. Но вот как синхронизировать микросекундный таймер под TimeCurrent... не хватило фантазии. И как вы себе представляете "расчет времени от "чистой секунды" к моменту получения тика."? Как запустить GetTickCount ровно в 00 секунд?

Здесь посмотрите идею.

 
Вся беда в том, что GetTickCount возвращает количество миллисекунд от запуска компьютера. А какое время было при запуске никому не известно. Ну, разве-что специально записывать. И даже в этом случае будет ошибка в несколько секунд, не говоря уже о миллисекундах.
 
Igor Makanu:

Вы код @fxsaber смотрели? https://www.mql5.com/ru/forum/38456/page100#comment_6677928

там все есть, как я и писал, зачем нам 00, достаточно знать смещение GetTickCount()  при вызове от запомненного 

Смещение от чего? Кому-то надо смещение, а кому-то просто время с миллисекундами. Без какого либо смещения. Мы о разном говорим. Посмотрите время указанное слева.


Это локальное время с миллисекундами. Если в mql5 можно получить через SymbolInfoTick в структуру MqlTick, то в mql4 их никак не получить. Других целей нет и не было.

Если и говорить о смещении, то говорить о смещении от круглой секунды или от минуты:00 секунд. Другое смещение не интересует.


ps; Ну вот. Взял и удалил своё сообщение пока я отвечал. Зачем?...

 
Alexey Viktorov:

ps; Ну вот. Взял и удалил своё сообщение пока я отвечал. Зачем?...

решил покинуть эту дискуссию, я просмотрел код @fxsaber - там все есть и синхронизация с текущим временем сервера и получение времени в микросекундах

 
Alexey Viktorov:
Вся беда в том, что GetTickCount возвращает количество миллисекунд от запуска компьютера. А какое время было при запуске никому не известно. Ну, разве-что специально записывать. И даже в этом случае будет ошибка в несколько секунд, не говоря уже о миллисекундах.

Как только приходит тик - запоминаем время тика (сервера), запоминаем время компьютера и запоминаем текущий GetTickCount.
Всё, теперь мы знаем текущее значение времени брокера, текущее значение времени компьютера, и текущее значение таймера.

Дальше просто вычисляем 1000 мс = 1 сек

пс. ну и желательно, на каждом тике, проверять синхронность времён, если далеко разошлись - значит кто-то перевёл время или был разрыв связи, или еще чего - значит нужно синхронизировать заново.
Причина обращения: