Точность эмуляции времени в тестере

 

С какой точностью эмулируется время в тестере в потиковом режиме? Поставил в коде по OnTick цикл до N (ставил 5) Sleep(5 секунд) и вывод времени в лог. В логе вывод происходит действительно каждые 5 секунд, но печать Print(TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS) выдает время нерегулярно, если можно так выразиться. Выглядит так:

22:11:23    2010.04.05 02:00:05   2010.04.05 02:00:00
22:11:23    2010.04.05 02:00:10   2010.04.05 02:00:00
22:11:23    2010.04.05 02:00:15   2010.04.05 02:00:00
22:11:23    2010.04.05 02:00:20   2010.04.05 02:00:00

Видно, что время тестере идет, секунды прибавляются, а время TimeCurrent() заморожено на каком-то непонятном значении. Причем на других вызовах (тиках) отрабатывает более осмысленно:

22:11:23    2010.04.05 16:15:00   2010.04.05 16:15:00
22:11:23    2010.04.05 16:15:05   2010.04.05 16:15:04
22:11:23    2010.04.05 16:15:10   2010.04.05 16:15:09

Что за неравномерность? И как лечить?

 
marketeer:

С какой точностью эмулируется время в тестере в потиковом режиме? Поставил в коде по OnTick цикл до N (ставил 5) Sleep(5 секунд) и вывод времени в лог. В логе вывод происходит действительно каждые 5 секунд, но печать Print(TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS) выдает время нерегулярно, если можно так выразиться. Выглядит так:

22:11:23    2010.04.05 02:00:05   2010.04.05 02:00:00
22:11:23    2010.04.05 02:00:10   2010.04.05 02:00:00
22:11:23    2010.04.05 02:00:15   2010.04.05 02:00:00
22:11:23    2010.04.05 02:00:20   2010.04.05 02:00:00

Видно, что время тестере идет, секунды прибавляются, а время TimeCurrent() заморожено на каком-то непонятном значении. Причем на других вызовах (тиках) отрабатывает более осмысленно:

22:11:23    2010.04.05 16:15:00   2010.04.05 16:15:00
22:11:23    2010.04.05 16:15:05   2010.04.05 16:15:04
22:11:23    2010.04.05 16:15:10   2010.04.05 16:15:09

Что за неравномерность? И как лечить?

Sleep() в тестере сроду не работал, с чего вы взяли что в мт5 будет работать?
 
marketeer:

С какой точностью эмулируется время в тестере в потиковом режиме? Поставил в коде по OnTick цикл до N (ставил 5) Sleep(5 секунд) и вывод времени в лог. В логе вывод происходит действительно каждые 5 секунд, но печать Print(TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS) выдает время нерегулярно, если можно так выразиться. Выглядит так:

22:11:23    2010.04.05 02:00:05   2010.04.05 02:00:00
22:11:23    2010.04.05 02:00:10   2010.04.05 02:00:00
22:11:23    2010.04.05 02:00:15   2010.04.05 02:00:00
22:11:23    2010.04.05 02:00:20   2010.04.05 02:00:00

Видно, что время тестере идет, секунды прибавляются, а время TimeCurrent() заморожено на каком-то непонятном значении. Причем на других вызовах (тиках) отрабатывает более осмысленно:

22:11:23    2010.04.05 16:15:00   2010.04.05 16:15:00
22:11:23    2010.04.05 16:15:05   2010.04.05 16:15:04
22:11:23    2010.04.05 16:15:10   2010.04.05 16:15:09

Что за неравномерность? И как лечить?

 документацию внимательно читали?

TimeCurrent

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это – время прихода последней котировки по любому символу, доступного в окне "Обзор рынка", то самое время, которое показано в заголовке этого окна. Значение времени формируется на торговом сервере и не зависит от настроек времени на компьютере пользователя. Существует 2 варианта функции.

 
sergey1294:

 документацию внимательно читали?

TimeCurrent

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это – время прихода последней котировки по любому символу, доступного в окне "Обзор рынка", то самое время, которое показано в заголовке этого окна. Значение времени формируется на торговом сервере и не зависит от настроек времени на компьютере пользователя. Существует 2 варианта функции.

Да ктож ее читает (хочется же думать, что баги преследуют нас нас на каждом шаге)? :)

Главное ведь в нашем нелегком деле общение...

 
Urain:
Sleep() в тестере сроду не работал, с чего вы взяли что в мт5 будет работать?

В MT5 работает.

 
Urain:
Sleep() в тестере сроду не работал, с чего вы взяли что в мт5 будет работать?

По приведенному логу отлично видно, что Sleep таки работает. Может он и в четверке не работал в плане задержки, но логическое время сдвигал? Сейчас нет времени проверять.

Про TimeCurrent - понятно. Читал, но упустил из виду. Учту в коде.