Новая версия платформы MetaTrader 5 build 3520: добавлена 2FA/TOTP аутентификация с помощью Google Authenticator - страница 2
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В TaskManager (b3521) нарываюсь на нулевые значения.
Есть большие подозрения, что Sleep(1) выполняется на последних версиях Windows 10 строго 16 мс(среднее время). Запустил проверку времени исполнения Sleep(1). Сделал тест на трех ноутах и одном ПК.
Windows 10 стоит на 1 слабом ноуте и на ноуте купленном 3 года назад и старом ПК. Везде Sleep(1) выполняется 16 мс. Хотя два года назад я выкладывал тесты на том же ПК на той же Windows 10, но более ранней сборки, было 2 мс.
Запустил проверку и на древнем ноуте где стоит Windows 8.1 . Получил время выполнения 2 мс.
Начал копать в сторону Current timer resolution. На всех машинах стоит 1 mc. Причем на всех WIndows 10 измение
Current timer resolution не сказывается на времени выполнения Sleep(1), а на древнем ноуте, где стоит восьмерка удалось уменьшить время выполнения до 1.5 мс.
Стал читать в интернете на набрел на статью на habr. Так сказано
Прошу сделать время выполнение Sleep(1) на Windows 10, последних версий, такой же как и на Windows 8 хотя бы 1-2 мс. Было бы вообще супер, чтобы минимальное время между вызовами OnTimer() также было порядка 1-2 мс, а не как сейчас 16 мс на любой версии Windows 10 и Windows 8. Вот скрипт с помощью которого измерял:
Статья с habr https://habr.com/ru/post/651237/
TaskManager меняет соответствующие значения.
Просьба рассказать, что обозначает каждое значение.
Сам пытаюсь найти решение, как определить, что какой-либо советник живой - запускается OnTick на событие NewTick. Нужно для того, чтобы сразу определять отвалившийся от торговли робот.
3521
В цикле заполняю кастомный символ, историческими минутными данными, длиной где-то два с половиной года, с помощью
CustomRatesUpdate();
В OHLC записываю одинаковое значение,только Open.
На каком-то моменте цикла, заполнение перестаёт работать, это видно по кастомному графику который перестаёт заполнятся.
Происходит какой-то клинч, и кастомный график мёртвый, никак не реагирует на мышь.
Хотя цикл продолжает успешно работать до конца. По принту это видно.
Но в историю данные больше не пишутся. После завершения цикла, график так и остаётся безжизненным.
Удаляю из кастом папки записанную корявую тиковую и ohlc историю, перезагружаю терминал, запускаю заново цикл.
Всё то-же самое.
В логе какой-то инвалид с датой (1970.01.01)
Перепроверил заливаемые данные, такая дата у меня в данных отсутствует.
С
CustomTicksAdd();
тоже какие-то непонятки.
Цикл идёт, а заполнение не происходит.
Просьба исправить.
UPD.
Удаляю кастом папку истории по символу.
Записываю только один Октябрь месяц за 2022 год.
А в папке вакханалия получается.
И кажется многовато для одного месяца заняло места 2022.hcc
Есть большие подозрения, что Sleep(1) выполняется на последних версиях Windows 10 строго 16 мс(среднее время).
Если установить таймер Windows на 1мс, sleep(1) выполняется чуть меньше 2мс.
А OnTimer() где-то с версии 13хх перестал правильно работать. И никому до этого дела нет. Нужно было выравнивать секундные интервалы с точностью до 1 мс. Пришлось делать "вручную". Благо теперь есть winapi\sysinfoapi.mqh.
А OnTimer() где-то с версии 13хх перестал правильно работать. И никому до этого дела нет. Нужно было выравнивать секундные интервалы с точностью до 1 мс. Пришлось делать "вручную". Благо теперь есть winapi\sysinfoapi.mqh.
Реализовывал выравнивание в виде одной строки.
Если установить таймер Windows на 1мс, sleep(1) выполняется чуть меньше 2мс.
А OnTimer() где-то с версии 13хх перестал правильно работать. И никому до этого дела нет. Нужно было выравнивать секундные интервалы с точностью до 1 мс. Пришлось делать "вручную". Благо теперь есть winapi\sysinfoapi.mqh.
Спасибо. Получилось.
Сам пытаюсь найти решение, как определить, что какой-либо советник живой - запускается OnTick на событие NewTick. Нужно для того, чтобы сразу определять отвалившийся от торговли робот.
Можно просто в начале OnTick записывать глобальную переменную терминала время вызова. А потом с помощью другого советника смотреть на графике последние время работы всех советников или выводить Alert если какой нибудь их советников долго не подает признаки жизни. Можно вообще записывать периодически время вызова функций на диск. Синхронизировать папку где лежит файл с помощью Sync. Таким образом можно получать данные о работе всех терминалов даже из разных локальных сетей.
Можно просто в начале OnTick записывать глобальную переменную терминала время вызова. А потом с помощью другого советника смотреть на графике последние время работы всех советников или выводить Alert если какой нибудь их советников долго не подает признаки жизни. Можно вообще записывать периодически время вызова функций на диск. Синхронизировать папку где лежит файл с помощью Sync. Таким образом можно получать данные о работе всех терминалов даже из разных локальных сетей.
Спасибо, буду думать над оптимальным решением.
Реализовывал выравнивание ...
На мой взгляд для торговли гораздо полезней абсолютный, а не относительный таймер. Чтоб можно было написать что-то типа OnTimer(ulong time_of_event), где time_of_event - UNIX время в мс. Очень полезно, если данные принимаются с разных площадок.
PS:
Локальное время синхронизирую с серверами ВНИИФТРИ. В рабочее время точность не хуже +/- 2мс.