Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

High-Performance Time Functions (TimeUtils) - библиотека для MetaTrader 5

Просмотров:
47
Рейтинг:
(11)
Опубликован:
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Эта библиотека содержит более 80 различных функций для работы с временными переменными. Основная цель - предоставить высокопроизводительные функции времени. Режим производительности (которым можно управлять во время компиляции с помощью #define) по умолчанию отключен. Этот режим не является обязательным условием для включения библиотеки в ваши проекты, так как она может быть включена и без него.


TIMEUTILS_PERFORMANCE_MODE

Опционально, режим performance-mode может быть включен во время компиляции через #defines перед #include:

// включите режим производительности для библиотеки
#define  TIMEUTILS_PERFORMANCE_MODE
#include "TimeUtils.mqh"

Это перенаправит все вызовы встроенных в MQL функций TimeToStruct и StructToTime на более эффективные альтернативы.

Вы можете скомпилировать скрипт "performance_mode.mq5" с TIMEUTILS_PERFORMANCE_MODE и без него, чтобы проверить разницу в скорости на вашей машине. Это будет полезно для высокопроизводительных программ, выполняющих тяжелые или связанные с большим количеством времени задачи (например, сканирование всей истории котировок на наличие баров H1 в начале торговых недель или сбор другой статистики).


Перечисление всех функций в библиотеке:

Названия функций должны быть понятны; также вы можете найти краткое описание конкретной функции в файле TimeUtils.mqh.

//+==================================================================+
//| Создайте время даты из компонентов|
//+==================================================================+
datetime CreateDateTime(
   const int year,           // Год
   const int mon,            // Месяц
   const int day,            // День
   const int hour = 0,       // Час
   const int min = 0,        // Минуты
   const int sec = 0         // Секунды
   )
datetime CreateDateTime(MqlDateTime&  dt_struct);  // быстрая альтернатива StructToTime()

//+==================================================================+
//| Разбить datetime на компоненты|
//+==================================================================+
bool TimeToStructFast(
   datetime      dt,         // Значение даты для преобразования
   MqlDateTime&  dt_struct   // структура для принятия ценностей
   )

//+==================================================================+
//| Извлеките компоненты datetime: Воскресенье, yyyy.mm.dd hh:mm:ss |
//| Get() Units|
//+==================================================================+
int GetSecond(datetime t)
int GetMinute(datetime t)
int GetHour(datetime t)
int GetDay(datetime t)
int GetMonth(datetime t)
int GetYear(datetime t)

//+==================================================================+
//| День() Число|
//+==================================================================+
int DayOfWeek(datetime t)
int DayOfYear(datetime t)
int DayIndex(datetime t)

//+==================================================================+
//| Week() Number|
//+==================================================================+
int WeekOfMonth(const datetime t, bool StartsOnMonday = false)
int WeekOfYear(const datetime t, bool StartsOnMonday = false)
int WeekIndex(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| StartOf() Units|
//+==================================================================+
datetime StartOfMinute(datetime t)
datetime StartOfHour(datetime t)
datetime StartOfDay(datetime t)
datetime StartOfWeek(datetime t, bool StartsOnMonday = false)
datetime StartOfMonth(datetime t)
datetime StartOfYear(datetime t)

//+==================================================================+
//| EndOf() Units|
//+==================================================================+
datetime EndOfMinute(datetime t)
datetime EndOfHour(datetime t)
datetime EndOfDay(datetime t)
datetime EndOfWeek(datetime t, bool StartsOnMonday = false)
datetime EndOfMonth(datetime t)
datetime EndOfYear(datetime t)

//+==================================================================+
//| SecsElapsedOf() Units|
//+==================================================================+
int SecsElapsedOfMinute(datetime t)
int SecsElapsedOfHour(datetime t)
int SecsElapsedOfDay(datetime t)
int SecsElapsedOfWeek(datetime t, bool StartsOnMonday = false)
int SecsElapsedOfMonth(datetime t)
int SecsElapsedOfYear(datetime t)

//+==================================================================+
//| RoundTo() / Nearest() Units|
//+==================================================================+
datetime RoundToMinute(datetime t)
datetime RoundToHour(datetime t)
datetime RoundToDay(datetime t)
datetime RoundToWeek(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| CeilTo() / Next() Units|
//+==================================================================+
datetime CeilToMinute(datetime t)
datetime CeilToHour(datetime t)
datetime CeilToDay(datetime t)
datetime CeilToWeek(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| Next() Weekday|
//+==================================================================+
datetime NextWeekday(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime NextSunday(datetime t)
datetime NextMonday(datetime t)
datetime NextTuesday(datetime t)
datetime NextWednesday(datetime t)
datetime NextThursday(datetime t)
datetime NextFriday(datetime t)
datetime NextSaturday(datetime t)

//+==================================================================+
//| Предыдущий() День недели|
//+==================================================================+
datetime PreviousWeekday(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime PreviousSunday(datetime t)
datetime PreviousMonday(datetime t)
datetime PreviousTuesday(datetime t)
datetime PreviousWednesday(datetime t)
datetime PreviousThursday(datetime t)
datetime PreviousFriday(datetime t)
datetime PreviousSaturday(datetime t)

//+==================================================================+
//| Nth() Weekday Of The Month|
//+==================================================================+
datetime FirstWeekdayOfTheMonth(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime LastWeekdayOfTheMonth(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime NthWeekdayOfTheMonth(datetime t, int Nth, ENUM_DAY_OF_WEEK weekday = SUNDAY)

//+==================================================================+
//| Add() Units|
//+==================================================================+
datetime AddSeconds(datetime t, int amount)
datetime AddMinutes(datetime t, int amount)
datetime AddHours(datetime t, int amount)
datetime AddDays(datetime t, int amount)
datetime AddBusinessDays(datetime t, int amount)
datetime AddWeeks(datetime t, int amount)
datetime AddMonths(datetime t, int amount)
datetime AddYears(datetime t, int amount)

//+==================================================================+
//| Sub() Units|
//+==================================================================+
datetime SubSeconds(datetime t, int amount)
datetime SubMinutes(datetime t, int amount)
datetime SubHours(datetime t, int amount)
datetime SubDays(datetime t, int amount)
datetime SubBusinessDays(datetime t, int amount)
datetime SubWeeks(datetime t, int amount)
datetime SubMonths(datetime t, int amount)
datetime SubYears(datetime t, int amount)

//+==================================================================+
//| DifferenceIn() Units|
//+==================================================================+
int DifferenceInCalendarDays(datetime beginTime, datetime endTime)
int DifferenceInBusinessDays(datetime beginTime, datetime endTime)
int DifferenceInCalendarWeeks(datetime beginTime, datetime endTime, bool StartsOnMonday = false)
int DifferenceInCalendarMonths(datetime beginTime, datetime endTime)

//+==================================================================+
//| IsSame() Units|
//+==================================================================+
bool IsSameMinute(datetime t1, datetime t2)
bool IsSameHour(datetime t1, datetime t2)
bool IsSameDay(datetime t1, datetime t2)
bool IsSameWeek(datetime t1, datetime t2, bool StartsOnMonday = false)
bool IsSameMonth(datetime t1, datetime t2)
bool IsSameYear(datetime t1, datetime t2)

//+==================================================================+
//| IsCurrent() Units|
//+==================================================================+
bool IsCurrentMinute(datetime t)
bool IsCurrentHour(datetime t)
bool IsCurrentWeek(datetime t, bool StartsOnMonday = false)
bool IsCurrentMonth(datetime t)
bool IsCurrentYear(datetime t)
bool IsToday(datetime t)
bool IsTomorrow(datetime t)
bool IsYesterday(datetime t)

//+==================================================================+
//| Misc|
//+==================================================================+
bool IsLeapYear(int year)
int  DaysInMonth(int year, int month)
datetime GetNthWeekdayInYearMonth(iYear, iMonth, Nth, weekday = SUNDAY)
datetime GetNthSundayInYearMonth(iYear, iMonth, Nth)

//+==================================================================+
//| Формирование времени в строку|
//+==================================================================+
string t2s(datetime t, const int mode = TIME_DATE | TIME_MINUTES)
string SecondsToString(int seconds)
string TimeFormat(datetime t, string format = "YYYY.MM.DD hh:mm")


Список всех доступных форматов времени:
.

//+------------------------------------------------------------------+
//| Получите отформатированное время в соответствии с переданной строкой лексем. |
//| Список всех доступных форматов:|
//| Формат вывода описания|
//| ------ ---------------- ------------------------------------- |
//| YY 18Двузначный год |
//| YYYY 2018 Четырехзначный год|
//| M 1-12Месяц, начиная с 1 |
//| MM 01-12 Месяц, двузначное число |
//| MMM Jan-Dec Сокращенное название месяца, 3 буквы |
//| MMMM Январь-декабрь Полное название месяца|
//| D 1-31День месяца |
//| DD 01-31День месяца, двузначное число |
//| DDD Sun-Sat Краткое название дня недели |
//| DDDD Sunday-Saturday Название дня недели |
//| h 0-23 Час|
//| hh 00-23 Час, двузначное число |
//| H 1-12Час, 12-часовые часы |
//| HH 01-12 Час, 12-часовые часы, 2-значные |
//| m 0-59 Минута|
//| mm 00-59 Минута, двузначное число |
//| s 0-59 Второй|
//| ss 00-59 Вторая, двузначная цифра |
//| A AM PM|
//| a am pm|
//+------------------------------------------------------------------+
//| Образцы форматов:|
//| "YYYY.MM.DD hh:mm" // "2024.12.08 22:05" (по умолчанию)|
//| "DDD, YYYY.MM.DD hh:mm:ss" // "Sun, 2024.12.08 22:05:21" |
//| "D MMMM YYYY, HH:mm a" // "8 декабря 2024, 10:05 pm" |
//| "DD/MM/YYY" // "08/12/2024"|
//+------------------------------------------------------------------+
string TimeFormat(const datetime t, const string format = "YYYY.MM.DD hh:mm");


В двух прилагаемых скриптах "basic.mq5" и "advanced.mq5" показаны примеры использования базового и расширенного форматов.

Пример вывода из скрипта "advanced.mq5":

/*
 Пример вывода:

 1. CreateDateTime(2022, 03, 25) = 2022.03.25 00:00:00
 [year] [mon] [day] [hour] [min] [sec] [day_of_week] [day_of_year]
 [0] 2024 12 18 17 27 25 3 352
 2. t2s(t, TIME_DATE|TIME_SECONDS) = Wed, 2024.12.18 18:27:25
 3. GetYear(t) = 2024
 4. GetMonth(t) = 12
 5. GetDay(t) = 18
 6. GetHour(t) = 18
 7. GetMinute(t) = 27
 8. GetSecond(t) = 25
 9. DayOfWeek(t) = 3
 10. DayOfYear(t) = 352
 11. DayIndex(t) = 20075
 12. WeekOfMonth(t) = 3
 13. WeekOfYear(t) = 51
 14. WeekIndex(t) = 2868
 15. WeekOfMonth(t, true) = 4
 16. WeekOfYear(t, true) = 51
 17. WeekIndex(t, true) = 2868
 18. StartOfMinute(t) = 2024.12.18 18:27:00
 19. StartOfHour(t) = 2024.12.18 18:00:00
 20. StartOfDay(t) = 2024.12.18 00:00:00
 21. StartOfWeek(t) = 2024.12.15 00:00:00
 22. StartOfWeek(t, true) = 2024.12.16 00:00:00
 23. StartOfMonth(t) = 2024.12.01 00:00:00
 24. StartOfYear(t) = 2024.01.01 00:00:00
 25. EndOfMinute(t) = 2024.12.18 18:27:59
 26. EndOfHour(t) = 2024.12.18 18:59:59
 27. EndOfDay(t) = 2024.12.18 23:59:59
 28. EndOfWeek(t) = 2024.12.21 23:59:59
 29. EndOfWeek(t, true) = 2024.12.22 23:59:59
 30. EndOfMonth(t) = 2024.12.31 23:59:59
 31. EndOfYear(t) = 2024.12.31 23:59:59
 32. SecsElapsedOfMinute(t) = 25
 33. SecsElapsedOfHour(t) = 1645
 34. SecsElapsedOfDay(t) = 66445
 35. SecsElapsedOfWeek(t) = 325645
 36. SecsElapsedOfWeek(t, true) = 239245
 37. SecsElapsedOfMonth(t) = 1535245
 38. SecsElapsedOfYear(t) = 30479245
 39. RoundToMinute(t) = 2024.12.18 18:27:00
 40. RoundToHour(t) = 2024.12.18 18:00:00
 41. RoundToDay(t) = 2024.12.19 00:00:00
 42. RoundToWeek(t) = 2024.12.22 00:00:00
 43. RoundToWeek(t, true) = 2024.12.16 00:00:00
 44. CeilToMinute(t) = 2024.12.18 18:28:00
 45. CeilToHour(t) = 2024.12.18 19:00:00
 46. CeilToDay(t) = 2024.12.19 00:00:00
 47. CeilToWeek(t) = 2024.12.22 00:00:00
 48. CeilToWeek(t, true) = 2024.12.23 00:00:00
 49. NextSunday(t) = 2024.12.22 00:00:00
 50. NextMonday(t) = 2024.12.23 00:00:00
 51. NextTuesday(t) = 2024.12.24 00:00:00
 52. NextWednesday(t) = 2024.12.25 00:00:00
 53. NextThursday(t) = 2024.12.19 00:00:00
 54. NextFriday(t) = 2024.12.20 00:00:00
 55. NextSaturday(t) = 2024.12.21 00:00:00
 56. ПредыдущееВоскресенье(t) = 2024.12.15 00:00:00
 57. PreviousMonday(t) = 2024.12.16 00:00:00
 58. PreviousTuesday(t) = 2024.12.17 00:00:00
 59. PreviousWednesday(t) = 2024.12.11 00:00:00
 60. PreviousThursday(t) = 2024.12.12 00:00:00
 61. PreviousFriday(t) = 2024.12.13 00:00:00
 62. PreviousSaturday(t) = 2024.12.14 00:00:00
 63. FirstWeekdayOfTheMonth(t, SUNDAY) = 2024.12.01 00:00:00
 64. LastWeekdayOfTheMonth(t, SUNDAY) = 2024.12.29 00:00:00
 65. AddSeconds(t, 30) = 2024.12.18 18:27:55
 66. AddMinutes(t, 30) = 2024.12.18 18:57:25
 67. AddHours(t, 2) = 2024.12.18 20:27:25
 68. AddDays(t, 10) = 2024.12.28 18:27:25
 69. AddBusinessDays(t, 10) = 2025.01.01 18:27:25
 70. AddWeeks(t, 4) = 2025.01.15 18:27:25
 71. AddMonths(t, 2) = 2025.02.18 18:27:25
 72. AddYears(t, 5) = 2029.12.18 18:27:25
 73. SubSeconds(t, 30) = 2024.12.18 18:26:55
 74. SubMinutes(t, 30) = 2024.12.18 17:57:25
 75. SubHours(t, 2) = 2024.12.18 16:27:25
 76. SubDays(t, 10) = 2024.12.08 18:27:25
 77. SubBusinessDays(t, 10) = 2024.12.04 18:27:25
 78. SubWeeks(t, 4) = 2024.11.20 18:27:25
 79. SubMonths(t, 2) = 2024.10.18 18:27:25
 80. SubYears(t, 5) = 2019.12.18 18:27:25
 81. DifferenceInCalendarDays(t, AddWeeks(t, 9)) = 63
 82. DifferenceInBusinessDays(t, AddWeeks(t, 9)) = 45
 83. DifferenceInCalendarWeeks(t, AddWeeks(t, 9)) = 9
 84. DifferenceInCalendarWeeks(t, AddWeeks(t, 9), true) = 9
 85. DifferenceInCalendarMonths(t, AddWeeks(t, 9)) = 2
 86. IsSameMinute(t, AddHours(t, 25)) = false
 87. IsSameHour(t, AddHours(t, 25)) = false
 88. IsSameDay(t, AddHours(t, 25)) = false
 89. IsSameWeek(t, AddHours(t, 25)) = true
 90. IsSameWeek(t, AddHours(t, 25), true) = true
 91. IsSameMonth(t, AddHours(t, 25)) = true
 92. IsSameYear(t, AddHours(t, 25)) = true
 93. IsCurrentMinute(t) = false
 94. IsCurrentHour(t) = false
 95. IsCurrentWeek(t) = true
 96. IsCurrentWeek(t, true) = true
 97. IsCurrentMonth(t) = true
 98. IsCurrentYear(t) = true
 99. IsToday(t) = true
 100. IsTomorrow(t) = false
 101. IsYesterday(t) = false
 102. IsLeapYear(2100) = false
 103. DaysInMonth(2024, 2) = 29
 104. GetNthWeekdayInYearMonth(2024, 1, 1, SUNDAY) = 2024.01.07 00:00:00
 105. t2s(TimeCurrent()) = Wed, 2024.12.18 17:27
 106. SecondsToString(SecsElapsedOfDay(TimeCurrent()) = 17:27:25
 107. TimeFormat(TimeCurrent(), YYYY.MM.DD hh:mm) = 2024.12.18 17:27
 108. TimeFormat(TimeCurrent(), DDD, YYYY.MM.DD hh:mm:ss) = Wed, 2024.12.18 17:27:25
 109. TimeFormat(TimeCurrent(), D MMM YYYY, HH:mm a) = 18 Dec 2024, 05:27 pm

*/


Обновления:

2024.12.03 - v.1.10 : Первоначальный выпуск.

2024.12.05 - v.1.15 : Добавлены функции для рабочих дней и для N-го() дня недели месяца. Оптимизированы вычисления в функции DaysInMonth().

2024.12.09 - v.1.20 : Добавлена функция TimeFormat() для форматирования времени в соответствии с переданной строкой токенов.

2024.12.09 - v.1.25 : Оптимизированы вычисления в функции TimeToStructFast().

2024.12.10 - v.1.30 : Оптимизированы функции TimeFormat(), StartOfYear() и EndOfYear(). Обновлены описания некоторых функций.

2024.12.15 - v.1.35 : Оптимизирована функция GetNthWeekdayInYearMonth().

2024.12.18 - v.1.40 : Добавлены функции IsCurrentXXX(), IsToday(), IsTomorrow() и IsYesterday().

2024.12.19 - v.1.45 : Оптимизированы функции AddMonths() и GetNthWeekdayInYearMonth().

2024.12.20 - v.1.50 : Больше чистки кода.

2024.12.21 - v.1.55 : Упрощены вычисления в AddMonths(): сложная логика корректировки месяцев и лет заменена на более простой расчет общего количества месяцев.



Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/53970

Копирайтер Копирайтер

Добрый день, я новичок в metatrader5, создаю робота для копирования сделок с демо-счета и сохранения их в базе данных, хотелось бы получить помощь в определении возможных проблем, лучших решений для кода и т.д.

MarketPredictor MarketPredictor

MarketPredictor для MetaTrader 5 MarketPredictor - это инновационный советник для MetaTrader 5, который использует математические модели, такие как синусоидальные функции, быстрое преобразование Фурье (FFT), сигмоидальные функции и моделирование Монте-Карло для анализа и прогнозирования движения рынка. Этот проект предназначен для разработчиков, любителей математики и трейдеров, заинтересованных в объединении технологических и финансовых инноваций. Не стесняйтесь предлагать, обсуждать и реализовывать идеи кода прямо в этой теме. Будь то новые функции, предложения по улучшению или стратегии - любой вклад приветствуется для дальнейшего развития и оптимизации MarketPredictor. Вы также можете добавить меня, чтобы уточнить вопросы в частном порядке, сотрудничать с проектом на GitHub или отправить мне свой отзыв напрямую. Давайте вместе приготовим что-то потрясающее и поднимем этот проект на новый уровень!

YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя

Скрипт рисует уровни Рудолфа Акселя

YURAZ_MCCH YURAZ_MCCH

Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.