Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пожалуйста, посмотрите в английском разделе:
В английском разделе https://www.mql5.com/en/code/53970 тоже 2024 год.
Ещё-бы с iBarShift(...) что-то сделать, функция часто применяемая.
Есть примеры, как её можно ускорить? И заодно тогда iTime, iHigh и т.п.
Надо предложить разработчикам варианты.
Реализовано в сборке 6002, доступной на MetaQuotes-Demo
Нам даже удалось превзойти его с первой попытки.
Спасибо за пример!
Форум по трейдингу, автоматизированным торговым системам и тестированию торговых стратегий
Особенности языка MQL5, тонкости и хитрости
amrali, 03.07.2026 01:23
Тесты производительности:
Версия компилятора: 6013:
Спасибо.
Если не получается скомпилировать код, потому что есть ошибки в неиспользуемой функции, то проблему можно быстро решить через прописывание такой строки.
Я ещё раз изучил результаты предыдущих тестов и заметил нечто, что, возможно, объясняет столь значительный разрыв в производительности.
Я подозреваю, что текущая реализация в версии компилятора 6013 использует арифметику со знаком, тогда как исходная эталонная реализация Нери-Шнайдера основана на арифметике без знака.
Чтобы сделать тест более объективным, я изменил функцию `TimeToStructFast()`, чтобы она выполняла ту же проверку входных данных (здесь), что и встроенная функция `TimeToStruct()`:
Это добавляет ту же проверку диапазона перед преобразованием, что делает сравнение более прямым.
С учётом дополнительной проверки обновлённые результаты (в прилагаемом скрипте) следующие:
Даже после добавления дополнительной проверки диапазона функция ` TimeToStructFast()` по-прежнему работает примерно на 35 % быстрее, чем встроенная функция `TimeToStruct() ` , при этом выдавая идентичные контрольные суммы.
Функция TimeToStruct_Signed() демонстрирует производительность, сопоставимую со встроенной функцией TimeToStruct().
Если моё предположение относительно арифметики со знаком и без знака верно, то в встроенной реализации, возможно, ещё есть место для дальнейшей оптимизации.
Форум, посвящённый торговле, автоматизированным торговым системам и тестированию торговых стратегий
Библиотеки: Высокопроизводительные функции работы со временем (TimeUtils)
amrali, 18.07.2026 17:47
Обновление от 18 июля 2026 г. — версия 2.50
Обновления доступны только в английской версии на сайте https://www.mql5.com/ru/code/53970
Я еще раз проанализировал результаты предыдущих тестов и заметил нечто, что может объяснить столь значительный разрыв в производительности.
Я подозреваю, что текущая реализация в версии компилятора 6013 использует арифметику со знаком, тогда как исходная эталонная реализация Нери-Шнайдера основана на арифметике без знака.
Чтобы сделать тест более объективным, я модифицировал функцию `TimeToStructFast()`, чтобы она выполняла ту же проверку входных данных (здесь), что и встроенная функция `TimeToStruct()`:
Это добавляет ту же проверку диапазона перед преобразованием, что делает сравнение более прямым.
С учётом дополнительной проверки обновлённые результаты (в прилагаемом скрипте) следующие:
Даже после добавления дополнительной проверки диапазона функция TimeToStructFast() по-прежнему работает примерно на 35 % быстрее, чем встроенная функция TimeToStruct(), при этом выдавая идентичные контрольные суммы.
Функция TimeToStruct_Signed() демонстрирует производительность, сопоставимую со встроенной функцией TimeToStruct().
Если моё предположение относительно арифметики со знаком и без знака верно, то во встроенной реализации, возможно, ещё есть возможности для дальнейшей оптимизации.
Я еще раз проанализировал результаты предыдущих тестов и заметил нечто, что может объяснить столь значительный разрыв в производительности.
Я подозреваю, что текущая реализация в версии компилятора 6013 использует арифметику со знаком, тогда как исходная эталонная реализация Нери-Шнайдера основана на арифметике без знака.
Чтобы сделать тест более объективным, я модифицировал функцию `TimeToStructFast()`, чтобы она выполняла ту же проверку входных данных (здесь), что и встроенная функция `TimeToStruct()`:
Это добавляет ту же проверку диапазона перед преобразованием, что делает сравнение более прямым.
С учётом дополнительной проверки обновлённые результаты (в прилагаемом скрипте) следующие:
Даже после добавления дополнительной проверки диапазона функция TimeToStructFast() по-прежнему работает примерно на 35 % быстрее, чем встроенная функция TimeToStruct(), при этом выдавая идентичные контрольные суммы.
Функция TimeToStruct_Signed() демонстрирует производительность, сопоставимую со встроенной функцией TimeToStruct().
Если моё предположение относительно арифметики со знаком и без знака верно, то во встроенной реализации, возможно, ещё есть возможности для дальнейшей оптимизации.
Похоже, проблема устранена (как экспериментальный ребут в версию 6002)