Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

High-Performance Time Functions (TimeUtils) - Bibliothek für den MetaTrader 5

Ansichten:
16
Rating:
(11)
Veröffentlicht:
MQL5 Freelance Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Diese Bibliothek enthält mehr als 80 verschiedene Funktionen zum Umgang mit Zeitvariablen. Das primäre Ziel ist es, leistungsstarke Zeitfunktionen bereitzustellen. Der Leistungsmodus (der zur Kompilierzeit über eine #define gesteuert werden kann) ist standardmäßig deaktiviert. Dieser Modus ist keine Voraussetzung für die Einbindung der Bibliothek in Ihre Projekte, da sie auch ohne ihn eingebunden werden kann.


TIMEUTILS_PERFORMANCE_MODE

Optional kann der Performance-Modus zur Kompilierzeit über #defines vor #include eingeschaltet werden:

// Leistungsmodus für Bibliothek aktivieren
#define  TIMEUTILS_PERFORMANCE_MODE
#include "TimeUtils.mqh"

Dadurch werden alle Aufrufe der in MQL eingebauten Funktionen TimeToStruct und StructToTime auf effizientere Alternativen umgeleitet.

Sie können das Skript "performance_mode.mq5" mit und ohne TIMEUTILS_PERFORMANCE_MODE kompilieren, um den Geschwindigkeitsunterschied auf Ihrem Rechner zu überprüfen. Dies ist vorteilhaft für leistungsstarke Programme, die schwere oder viele zeitbezogene Aufgaben ausführen (z. B. das Scannen der gesamten Kurshistorie nach H1-Balken zu Beginn einer Handelswoche oder das Sammeln anderer Statistiken).


Auflistung aller Funktionen in der Bibliothek:

Die Funktionsnamen sollten selbsterklärend sein; außerdem finden Sie eine kurze Beschreibung für eine bestimmte Funktion in der Datei TimeUtils.mqh.

//+==================================================================+
//| Datetime aus Komponenten erstellen|
//+==================================================================+
datetime CreateDateTime(
   const int year,           // Jahr
   const int mon,            // Monat
   const int day,            // Tag
   const int hour = 0,       // Stunde
   const int min = 0,        // Minuten
   const int sec = 0         // Sekunden
   )
datetime CreateDateTime(MqlDateTime&  dt_struct);  // schnelle Alternative zu StructToTime()

//+==================================================================+
//| Break datetime To Components|
//+==================================================================+
bool TimeToStructFast(
   datetime      dt,         // Zu konvertierender Datumswert
   MqlDateTime&  dt_struct   // Struktur für die Übernahme von Werten
   )

//+==================================================================+
//| Komponenten von datetime extrahieren: Sonntag, jjjj.mm.tt 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)

//+==================================================================+
//| Tag() Zahl|
//+==================================================================+
int DayOfWeek(datetime t)
int DayOfYear(datetime t)
int DayIndex(datetime t)

//+==================================================================+
//| Woche() Zahl|
//+==================================================================+
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() Einheiten|
//+==================================================================+
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() Einheiten|
//+==================================================================+
datetime CeilToMinute(datetime t)
datetime CeilToHour(datetime t)
datetime CeilToDay(datetime t)
datetime CeilToWeek(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| Next() Wochentag|
//+==================================================================+
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)

//+==================================================================+
//| Vorheriger() Wochentag|
//+==================================================================+
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() Wochentag des Monats|
//+==================================================================+
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() Einheiten|
//+==================================================================+
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)

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

//+==================================================================+
//| Zeit in String umwandeln|
//+==================================================================+
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 aller verfügbaren Zeitformate:

//+------------------------------------------------------------------+
//| Ermittelt die formatierte Zeit entsprechend der übergebenen Zeichenkette. |
//| Liste aller verfügbaren Formate:|
//| Format Ausgabe Beschreibung|
//| ------ ---------------- ------------------------------------- |
//| JJ 18Zweistelliges Jahr |
//| JJJJ 2018 Vierstelliges Jahr|
//| M 1-12Der Monat, beginnend mit 1 |
//| MM 01-12 Der Monat, 2-stellig |
//| MMM Jan-Dez Der abgekürzte Monatsname, 3-Buchstaben |
//| MMMM Januar-Dezember Der vollständige Monatsname|
//| D 1-31Der Tag des Monats |
//| DD 01-31Der Tag des Monats, 2-stellig |
//| DDD Sun-Sat Die Kurzbezeichnung des Wochentags |
//| DDDD Sonntag-Samstag Der Name des Wochentags |
//| h 0-23 Die Stunde|
//| hh 00-23 Die Stunde, 2-stellig |
//| H 1-12Die Stunde, 12-Stunden-Uhr |
//| HH 01-12 Die Stunde, 12-Stunden-Uhr, 2-stellig |
//| m 0-59 Die Minute|
//| mm 00-59 Die Minute, zweistellig |
//| s 0-59 Die Sekunde|
//| ss 00-59 Die zweite, 2-stellige |
//| A AM PM|
//| a am pm|
//+------------------------------------------------------------------+
//| Beispielformate:|
//| "JJJJ.MM.TT hh:mm" // "2024.12.08 22:05" (Standard) |
//| "TTT, JJJJ.MM.TT hh:mm:ss" // "So, 2024.12.08 22:05:21" |
//| "D MMMM JJJJ, HH:mm a" // "8. Dezember 2024, 22:05 Uhr" |
//| "TT/MM/JJJJ" // "12.08.2024"|
//+------------------------------------------------------------------+
string TimeFormat(const datetime t, const string format = "YYYY.MM.DD hh:mm");


Die beiden beigefügten Skripte "basic.mq5" und "advanced.mq5" zeigen Beispiele für die grundlegende und erweiterte Verwendung.

Ein Beispiel für die Ausgabe des Skripts "advanced.mq5":

/*
 Beispielausgabe:

 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. HoleMinute(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. BeginnderWoche(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. EndeDesTages(t) = 2024.12.18 23:59:59
 28. EndederWoche(t) = 2024.12.21 23:59:59
 29. EndederWoche(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. NächsterSonntag(t) = 2024.12.22 00:00:00
 50. NächsterMontag(t) = 2024.12.23 00:00:00
 51. NächsterDienstag(t) = 2024.12.24 00:00:00
 52. NächsterMittwoch(t) = 2024.12.25 00:00:00
 53. NächsterDonnerstag(t) = 2024.12.19 00:00:00
 54. NächsterFreitag(t) = 2024.12.20 00:00:00
 55. NächsterSamstag(t) = 2024.12.21 00:00:00
 56. VorherigerSonntag(t) = 2024.12.15 00:00:00
 57. VorherigerMontag(t) = 2024.12.16 00:00:00
 58. VorherigerDienstag(t) = 2024.12.17 00:00:00
 59. VorherigerMittwoch(t) = 2024.12.11 00:00:00
 60. VorherigerDonnerstag(t) = 2024.12.12 00:00:00
 61. VorherigerFreitag(t) = 2024.12.13 00:00:00
 62. VorherigerSamstag(t) = 2024.12.14 00:00:00
 63. ErsterWochentagdesMonats(t, SONNTAG) = 2024.12.01 00:00:00
 64. LetzterWochentagdesMonats(t, SONNTAG) = 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. UnterWochen(t, 4) = 2024.11.20 18:27:25
 79. SubMonths(t, 2) = 2024.10.18 18:27:25
 80. UnterJahre(t, 5) = 2019.12.18 18:27:25
 81. DifferenceInCalendarDays(t, AddWeeks(t, 9)) = 63
 82. DifferenceInBusinessDays(t, AddWeeks(t, 9)) = 45
 83. DifferenzInKalenderWochen(t, AddWochen(t, 9)) = 9
 84. DifferenzInKalenderWochen(t, AddWochen(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(), JJJJ.MM.TT hh:mm) = 2024.12.18 17:27
 108. TimeFormat(TimeCurrent(), DDD, JJJJ.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

*/


Aktualisierungen:

2024.12.03 - v.1.10 : Erste Veröffentlichung.

2024.12.05 - v.1.15 : Funktionen für Arbeitstage und für den N-ten() Wochentag des Monats hinzugefügt. Optimierte Berechnungen in der DaysInMonth() Funktion.

2024.12.09 - v.1.20 : Funktion TimeFormat() hinzugefügt, um die Zeit entsprechend der übergebenen Zeichenkette zu formatieren.

2024.12.09 - v.1.25 : Optimierte Berechnungen in der Funktion TimeToStructFast().

2024.12.10 - v.1.30 : Optimierte TimeFormat(), StartOfYear() und EndOfYear() Funktionen. Aktualisierte Beschreibungen von einigen Funktionen.

2024.12.15 - v.1.35 : Optimierte Funktion GetNthWeekdayInYearMonth().

2024.12.18 - v.1.40 : IsCurrentXXX(), IsToday(), IsTomorrow() und IsYesterday() Funktionen hinzugefügt.

2024.12.19 - v.1.45 : Optimierte AddMonths() und GetNthWeekdayInYearMonth() Funktionen.

2024.12.20 - v.1.50 : Weitere Codebereinigung.

2024.12.21 - v.1.55 : Vereinfachte Berechnungen in AddMonths(): Die komplexe Logik der Anpassung von Monaten und Jahren wurde durch eine einfachere Berechnung der Gesamtmonate ersetzt.



Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/53970

Copy Trader Copy Trader

Guten Tag Jungs, ich bin ein neuer Student auf metatrader5, ich bin die Schaffung eines Roboters zu kopieren Trades aus einem Demo-Konto und speichern Sie sie in einer Datenbank, die ich möchte einige Hilfe bei der Identifizierung möglicher Probleme, beste Lösungen für den Code, etc.

MarketPredictor MarketPredictor

MarketPredictor für MetaTrader 5 Der MarketPredictor ist ein innovativer Expert Advisor (EA) für MetaTrader 5, der mathematische Modelle wie Sinusfunktionen, Fast Fourier Transform (FFT), Sigmoidfunktionen und Monte-Carlo-Simulationen nutzt, um Marktbewegungen zu analysieren und vorherzusagen. Dieses Projekt richtet sich an Entwickler, Mathematik-Enthusiasten und Trader, die an der Kombination von technologischen und finanziellen Innovationen interessiert sind. Sie können in diesem Thread Ideen für den Code vorschlagen, diskutieren und umsetzen. Ob neue Funktionen, Verbesserungsvorschläge oder Strategien - jeder Beitrag ist willkommen, um den MarketPredictor weiterzuentwickeln und zu optimieren. Sie können mich auch gerne hinzufügen, um Fragen privat zu klären, am GitHub-Projekt mitzuarbeiten oder mir Ihr Feedback direkt zu schicken. Lassen Sie uns gemeinsam etwas Tolles auf die Beine stellen und dieses Projekt auf die nächste Stufe heben!

Accumulation/Distribution Accumulation/Distribution

Der Accumulation/Distribution Indikator wird aus Änderung von Preis und Volumen bestimmt.

Accelerator Oszillator (AC) Accelerator Oszillator (AC)

Der Acceleration/Deceleration Indikator (AC) misst die Beschleunigung und Verlangsamung des aktuellen Marktimpulses, der Kraft der Kursbewegung.