Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Размещай ссылки на чужие сигналы и зарабатывай
Stanislav Korotky
17924
Stanislav Korotky 2010.09.02 22:38 

С какой точностью эмулируется время в тестере в потиковом режиме? Поставил в коде по 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

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

Nikolay Demko
12464
Nikolay Demko 2010.09.03 00:40  
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 будет работать?
Sergey Gritsay
6471
Sergey Gritsay 2010.09.03 06:33  
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 варианта функции.

Vladimir Batrudinov
4926
Vladimir Batrudinov 2010.09.03 08:48  
sergey1294:

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

TimeCurrent

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

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

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

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

В MT5 работает.

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

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

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

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