Особенности языка mql5, тонкости и приёмы работы - страница 273
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добавил его сюда.
Действительно, ваша версия самая быстрая. Поздравляю!
Это самый быстрый вариант, который я смог найти.
Еще один очень быстрый вариант - использование вычислительного календаря (фиктивного календаря, начинающегося 1 марта), который позволяет избежать проблемы с високосными годами.
Это новый алгоритм и очень быстрый. Посмотреть его можно здесь https://www.youtube.com/watch?v=0s9F4QWAl-E&t=1790s.
Источник: https: //searchfox.org/mozilla-central/source/js/src/jsdate.cpp#263
https://github.com/torvalds/linux/blob/276010551664f73b6f1616dde471d6f0d63a73ba/kernel/time/timeconv.c#L77
Высокопроизводительные (по сравнению со встроенными) функции времени, собранные с разных страниц этой темы (чтобы не потерялись):
Я планирую опубликовать его в кодовой базе, возможно, после добавления некоторых других полезных функций.
Это самый быстрый вариант, который я смог найти.
Еще один очень быстрый вариант - использование вычислительного календаря (фиктивного календаря, начинающегося 1 марта), который позволяет избежать проблемы с високосными годами.
Это новый алгоритм и очень быстрый. Посмотреть его можно здесь https://www.youtube.com/watch?v=0s9F4QWAl-E&t=1790s.
Источник: https: //searchfox.org/mozilla-central/source/js/src/jsdate.cpp#263
https://github.com/torvalds/linux/blob/276010551664f73b6f1616dde471d6f0d63a73ba/kernel/time/timeconv.c#L77
Реальный тест в реальном времени:
TimeToStruct 2024.11.26 17:03:55.501 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.092. Test passed in 0:01:43.931.
TimeToStruct2100Old 2024.11.26 17:10:52.902 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.081. Test passed in 0:01:41.173.
TimeToCalendar 2024.11.26 17:25:37.672 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.088. Test passed in 0:01:40.153.
TimeToStructFast 2024.11.26 17:31:59.339 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.091. Test passed in 0:01:41.471.
TimeToStruct2100Last 2024.11.26 17:37:43.948 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.084. Test passed in 0:01:40.996.
TimeToStruct2100Cache 2024.11.26 17:42:40.774 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.091. Test passed in 0:01:40.585.
Это тест горячего старта со всеми данными в памяти.
Общее количество вызовов функции :
2024.11.26 17:48:38.190 Core 02 2024.09.29 23:59:59 TTS Call = 191969676.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
amrali, 2024.11.26 15:58
Самая быстрая замена встроенной функции TimeToStruct(),
я рекомендую использовать эту функцию:
Так заметно (AVX) быстрее.
Реальный тест в реальном времени:
TimeToStruct 2024.11.26 17:03:55.501 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.092. Test passed in 0:01:43.931.
TimeToStruct2100Old 2024.11.26 17:10:52.902 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.081. Test passed in 0:01:41.173.
TimeToCalendar 2024.11.26 17:25:37.672 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.088. Test passed in 0:01:40.153.
TimeToStructFast 2024.11.26 17:31:59.339 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.091. Test passed in 0:01:41.471.
TimeToStruct2100Last 2024.11.26 17:37:43.948 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.084. Test passed in 0:01:40.996.
TimeToStruct2100Cache 2024.11.26 17:42:40.774 Core 02 EURUSD,H1: 8667407 ticks, 37169 bars generated. Environment synchronized in 0:00:00.091. Test passed in 0:01:40.585.
Это тест горячего старта со всеми данными в памяти.
Общее количество вызовов функции :
2024.11.26 17:48:38.190 Core 02 2024.09.29 23:59:59 TTS Call = 191969676.
Спасибо Алену за тест. Замена на встроенную TimeToStruct() работает всего в 4-5 раз быстрее, как я уже сообщал.
Однако замена TimeYear(), TimeDayOfWeek() как минимум в 10-20 раз быстрее, чем использование MQL'овской TimeToStruct().
Этот код выполняется медленно при использовании оберток встроенного StructToTime.
Использование оптимизированных функций здесь очень помогает.
Еще один момент: распаковка (TimeToStruct) всегда быстрее, чем сжатие (StructToTime). Встроенный StructToTime действительно медленнее, чем TimeToStruct().
Если ваш код создает много переменных 'datetime' из компонентов времени, вы обнаружите, что CreateDateTime() намного быстрее, чем MQL'овская StructToTime().
Я столкнулся с проблемой медленной работы StructToTime() при создании переменных времени суток для перехода на летнее время в библиотеке TimeZoneInfo. Заменив ее на эту пользовательскую CreateDateTime(), я значительно улучшил скорость работы.
Так оно заметно (AVX) быстрее.
К сожалению, не быстрее, чем текущая реализация:
К сожалению, не быстрее, чем текущая реализация:
У меня иная картина. Поделитесь исходником скрипта, пожалуйста.
Вот ошибка от 31 января.
Которая является правильной :-)
Вы упустили, что day_of_year - это индекс, основанный на нуле. Таким образом, doy=31 означает на самом деле 1 февраля.
algo_checker.mq5:
Еще быстрее.
Браво, кажется, быстрее!
Мне следует провести более масштабное тестирование, прежде чем применять эти изменения к моей функции.
Вот улучшенный скрипт для бенчмарков: