Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Facebook !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Bibliothèque

High-Performance Time Functions (TimeUtils) - bibliothèque pour MetaTrader 5

Vues:
180
Note:
(14)
Publié:
MQL5 Freelance Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance

Cette bibliothèque contient plus de 80 fonctions différentes pour traiter les variables temporelles. L'objectif principal est de fournir des fonctions temporelles très performantes. Le mode performance (qui peut être contrôlé à la compilation via une #define) est désactivé par défaut. Ce mode n'est pas une obligation pour inclure la bibliothèque dans vos projets, car elle peut être incluse normalement sans lui.


TIMEUTILS_PERFORMANCE_MODE

Optionnellement, le mode performance peut être activé à la compilation via #defines avant #include :

// activer le mode performance pour la bibliothèque
#define  TIMEUTILS_PERFORMANCE_MODE
#include "TimeUtils.mqh"

Cela redirigera tous les appels aux fonctions intégrées TimeToStruct et StructToTime de MQL vers des alternatives plus efficaces.

Vous pouvez compiler le script "performance_mode.mq5" avec et sans TIMEUTILS_PERFORMANCE_MODE pour vérifier la différence de vitesse sur votre machine. Cela sera bénéfique pour les programmes à haute performance qui effectuent des tâches lourdes ou liées au temps (par exemple, l'analyse de l'historique des cotations pour les barres H1 au début des semaines de négociation ou la collecte d'autres statistiques).


Liste de toutes les fonctions de la bibliothèque :

Les noms des fonctions devraient être explicites ; vous pouvez également trouver une brève description d'une fonction spécifique dans le fichier TimeUtils.mqh.

//+==================================================================+
//| Créer une date à partir de composants|
//+==================================================================+
datetime CreateDateTime(
   const int year,           // Année
   const int mon,            // Mois
   const int day,            // Jour
   const int hour = 0,       // Heure
   const int min = 0,        // Procès-verbal
   const int sec = 0         // Secondes
   )
datetime CreateDateTime(MqlDateTime&  dt_struct);  // alternative rapide à StructToTime()

//+==================================================================+
//| Rupture de l'intervalle de temps en Composants|
//+==================================================================+
bool TimeToStructFast(
   datetime      dt,         // Valeur de la date à convertir
   MqlDateTime&  dt_struct   // structure pour l'adoption de valeurs
   )

//+==================================================================+
//| Extraire les composants de l'heure de la date : dimanche, aaaa.mm.jj hh:mm:ss |
//| Get() Unités|
//+==================================================================+
int GetSecond(datetime t)
int GetMinute(datetime t)
int GetHour(datetime t)
int GetDay(datetime t)
int GetMonth(datetime t)
int GetYear(datetime t)

//+==================================================================+
//| Day() Nombre|
//+==================================================================+
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() Unités|
//+==================================================================+
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() Unités|
//+==================================================================+
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() Unités|
//+==================================================================+
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() Unités|
//+==================================================================+
datetime CeilToMinute(datetime t)
datetime CeilToHour(datetime t)
datetime CeilToDay(datetime t)
datetime CeilToWeek(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| Next() Jour de la semaine|
//+==================================================================+
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)

//+==================================================================+
//| Précédent() Jour de la semaine|
//+==================================================================+
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() Jour de la semaine du mois|
//+==================================================================+
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() Unités|
//+==================================================================+
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() Unités|
//+==================================================================+
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() Unités|
//+==================================================================+
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() Unités|
//+==================================================================+
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)

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

//+==================================================================+
//| Formatage du temps en chaîne|
//+==================================================================+
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")


Liste de tous les formats horaires disponibles :

