в смысле что TimeToStruct обычно применяется в паре с обратной функцией StructToTime
найти "первый понедельник предыдущего месяца" , "начало текущего квартала" etc.
А просто разложить текущую дату на день-месяц-год (чтобы знать) бывает нужно раз в сутки и этот момент не критичен. Никто-же не вызывает TimeToStruct на каждом тике :-)
Чтобы найти "первый понедельник предыдущего месяца", "начало текущего квартала" и т.д.
А просто разложить текущую дату на день-месяц-год (узнать) может понадобиться раз в день и этот момент не критичен. Никто же не вызывает TimeToStruct на каждом тике :-)
Мне приходилось вызывать dt.day_of_week 500k раз в цикле, который сканирует историю. Так и получилось.
Я пробежался по нему, и кажется, что все операции структурированы наиболее эффективным образом. Я не думаю, что можно еще что-то улучшить, но я уже говорил об этом раньше. - Очевидно, я ошибался.
Эта функция указывает на наличие/отсутствие определенной оптимизации компилятора, а не на наличие/отсутствие одноименного флага GUI компилятора.
Пожалуйста, дайте ссылку на эту тему.
TimeUtilsверсии 1.10был опубликован в кодовой базе.
https://www.mql5.com/en/code/53970
Рассмотрим этоткод старого образца для поиска значения в статическом массиве:
Теперь статические массивы оцениваются во время выполнения, поэтому мы можем переопределить массив как:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
Dominik Egert, 2024.11.28 15:37
Немного более оптимизированная версия:
Скорее всего, так быстрее будет.
А обратно ?
в смысле что TimeToStruct обычно применяется в паре с обратной функцией StructToTime
найти "первый понедельник предыдущего месяца" , "начало текущего квартала" etc.
А просто разложить текущую дату на день-месяц-год (чтобы знать) бывает нужно раз в сутки и этот момент не критичен. Никто-же не вызывает TimeToStruct на каждом тике :-)
А обратно ?
Частично обсуждалось.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
amrali, 2024.12.03 20:05
TimeUtilsверсии 1.10был опубликован в кодовой базе.
https://www.mql5.com/en/code/53970
Чтобы найти "первый понедельник предыдущего месяца", "начало текущего квартала" и т.д.
А просто разложить текущую дату на день-месяц-год (узнать) может понадобиться раз в день и этот момент не критичен. Никто же не вызывает TimeToStruct на каждом тике :-)
Самая быстрая замена встроенной функции TimeToStruct(),
я предлагаю использовать эту функцию:
Ускорение примерно в 4-5 раз (для версии без кэша).
После применения оптимизаций из статьи "Евклидовы аффинные функции и их применение к алгоритмам календаря ":
Результаты:
/* Compiler Version: 4620, X64 Regular 13th Gen Intel Core i3-1305U, AVX2 + FMA3 1970.01.01 00:05:17 - 2099.11.29 23:56:35, random datetimes[] 5.20 ns, checksum = 151984615301017 // TimeToStruct2100 5.18 ns, checksum = 151984615301017 // TimeToStructFast 4.52 ns, checksum = 151984615301017 // TimeToStructFast2 4.87 ns, checksum = 151984615301017 // TimeToCalendar 5.62 ns, checksum = 151984615301017 // TimeToJulian 23.08 ns, checksum = 151984615301017 /// MQL's TimeToStruct() */После применения оптимизаций из статьи "Евклидовы аффинные функции и их применение к алгоритмам календаря ":
Спасибо, очень интересное решение.
Вы можете использовать меньшие числа в выражении.
После применения оптимизаций из этой статьи "Евклидовы аффинные функции и их применение к календарным алгоритмам":
Результаты: