Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Встречайте учебник «Программирование на MQL5 для трейдеров»
fxsaber, 2024.04.05 09:23
Случайно через поиск на сайте узнал важные подробности про TimeTraderServer.
Обнаружил, что из ME по CTRL+F1 на названии функции можно сразу попасть на эту справку.
Спасибо за Учебник и интеграцию!
Посмотрите обсуждение.
- 2024.04.05
- amrali
- www.mql5.com
Обсуждение лишь фиксирует наличие проблемы, но не предлагает решения.
В качестве заплатки лучшее это "Get both, TimeCurrent and TimeTradeServer, return TimeCurrent if it's greater than TimeTradeServer, else return TimeTradeServer. "
Обсуждение лишь фиксирует наличие проблемы, но не предлагает решения.
В качестве заплатки лучшее это "Get both, TimeCurrent and TimeTradeServer, return TimeCurrent if it's greater than TimeTradeServer, else return TimeTradeServer. "
Лучше проверять TerminalInfoInteger(TERMINAL_CONNECTED), как уже было предложено в английской ветке. Было бы странно запрашивать время сервера, не имея коннекта к нему.
Получился такой код:
datetime TimeServer()
{ datetime tts=0;
datetime tc=TimeCurrent();
if (TerminalInfoInteger(TERMINAL_CONNECTED)) tts = TimeTradeServer();
if (tc>tts) return(tc);
else return(tts);
}
Сейчас при старте терминала имеем равенство TimeTradeServer() ==TimeGMT()
Это никуда не годится!
Предлагаю простое решение:
Если терминал запущен первый раз, то ищется значение разницы TimeCurrent()-TimeLocal(), если есть доступ к серверу, вписывается в настройку TimeTradeServer();
Терминал при его закрытии запоминает в своих текущих настройках значение разницы TimeCurrent()-TimeLocal(), если есть доступ к серверу;
При следующем запуске использует при открытии эту разницу для установки времени TimeTradeServer() и проверяется не изменилась ли разница;
Тогда только самый первый запуск терминала будет иметь не правильное значение TimeTradeServer().
Все последующие уже будут в порядке.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Согласно документации:
TimeTradeServerTimeTradeServer Возвращает расчетное текущее время торгового сервера. В отличие от функции TimeCurrent(), расчет значения времени производится в клиентском терминале и зависит от настроек времени на компьютере пользователя. При работе в тестере стратегий время TimeTradeServer() моделируется в соответствии с историческими данными и всегда равно TimeCurrent().
У меня в индикаторе получается, что при инициализации значение TimeTradeServer() на три часа меньше значения TimeCurrent().
А при следующем вызове таймера получает правильное значение.