//+------------------------------------------------------------------+
//| Obtenir l'heure formatée en fonction de la chaîne de caractères transmise. |
//| Liste de tous les formats disponibles :|
//| Format de sortie Description|
//| ------ ---------------- ------------------------------------- |
//| YY 18Année à deux chiffres
//| YYYY 2018 Année à quatre chiffres|
//| M 1-12Le mois, commençant à 1 |
//| MM 01-12 Le mois, 2 chiffres
//| MMM Jan-Dec Le nom du mois abrégé, 3 lettres |
//| MMMM Janvier-Décembre Le nom complet du mois|
//| D 1-31Le jour du mois |
//| DD 01-31Le jour du mois, 2 chiffres |
//| DDD Sun-Sat Nom abrégé du jour de la semaine.
//| DDDD Dimanche-Samedi Le nom du jour de la semaine |
//| h 0-23 L'heure|
//| hh 00-23 L'heure, 2 chiffres |
//| H 1-12L'heure, horloge de 12 heures |
//| HH 01-12 L'heure, horloge de 12 heures, 2 chiffres |
//| m 0-59 La minute|
//| mm 00-59 Les minutes, 2 chiffres
//| s 0-59 La seconde|
//| ss 00-59 Le second, à 2 chiffres |
//| A AM PM|
//| a am pm|
//+------------------------------------------------------------------+
//| Formats d'échantillons :|
//| "YYYY.MM.DD hh:mm" // "2024.12.08 22:05" (par défaut) |
//| "DDD, YYYY.MM.DD hh:mm:ss" // "Sun, 2024.12.08 22:05:21" |
//| "D MMMM YYYY, HH:mm a" // "8 décembre 2024, 10:05 pm" |
//| "DD/MM/YYYY" // "08/12/2024"|
//+------------------------------------------------------------------+
string TimeFormat(const datetime t, const string format = "YYYY.MM.DD hh:mm");


Les deux scripts joints "basic.mq5" et "advanced.mq5" montrent des exemples d'utilisation de base et avancée.

Un exemple de sortie du script "advanced.mq5" :

/*
 exemple de sortie :

 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. SemaineMois(t) = 3
 13. Semaine de l'année(t) = 51
 14. WeekIndex(t) = 2868
 15. SemaineMois(t, true) = 4
 16. Semaine de l'année(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. Début de semaine(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. Fin de semaine(t) = 2024.12.21 23:59:59
 29. Fin de semaine(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. ProchainMardi(t) = 2024.12.24 00:00:00
 52. ProchainMercredi(t) = 2024.12.25 00:00:00
 53. ProchainJeudi(t) = 2024.12.19 00:00:00
 54. ProchainVendredi(t) = 2024.12.20 00:00:00
 55. NextSaturday(t) = 2024.12.21 00:00:00
 56. PreviousSunday(t) = 2024.12.15 00:00:00
 57. PrécédentLundi(t) = 2024.12.16 00:00:00
 58. PreviousTuesday(t) = 2024.12.17 00:00:00
 59. PrécédentMercredi(t) = 2024.12.11 00:00:00
 60. PrécédentJeudi(t) = 2024.12.12 00:00:00
 61. PrécédentVendredi(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. Sous-semaines(t, 4) = 2024.11.20 18:27:25
 79. Sous-Mois(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

*/


Mises à jour :

2024.12.03 - v.1.10 : Version initiale.

2024.12.05 - v.1.15 : Ajout de fonctions pour les jours ouvrables et pour le Nième() jour de semaine du mois. Optimisation des calculs dans la fonction DaysInMonth().

2024.12.09 - v.1.20 : Ajout de la fonction TimeFormat() pour formater l'heure en fonction de la chaîne de caractères passée.

2024.12.09 - v.1.25 : Optimisation des calculs dans la fonction TimeToStructFast().

2024.12.10 - v.1.30 : Optimisation des fonctions TimeFormat(), StartOfYear() et EndOfYear(). Mise à jour des descriptions de certaines fonctions.

2024.12.15 - v.1.35 : Optimisation de la fonction GetNthWeekdayInYearMonth().

2024.12.18 - v.1.40 : Ajout des fonctions IsCurrentXXX(), IsToday(), IsTomorrow() et IsYesterday().

2024.12.19 - v.1.45 : Optimisation des fonctions AddMonths() et GetNthWeekdayInYearMonth().

2024.12.20 - v.1.50 : Nettoyage du code.

2024.12.21 - v.1.55 : Simplification des calculs dans AddMonths() : remplacement de la logique complexe d'ajustement des mois et des années par un calcul plus simple du nombre total de mois.



Traduit de l’anglais par MetaQuotes Ltd.
Code original : https://www.mql5.com/en/code/53970

SymmetricDarvasBoxes SymmetricDarvasBoxes

Corridor symétrique Darvas pour le Forex.

Fractales fines Fractales fines

L'indicateur Fractales fines montrera les courbes de prix importantes, les pics et les creux là où l'indicateur Fractales standard ne fonctionnera pas.

iTrend iTrend

Indicateur combiné de la force et de la direction de la tendance.

ExCandles2 ExCandles2

L'indicateur ExCandles-v2 indique les combinaisons de chandeliers avec des flèches sur le graphique.