![Einführung in MQL5 (Teil 4): Strukturen, Klassen und Zeitfunktionen beherrschen](https://c.mql5.com/2/70/Introduction_to_MQL5_pPart_4c_Mastering_Structuresq_Classesf_and_Time_Functions_600x314.jpg)
Einführung in MQL5 (Teil 4): Strukturen, Klassen und Zeitfunktionen beherrschen
Einführung
Willkommen zum vierten Teil unserer MQL5-Reise! Während wir uns mit der Einfachheit von Strukturen, Klassen und Zeitfunktionen befassen, liegt unser Schwerpunkt darauf, komplexe Konzepte leichter zugänglich zu machen. Das Ziel bleibt dasselbe: einen integrativen Raum zu schaffen, in dem die Sprache von MQL5 für alle zugänglich wird. Denken Sie daran, dass Ihre Fragen nicht nur willkommen, sondern auch erwünscht sind; sie ebnen den Weg zu mehr Klarheit und Verständnis. Lassen Sie uns unsere Erkundung gemeinsam fortsetzen und sicherstellen, dass der Weg zur Beherrschung von MQL5 nicht nur lehrreich ist, sondern auch Spaß macht.
Ich weiß, dass das Programmieren überwältigend sein kann, besonders für Anfänger. Aber keine Angst, denn dieser Artikel soll die Komplexität entschlüsseln und einen klaren Einblick in die Welt von MQL5 geben. Bitte zögern Sie nicht, Fragen zu stellen, denn Neugierde ebnet den Weg zum besseren Verständnis. Dieses Kapitel ist ein Sprungbrett zur Beherrschung der Kunst des algorithmischen Handels, wobei jede Codezeile erklärt wird, um das Verständnis zu fördern. Lassen Sie uns gemeinsam in das Reich der Einfachheit eintauchen, denn Lernen sollte eine angenehme Reise sein. Viel Spaß beim Programmieren, und denken Sie daran: Neugier ist Ihr bester Begleiter!
In diesem Artikel werden wir die folgenden Themen behandeln:
- Strukturen
- Klassen
- Zeitfunktionen in MQL5
Liebe Leserinnen und Leser, während wir durch den vierten Teil unserer MQL5-Serie navigieren, freue ich mich, ankündigen zu können, dass wie üblich ein zusammenfassendes Video zur Verfügung gestellt wird, um Ihre Erinnerungen an die in Teil drei behandelten Konzepte aufzufrischen. Dieses Video soll Ihr Verständnis vertiefen und als schnelle Wiederholung dienen, um sicherzustellen, dass Sie gut auf den neuen Stoff vorbereitet sind, der vor Ihnen liegt. Wenn Sie also einmal das Bedürfnis haben, die Grundlagen zu wiederholen oder verpasste Details nachzuholen, steht Ihnen das Zusammenfassungsvideo zur Verfügung. Stellen Sie uns Ihre Fragen, und lassen Sie uns diese Lernreise gemeinsam fortsetzen!
1. Strukturen
Was sind Strukturen?
In der Programmierung ist eine Struktur ein zusammengesetzter Datentyp, mit dem Sie verschiedene Datentypen unter einem einzigen Namen zusammenfassen können. Auf diese Weise können Sie logisch zusammenhängende Informationen in einer zusammenhängenden Weise organisieren und verwalten. Eine Struktur kann verschiedene Datentypen enthalten, z. B. Ganzzahlen, Gleitkommazahlen und Zeichen. Der Hauptzweck einer Struktur besteht darin, die Klarheit und Wiederverwendbarkeit des Codes zu verbessern und Entitäten mit mehreren Attributen darzustellen.
In MQL5 dient eine Struktur demselben Zweck. Es handelt sich dabei um einen nutzerdefinierten Datentyp, mit dem Sie einen Container für die Speicherung verwandter Datenelemente erstellen können. MQL5-Strukturen werden häufig verwendet, um reale Entitäten in Handelsalgorithmen, Finanzinstrumenten oder anderen Szenarien darzustellen, in denen verschiedene Attribute mit einer einzigen Entität verbunden sein müssen. Die Syntax für die Deklaration von Strukturen in MQL5 ähnelt der anderer Programmiersprachen und bietet eine vielseitige Möglichkeit, Daten in Handelsskripten und Expert Advisors effizient zu organisieren und darauf zuzugreifen.
Analogie
Stellen wir uns eine Struktur wie einen magischen Rucksack vor. In diesen Rucksack kannst du verschiedene Dinge wie Spielzeug, Snacks und sogar eine kleine Landkarte packen. Jeder Gegenstand im Rucksack ist wie ein anderes Stück Information. Das Spielzeug steht beispielsweise für die Art des Spielzeugs, der Snack für die Geschmacksrichtung, und die Karte zeigt, wohin du gehen willst.
Stellen Sie sich den Rucksack als eine Struktur in der Programmierung vor. Die Struktur enthält verschiedene Arten von Informationen (Spielzeug, Snacks und Karten), genau wie eine Struktur verschiedene Daten in einem Programm enthält. Wenn Sie also etwas über das Spielzeug wissen wollen, schauen Sie in den Rucksack und finden das Spielzeug. Auch in einem Programm verwenden Sie die Struktur, um bestimmte Informationen zu finden. Kurz gesagt, eine Struktur ist wie ein magischer Rucksack, der Ihnen hilft, verschiedene Arten von Dingen zu organisieren und zu tragen, sodass Sie leicht finden, was Sie brauchen.
1.1. Wie man eine Struktur deklariert
Die Deklaration einer Struktur in MQL5 ist vergleichbar mit der Definition der Struktur Ihrer Rezeptkarte, bevor Sie sie ausfüllen. Sie geben die Arten und Namen der verschiedenen Informationen an, die Sie aufnehmen möchten.
struct Person { string name; int age; string address; };
Erläuterung:
„struct Person“:
- Diese Zeile leitet die Deklaration einer Struktur namens Person ein. Betrachten Sie eine Struktur als einen nutzerdefinierten Datentyp, mit dem Sie verschiedene Arten von Variablen unter einem Namen zusammenfassen können.
„string name;“:
- Innerhalb der Struktur sind drei Mitglieder (Felder oder Variablen) deklariert. Der erste ist „name“, und er ist vom Typ „string“. Dieses Feld ist für die Speicherung des Namens einer „Person“ vorgesehen.
„int age;“:
- Das zweite Element ist „age“ und hat den Typ „int“. Dieses Feld dient zur Speicherung des Alters einer Person.
„string address;“:
- Das dritte Glied ist „address“, und es ist ebenfalls vom Typ „string“. Dieses Feld dient zur Speicherung der Adresse einer Person.
Stellen Sie sich eine Struktur als einen nutzerdefinierten Container oder ein Formular vor, in dem Sie Informationen über eine Person übersichtlich organisieren können. Diese Struktur „Person“ funktioniert wie ein Formular mit spezifischen Feldern (Name, Alter und Adresse), in die Sie Details zu jeder Person eintragen können. Sobald Sie diese Struktur haben, können Sie Instanzen davon für verschiedene Personen erstellen, und jede Instanz wird Informationen über eine bestimmte Person enthalten.
1.2. Verwendung
Sobald Sie Ihre Struktur festgelegt haben, ist es an der Zeit, sie in die Tat umzusetzen. Betrachten Sie die Strukturdeklaration als Blaupause für die Erstellung personalisierter Instanzen oder Objekte. Diese Instanzen enthalten spezifische Daten für jede Person, so wie Sie für jedes Gericht, das Sie kochen wollen, eine eigene Rezeptkarte ausfüllen.
void OnStart() { struct Person { string name; int age; string address; }; // Creating variables of type Person Person person1, person2; // Filling in details for person1 person1.name = "Israel"; person1.age = 25; person1.address = "123 Main St"; // Filling in details for person2 person2.name = "Bob"; person2.age = 30; person2.address = "456 Oak St"; // Now you can use person1 and person2 with their specific details Print("Details of Person 1: ", person1.name, ", ", person1.age, ", ", person1.address); Print("Details of Person 2: ", person2.name, ", ", person2.age, ", ", person2.address); }
Erläuterung:
„void OnStart()“:
- Dies ist der Startpunkt der Skriptausführung. Jeder Code innerhalb dieser Funktion wird ausgeführt, wenn das Skript gestartet oder auf einem Chart gestartet wird.
„Person person1, person2;“:
-
Das deklariert die zwei Variablen, „person1“ und „person2“, vom Typ „Person“. Diese Variablen dienen als Container zur Speicherung von Informationen über Personen.
„person1.Name = "Israel";“:
- Weist dem Feld „name“ von „person1“ den Wert „Israel“ zu.
„person1.age = 25;“:
- Weist dem Feld „age“ von „person1“ den Wert „25“ zu.
„person1.address = "123 Main St";“:
- Weist dem Feld „address“ von „person1“ den Wert „123 Main St“ zu.
„person2.name ="Bob";“ zu „person2.address = "456 Oak St";“:
- Ähnliche Zuweisungen für die Variable person2.
„Print("Details of Person 1: ", person1.name, ", ", person1.age, ", ", person1.address);“:
- Druckt die Daten von „person1“ mit der Funktion „Print“.
„Print(“Angaben zu Person 2: „, person2.name, „, „, person2.age, „, „, person2.address);“:
- Druckt die Daten von „person2“ mit der Funktion „Print“.
Analogie:
Stellen Sie sich vor, Sie sind ein Meisterschöpfer in einer magischen Werkstatt, der personalisierte Informationskarten für besondere Menschen herstellt. Diese Karten, nennen wir sie „Personenkarten“, haben verschiedene Abschnitte für den Namen, das Alter und die Adresse jeder Person. Der Entstehungsprozess ist akribisch, sodass jede Karte die einzigartige Essenz der Person enthält, die sie repräsentiert.
Gestaltung der Personenkarten:
-
In deinem Workshop legen Sie zwei leere Karten auf Ihren Arbeitstisch und nennen sie person1 und person2. Jede Karte wurde sorgfältig entworfen, um die verschiedenen Details der einzelnen Personen herauszuarbeiten.
Details in person1 einbringen:
-
Wenn Sie mit der Erstellung der ersten Karte, person1, beginnen, schreiben Sie den Namen „Israel“ in das dafür vorgesehene Feld unter dem Abschnitt „Name“. Mit einem Strich Ihrer magischen Feder geben Sie das Alter „25“ in dem dem Alter gewidmeten Abschnitt an. Die Adresse „123 Main St“ findet ihren Platz unter der Rubrik „Address“.
Einweben der Details in person2:
- Der Vorgang wiederholt sich, wenn Sie die zweite Karte, person2, beschwören. Diesmal sind der Name „Bob“, das Alter „30“ und die Adresse „456 Oak St“ auf der Karte eingraviert.
Die Personenkarten aufdecken:
-
Mit Schwung präsentieren Sie die erste Karte, person1, und erläutern ihren Inhalt: „Hier sind die Angaben zu Person 1: Israel, 25 Jahre alt, wohnhaft in 123 Main St.“ Die zweite Karte, person2, folgt dem Beispiel und stellt die einzigartigen Details ihres Trägers vor.
In diesem magischen Workshop dient die Struktur „Person“ als Ihre verzauberte Blaupause, die die Abschnitte auf jeder Karte vorgibt. Die Variablen person1 und person2 werden als greifbare Repräsentationen dieser magischen Karten zum Leben erweckt und verkörpern jeweils das Wesen einer anderen Person. Wenn Sie diese Karten aufdecken, geben Sie einen Einblick in die bezaubernden Details, die sie enthalten.
Anmerkung: Auf dem Weg zur Programmierung kann das Verständnis von Konzepten wie Arrays und Strukturen zunächst etwas verwirrend erscheinen. Ein häufiges Missverständnis von Anfängern ist die Verwechslung von Arrays und Strukturen aufgrund ihrer scheinbaren Ähnlichkeit. Bei beiden geht es um die Organisation von Daten, aber sie sind unterschiedlich. Arrays sind wie übersichtliche Listen, in denen ähnliche Informationen (ähnliche Datentypen) in einer sequentiellen Reihenfolge angeordnet sind, auf die durch Indizierung zugegriffen werden kann. Andererseits sind Strukturen eher Container, in denen verschiedene Arten von Informationen (verschiedene Datentypen) für eine bestimmte Entität gebündelt werden können.
Während Arrays also eine Sammlung ähnlicher Elemente behandeln, können Sie mit Strukturen einen komplexen Datentyp erstellen, der verschiedene Informationen enthält. Machen Sie sich keine Sorgen, wenn es sich anfangs etwas schwierig anfühlt; das Verständnis dieser Feinheiten ist Teil der aufregenden Reise in die Welt der Programmierung.
2. Klassen
Was sind Klassen?
In MQL5 sind Klassen wie Entwürfe oder Vorlagen, die die Erstellung von Objekten leiten. Objekte sind in diesem Zusammenhang spezifische Instanzen oder Realisierungen der Klasse. Stellen Sie sich eine Klasse als einen Satz von Anweisungen für den Bau verschiedener Objekte vor, und jedes Objekt ist wie ein einzigartiges Element, das aus diesen Anweisungen erstellt wird.
Stellen Sie sich vor, Sie haben eine Klasse mit dem Namen „Obst“, die Anweisungen zum Erstellen verschiedener Früchte wie Äpfel, Bananen und Orangen enthält. Bei den Objekten handelt es sich um die Äpfel, Bananen und Orangen, die Sie auf der Grundlage dieser Anweisungen erstellen. Jedes Fruchtobjekt hat seine eigenen spezifischen Eigenschaften (wie Farbe und Geschmack) und kann Aktionen ausführen (z. B. gegessen werden). In MQL5 definieren also Klassen die Regeln, und Objekte sind die konkreten Dinge, die Sie nach diesen Regeln erstellen.
Analogie
Stell dir vor, du spielst mit Bauklötzen und hast eine spezielle Anleitung, wie du ein cooles Raumschiff bauen kannst. Diese Anleitung ist wie eine „Klasse“. Sie sagt dir, welche Farben du verwenden sollst, wie du die Blöcke stapeln sollst und sogar, wie du das Raumschiff zum Fliegen bringst (genau wie der Bauplan für einen Programmierkurs). Jedes Mal, wenn Sie diese Anweisungen befolgen und ein Raumschiff bauen, ist dieses Raumschiff wie ein „Objekt“ der Klasse. Jedes Raumschiff, das du baust, kann seine eigenen Farben und Eigenschaften haben, aber sie folgen alle den gleichen Anweisungen.
In der Computerprogrammierung ist eine Klasse also wie eine spezielle Anleitung, um etwas zu bauen, das Spaß macht und spannend ist. Es hilft Programmierern, Dinge (wir nennen sie Objekte) mit bestimmten Eigenschaften und Aktionen zu erstellen. Es ist eine Möglichkeit, die Herstellung von Dingen zu organisieren und zu planen, was es einfacher macht, viele ähnliche Dinge herzustellen, ohne jedes Mal bei Null anfangen zu müssen. Es ist, als hätte man eine Anleitung zum Bau von Raumschiffen, Autos oder sogar magischen Kreaturen!
Stellen Sie sich vor, Sie leiten eine magische Keksfabrik, in der Sie verschiedene Kekssorten herstellen können. Der Bauplan oder das Rezept für das Backen von Keksen ist wie ein Kurs. Darin wird festgelegt, welche Zutaten jeder Keks haben sollte und wie er gebacken werden muss.
2.1. Wie man eine Klasse deklariert
In MQL5 besteht die Syntax für die Deklaration von Klassen aus dem Schlüsselwort „class“, gefolgt von dem Klassennamen und einem Codeblock mit den Klassenmitgliedern.
Beispiel:
void OnStart() { class Person { public: // Attributes (data members) string name; int age; // Methods (member functions) void displayInfo() { Print("Name: ", name); Print("Age: ", age); } }; // Creating an object of the Person class Person person1; // Initializing attributes of the object person1.name = "John"; person1.age = 25; // Calling the displayInfo method to print information person1.displayInfo(); }
Erläuterung:
Deklaration der Klasse:
class Person {
-
Diese Zeile deklariert eine Klasse namens „Person“. Auf das Schlüsselwort class folgt der Klassenname, und die öffnende geschweifte Klammer „ {“ zeigt den Beginn der Klassendefinition an.
public:
- In dieser Zeile wird der Zugriffsspezifizierer „public“ (öffentlich) deklariert, der angibt, dass die folgenden Klassenmitglieder (Attribute und Methoden) von außerhalb der Klasse zugänglich sind.
string name; int age;
- Diese Zeilen deklarieren zwei Attribute (Datenelemente) innerhalb der Klasse: ein String-Attribut „name“ und ein Integer-Attribut „age“.
void displayInfo() { Print("Name: ", name); Print("Age: ", age); }
- Dies definiert eine Methode (Mitgliedsfunktion) namens „displayInfo“ innerhalb der Klasse. Sie „druckt“ die Werte der Attribute „Name“ und „Alter“ mit Hilfe der Funktion Print.
};
- Die schließende geschweifte Klammer „ }“ markiert das Ende der Klassendefinition.
void OnStart() {
- Die Funktion „OnStart“ ist eine spezielle Funktion in MQL5, die ausgeführt wird, wenn das Skript oder der Expert Advisor zu laufen beginnt.
Person person1;
- Diese Zeile erstellt ein Objekt namens „person1“ vom Typ „Person“. Sie instanziiert eine bestimmte Instanz der Klasse.
Einstellung der Attribute:
person1.name = "John"; person1.age = 25;
- Diese Zeilen setzen die Werte der Attribute „name“ und „age“ für das Objekt „person1“.
person1.displayInfo();
- Diese Zeile ruft die Methode „displayInfo“ für das Objekt „person1“ auf, die die in den Attributen gespeicherten Informationen ausgibt.
Obwohl Klassen und Strukturen in der Programmierung Ähnlichkeiten aufweisen, dienen sie unterschiedlichen Zwecken. Beide werden verwendet, um nutzerdefinierte Datentypen zu definieren, indem verwandte Daten zusammen gruppiert werden. Der Hauptunterschied liegt jedoch in ihrer Funktionalität.
Strukturen sind einfacher und dienen in erster Linie als Behälter für Daten, ohne Methoden oder Funktionen zu enthalten. Sie sind wie organisierte Speichereinheiten, die verschiedene Datenelemente für einen bequemen Zugriff gruppieren. Andererseits umfassen Klassen in der objektorientierten Programmierung nicht nur Daten, sondern auch Verhaltensweisen durch Methoden. Betrachten Sie Klassen als vielseitige Werkzeuge, die nicht nur Informationen enthalten, sondern auch die Mittel zur Durchführung von Aktionen oder Funktionen bereitstellen. Während also sowohl Klassen als auch Strukturen Daten organisieren, bieten Klassen mit ihren Methoden eine zusätzliche Funktionsebene, die sie zu leistungsfähigen Werkzeugen für die Modellierung und Lösung komplexer Probleme in der Programmierung macht.
Es ist völlig normal, wenn die Unterscheidung zwischen Klassen und Strukturen anfangs etwas überwältigend erscheint. Im nächsten Artikel werde ich in einem zusammenfassenden Video diese Konzepte visuell aufschlüsseln, damit sie leichter zu verstehen sind. Wenn Sie also jetzt etwas verwirrt sind, machen Sie sich keine Sorgen, denn die Klarheit ist gleich um die Ecke. Schicken Sie uns Ihre Fragen, und wir werden diese Programmiergrundlagen gemeinsam erforschen!
3. Zeitfunktionen in MQL5
Zeit
Im Kontext der Programmierung und des Handels bezieht sich „time“ auf die fortlaufende Abfolge von Stunden, Minuten und Sekunden. Dies ist ein grundlegender Aspekt des algorithmischen Handels, da die Finanzmärkte innerhalb bestimmter Zeitrahmen funktionieren und die Händler ihre Strategien oft mit diesen zeitlichen Elementen synchronisieren müssen.
Funktionen
In der Programmierung ist eine „Funktion“ ein in sich geschlossener Code-Block, der eine bestimmte Aufgabe oder Operation ausführen soll. Funktionen helfen bei der Organisation des Codes, machen ihn modularer und leichter verständlich. Sie nehmen Input auf, verarbeiten ihn und liefern Output.
Was sind Zeitfunktionen?
Zeitfunktionen in der Programmierung, insbesondere in MQL5, sind Werkzeuge, die es Entwicklern und Händlern ermöglichen, mit zeitbezogenen Daten innerhalb ihrer Algorithmen zu arbeiten und diese zu manipulieren. Diese Funktionen helfen bei der Abfrage der aktuellen Serverzeit, der Konvertierung von Zeitwerten und der Durchführung verschiedener Operationen, die Zeitstempel betreffen. Im Kontext des algorithmischen Handels sind Zeitfunktionen von entscheidender Bedeutung für die Synchronisierung von Handelsstrategien mit bestimmten Zeitrahmen, die Festlegung präziser Ausführungszeiten und die Schaffung zeitabhängiger Bedingungen für Handelssignale. Sie bieten die notwendigen Instrumente, um die zeitlichen Aspekte der Finanzmärkte zu steuern und die Präzision und Effektivität der algorithmischen Handelsstrategien zu verbessern.
Analogie
Stellen Sie sich vor, Sie haben eine magische Uhr, die Ihnen sagt, wann Sie bestimmte Dinge tun müssen, z. B. wann Sie spielen, wann Sie essen oder wann Sie schlafen sollten. In der Welt der Computerprogramme sind die Zeitfunktionen wie diese magische Uhr. Sie helfen dem Computer, den Überblick über die Zeit zu behalten und zu entscheiden, wann die verschiedene Aufgaben erledigt werden sollen.
Wenn Sie also ein Computerprogramm für den Handel schreiben, könnten Sie Zeitfunktionen verwenden, um zu sagen: „Hey, Computer, wenn es morgens ist, mach diese Handelsstrategie, aber wenn es nachts ist, mach etwas anderes“. Zeitfunktionen sind wie die Anweisungen, die Sie dem Computer geben, was er zu verschiedenen Zeiten tun soll, so wie Sie den Anweisungen Ihrer magischen Uhr den ganzen Tag über folgen.
Bevor wir tiefer in das faszinierende Reich der MQL5-Zeitfunktionen eintauchen, nehmen wir uns einen Moment Zeit, um die Geheimnisse von „datetime“ zu enträtseln
3.1. datetime
In MQL5 ist datetime ein spezieller Datentyp, der zur Darstellung von Datum und Uhrzeit verwendet wird. Es ist, als hätte man eine digitale Uhr, die das aktuelle Datum und die Uhrzeit in der Welt des Handels im Auge behält. Auf diese Weise können Händler und Algorithmen Ereignisse genau mit einem Zeitstempel versehen, was bei der Analyse und Ausführung von Strategien auf der Grundlage bestimmter Zeitbedingungen hilfreich ist.
3.1.1. Deklarieren einer datetime-Variable
Stellen Sie sich eine „datetime“-Variable als eine magische Uhr vor, die das Datum und die Uhrzeit speichern kann. Wenn Sie eine „datetime“-Variable deklarieren, können Sie sie auf einen bestimmten Zeitpunkt setzen.
Beispiel:
void OnStart() { // Declaration of datetime variable datetime magicalClock; // Assigning a special date and time to our magical clock magicalClock = D'2024.01.15 12:30:00'; // Let's tell the computer to show us the date and time inside our Comment(magicalClock); }
Erläuterung:
„datetime magicalClock;“:
-
Hier deklarieren wir eine Variable namens „magicalClock“ mit dem Datentyp „datetime“. Diese Variable enthält unser magisches Datum und die Uhrzeit.
„magicalClock = D'2024.01.15 12:30:00';“:
- In dieser Zeile weisen wir unserer Variablen „magicalClock“ ein bestimmtes Datum und eine bestimmte Uhrzeit zu (15. Januar 2024, 12:30:00 Uhr) und verwenden dabei das Format „D'YYYY.MM.DD HH:MI:SS'“.
- „D'“ zeigt an, dass wir eine Datetime-Konstante zuweisen.
- „2024“ ist das Jahr.
- „01“ ist der Monat.
- „15“ ist der Tag.
- „12“ ist die Stunde.
- „30“ ist die Minute.
- „00“ ist die zweite.
„Comment(magicalClock);“:
- Schließlich verwenden wir die Funktion „Comment“, um den Inhalt unserer magischen Uhr „magicalClock“ anzuzeigen. Der Computer gibt das gespeicherte Datum und die Uhrzeit aus, sodass wir Zeuge des bezaubernden Moments werden können, der in der Variablen „datetime“ festgehalten ist.
Dieser Codeschnipsel zeigt die Deklaration, Zuweisung und den Ausdruck einer „datetime“-Variablen und gibt einen Einblick in die Welt der Verwaltung von Datums- und Zeitangaben in MQL5.
3.2. Kernzeitfunktionen
3.2.1. TimeCurrent
Im Kontext des algorithmischen Handels spielt die Funktion „TimeCurrent()“ in MQL5 eine entscheidende Rolle bei der Bereitstellung der aktuellen Serverzeit. Diese Funktion liefert einen „datetime“-Wert, der im Wesentlichen den aktuellen Zeitstempel auf dem Server darstellt, auf dem Ihre Handelsaktivitäten ausgeführt werden.
Warum ist das wichtig? Stellen Sie sich vor, Sie führen eine Handelsstrategie aus, die bestimmte Aktionen in Abhängigkeit von der Tageszeit vorsieht. So können Sie zum Beispiel verschiedene Ansätze für den Marktbeginn, den Marktschluss oder während der volatilen Stunden haben. Durch die Verwendung von „TimeCurrent()“ können Sie programmatisch auf die aktuelle Zeit zugreifen und Ihre Handelsentscheidungen entsprechend anpassen. Es ist wie eine Uhr, die mit der Zeit des Servers synchronisiert ist und es Ihrem Algorithmus ermöglicht, sich dynamisch an die unterschiedlichen Marktbedingungen während des Tages anzupassen.
In der Praxis können Sie „TimeCurrent()“ verwenden, um zeitabhängige Bedingungen in Ihren Handelsalgorithmen zu erstellen. So können Sie beispielsweise beschließen, nur zu bestimmten Zeiten Geschäfte zu tätigen oder Ihre Risikomanagementstrategien an die Tageszeit anzupassen. Es ist ein wertvolles Instrument, um sicherzustellen, dass Ihre Algorithmen mit der sich ständig verändernden Landschaft der Finanzmärkte synchronisiert sind.
Analogie
Stellen wir uns vor, dass die Zeit in der Programmierung wie eine Uhr ist, die uns sagt, wann etwas passiert. „TimeCurrent()“ ist also so, als würde man den Computer fragen: „Hey, wie spät ist es jetzt auf deiner Uhr?“
Wenn wir „TimeCurrent()“ verwenden, teilt uns der Computer fröhlich die aktuelle Zeit in einem speziellen Format mit, wie „2024.01.15 12:30:00“. Wir können diese Informationen nutzen, um zu wissen, wann bestimmte Ereignisse stattgefunden haben oder um Dinge in unserem Programm zu planen. Es ist, als hätte man eine magische Uhr, die immer die aktuelle Zeit in der Welt der Programmierung anzeigt!
Beispiel:void OnStart() { // Ask the magical clock for the current time datetime currentTime = TimeCurrent(); // Display the current time on the console Print("The magical clock says it's now: ", currentTime); }
Erläuterung:
„datetime currentTime = TimeCurrent();“:
-
Hier deklarieren wir eine Variable namens „currentTime“ vom Typ „datetime“ (ein Datentyp, der Datums- und Zeitinformationen enthält). Wir verwenden die Funktion „TimeCurrent()“, um die aktuelle Serverzeit zu ermitteln, und das Ergebnis wird der Variablen „currentTime“ zugewiesen.
„Print(“Die magische Uhr sagt, es ist jetzt: „, currentTime);“:
- Die Funktion „Print()“ wird verwendet, um Meldungen auf der Konsole anzuzeigen. In dieser Zeile geben wir eine Nachricht zusammen mit dem Wert von „currentTime“ aus, sodass die aktuelle Zeit, wie sie von unserer „magischen Uhr“ gemeldet wird, angezeigt wird.
Vereinfacht ausgedrückt, prüft das Programm die aktuelle Zeit mit der Funktion „TimeCurrent()“ und gibt dann eine Meldung auf der Konsole aus, was es gefunden hat.
Lassen Sie uns nun ein weiteres Beispiel untersuchen, um unser Verständnis zu vertiefen. Wir werden die Verwendung der Funktion „TimeCurrent()“ näher betrachten. Ich werde ein Szenario veranschaulichen, in dem wir prüfen, ob die aktuelle Serverzeit mit einem vordefinierten magischen Moment übereinstimmt. Dies wird dazu beitragen, das Verständnis der Zeitfunktionen in MQL5 zu vertiefen. Bleiben Sie dran für ein weiteres Programmierungsabenteuer!
Beispiel:
void OnStart() { // Declaration of datetime variable datetime magicalClock; // Assigning a special date and time to our magical clock magicalClock = D'2024.01.15 12:30:00'; // Check if TimeCurrent is equal to our magical clock if(TimeCurrent() == magicalClock) { Print("The magic moment has arrived!"); } else { Print("Not yet the magic time..."); } }
Erläuterung:
„datetime magicalClock;“:
- Deklariert eine Variable namens „magicalClock“ vom Datentyp „datetime“.
„magicalClock = D'2024.01.15 12:30:00';“:
- Weist „magicalClock“ ein bestimmtes Datum und eine bestimmte Uhrzeit (15. Januar 2024, 12:30 Uhr) zu, wobei das Präfix „D“ für „datetime“-Literale verwendet wird.
„if (TimeCurrent() == magicalClock) { ... }“:
- Vergleicht die aktuelle Serverzeit („TimeCurrent()“) mit der vordefinierten „magicalClock“. Wenn sie gleich sind, wird „The magic moment has arrived!“ (Der magische Moment ist gekommen!) auf der Konsole ausgegeben; andernfalls wird „Not yet the magic time...“ (Noch nicht die magische Zeit...“ ausgegeben.
Auf dem Weg zur Erforschung von MQL5 und dem algorithmischen Handel ist es normal, dass bestimmte Konzepte verwirrend sind, besonders für Anfänger. Denken Sie daran, dass zum Lernprozess das Stellen von Fragen und das Bemühen um Klärung gehören. Zögern Sie nicht, sich an uns zu wenden und uns zu fragen, ob es um Arrays, nutzerdefinierte Funktionen, Präprozessoren, Ereignisbehandlung oder ein anderes von uns behandeltes Programmierthema geht.
Wie jede andere Fähigkeit kann auch das Programmieren anfangs etwas rätselhaft sein, aber durch Interaktion und Zusammenarbeit können wir die Reise angenehmer und verständlicher gestalten. Die Einzigartigkeit unserer Lernerfahrung liegt in den Fragen, die wir stellen, und den Diskussionen, die wir führen. Lassen Sie sich also auf den Lernprozess ein, fragen Sie nach, und lassen Sie uns gemeinsam die Welt des algorithmischen Handels enträtseln!
3.2.2. TimeGMT
So wie Ihre magische Uhr mit einer Standardzeit arbeitet, ermöglicht TimeGMT() in MQL5 die Arbeit mit Greenwich Mean Time (GMT). Stellen Sie sich die GMT als eine universelle Uhr vor, die von Menschen auf der ganzen Welt als Referenz verwendet wird, um eine weltweit standardisierte Zeitmessung zu gewährleisten. Diese Funktion erleichtert die Koordinierung und Synchronisierung von Aktionen auf globaler Ebene und bietet eine gemeinsame Grundlage für zeitbezogene Operationen in der Welt des algorithmischen Handels.
Die Funktion „TimeGMT“ in MQL5 gibt die aktuelle Greenwich Mean Time (GMT) zurück, die um die Sommerzeit (DST) bereinigt ist, basierend auf der lokalen Zeit des Computers, auf dem das Client-Terminal läuft. Diese Anpassung stellt sicher, dass die zurückgegebene GMT berücksichtigt, ob die Sommerzeit gerade in Kraft ist.
Analogie
Stell dir vor, es gibt eine magische Uhr in einer besonderen Stadt namens Greenwich. Diese Stadt ist so etwas wie die Superheldenzentrale der Zeitmessung. Die Zeit auf der magischen Uhr in Greenwich gilt als die Superheldenzeit, nach der sich alle Menschen auf der Welt richten. Nehmen wir nun an, Sie haben Freunde an verschiedenen Orten, die jeweils ihre eigene Ortszeit haben. Wenn Sie eine virtuelle Verabredung zum Spielen oder ein Spiel mit ihnen planen wollen, kann das etwas schwierig werden, weil jeder eine andere Zeit auf seiner Uhr hat.
GMT kommt zur Rettung! Es ist wie eine Superhelden-Uhr, die allen hilft, sich zu synchronisieren. GMT ist die Zeit auf der magischen Uhr in Greenwich, und wenn Sie wissen, wie spät es dort ist, können Sie Aktivitäten mit Ihren Freunden leichter koordinieren, ganz gleich, wo auf der Welt sie sich befinden. Die GMT ist also so etwas wie eine Superheldenzeit, die Menschen an verschiedenen Orten dabei hilft, sich darauf zu einigen, wann sie etwas gemeinsam unternehmen.
Stellen Sie sich vor, dass in unserer Superheldenstadt Greenwich manchmal beschlossen wird, die magische Uhr zu bestimmten Zeiten des Jahres schneller oder langsamer gehen zu lassen. Das ist wie ein spezielles Power-Up für ihre Uhr. Wenn sie schneller geht, nennt man das Sommerzeit, und wenn sie langsamer geht, ist es die normale Zeit. Wenn unsere Freunde auf der ganzen Welt die Superheldenzeit von Greenwich wissen wollen, müssen sie wissen, ob die magische Uhr im Sommerzeitmodus ist oder nicht. Die Funktion „TimeGMT()“ von MQL5 ist wie ein Bote, der ihnen die Superheldenzeit mitteilt, wobei berücksichtigt wird, ob sich die magische Uhr gerade im Sommerzeitmodus befindet oder nicht.
Bei der Programmierung sind diese Informationen von entscheidender Bedeutung, da sie den Händlern und Algorithmen helfen, die Zeit unter Berücksichtigung aller Anpassungen an die Superheldenuhr in Greenwich genau zu verfolgen. „TimeGMT()“ ist also unser vertrauenswürdiger Bote, der die richtige Superheldenzeit liefert und dabei berücksichtigt, ob in unserer magischen Stadt Sommerzeit herrscht oder nicht.
Beispiel:
void OnStart() { // Declaration of a variable to store GMT time datetime gmtTime; // Assigning the current GMT time to the variable gmtTime = TimeGMT(); // Printing the GMT time Print("Current GMT Time: ", TimeToString(gmtTime)); }
Erläuterung:
„datetime gmtTime;“:
- Diese Zeile deklariert eine Variable namens „gmtTime“ vom Typ „datetime“. „datetime“ ist ein Datentyp in MQL5, der zur Darstellung von Datums- und Zeitwerten verwendet wird.
„gmtTime = TimeGMT();“:
- Diese Zeile weist die aktuelle GMT-Zeit der Variablen „gmtTime“ zu. Die Funktion „TimeGMT()“ wird aufgerufen, um die aktuelle GMT-Zeit zu ermitteln.
„Print("Current GMT Time: ", TimeToString(gmtTime));“:
- Diese Zeile verwendet die Funktion Print, um eine Meldung in der Konsole anzuzeigen. Sie gibt den Text „Current GMT-Zeit:“ aus, gefolgt von der GMT-Zeit, die mit TimeToString(gmtTime) in einen String umgewandelt wurde.
Zusammenfassend lässt sich sagen, dass dieser Codeschnipsel eine Variable zum Speichern der GMT-Zeit deklariert, dieser Variable die aktuelle GMT-Zeit zuweist und dann eine Meldung mit der aktuellen GMT-Zeit auf der Konsole ausgibt.
3.2.3. TimeLocal
Die Funktion „TimeLocal()“ in MQL5 ist wie eine Uhr, die auf die lokale Zeit Ihres Computers eingestellt ist. Es hilft Ihnen zu wissen, wie spät es an Ihrem geografischen Standort ist. Wenn Sie „TimeLocal()“ verwenden, erhalten Sie die Zeit gemäß der Systemuhr Ihres Computers, ohne dass eine Anpassung an globale Zeitzonen erfolgt.
Nehmen wir an, Sie befinden sich in New York, und die Uhr Ihres Computers ist auf New Yorker Zeit eingestellt. Wenn Sie „TimeLocal()“ verwenden, erhalten Sie die aktuelle Zeit auf der Grundlage der Uhr Ihres Computers, sodass Sie sie leicht mit Ihrer täglichen Routine und den lokalen Zeiteinstellungen in Verbindung bringen können. Diese Funktion ist praktisch, wenn Sie mit der Zeit im Kontext Ihrer Zeitzone arbeiten wollen, ohne sich um globale Abweichungen zu kümmern.
Analogie
Stell dir vor, du hast eine magische Uhr, die dir die Zeit anzeigt. Die Funktion TimeLocal in MQL5 ist so, als würden Sie Ihre magische Uhr fragen: „Hey, wie spät ist es hier, wo ich bin?“ Sie zeigt Ihnen die Zeit entsprechend Ihrer örtlichen Umgebung an, so wie Ihre magische Uhr die Zeit in Ihrem Zimmer versteht.
Beispiel:
void OnStart() { // Declaration of a variable to store local time datetime localTime; // Assigning the current local time to the variable localTime = TimeLocal(); // Printing the local time Print("Current Local Time: ", TimeToString(localTime)); }
Erläuterung:
Mit diesem Code wird der Computer aufgefordert, die Funktion „TimeLocal()“ zu verwenden, um die Zeit an Ihrem Standort zu ermitteln. Diese Zeit wird dann auf dem Bildschirm angezeigt. Wenn deine magische Uhr also ein Computerprogramm wäre, würde sie dir so die Zeit in deinem Zimmer anzeigen!
3.2.4. TimeGMTOffset
Die Funktion „TimeGMTOffset()“ in MQL5 hilft Ihnen, die Zeitdifferenz zwischen Ihrer Ortszeit und GMT (Greenwich Mean Time) zu ermitteln. Es ist, als würde man fragen: „Wie viele Stunden ist meine Zeit im Vergleich zur globalen Standardzeit voraus oder hinterher?“
Formel:
TimeGMTOffset = TimeGMT() - TimeLocal()
TimeGMTOffset ist eine praktische Funktion, die direkt den Zeitunterschied (Offset) zwischen GMT (Greenwich Mean Time) und der lokalen Zeit auf dem Computer, auf dem das Handelsterminal läuft, in Sekunden angibt.
Analogie
Stellen Sie sich vor, Sie haben eine magische Uhr, die Ihnen die Zeit anzeigt, aber diese Uhr funktioniert ein bisschen anders. Sie zeigt Ihnen nicht nur die Uhrzeit an, sondern auch den Unterschied zwischen Ihrer Zeit und einer speziellen Zeit, nach der sich alle Menschen auf der Welt richten. Diese besondere Zeit ist die Zeit, auf die sich alle einigen, die sogenannte Greenwich Mean Time (GMT). Jetzt müssen Sie nicht mehr komplizierte Berechnungen anstellen, um herauszufinden, um wie viel Ihre Zeit von dieser speziellen Zeit abweicht, sondern Sie haben eine magische Schaltfläche namens TimeGMTOffset. Wenn Sie diese Taste drücken, erhalten Sie direkt die Antwort: die Anzahl der Sekunden, die Ihre Zeit vor oder hinter der Universalzeit liegt.
Wenn Sie also jemals etwas zur gleichen Zeit mit Freunden aus verschiedenen Orten oder sogar mit magischen Wesen in verschiedenen Zeitzonen planen wollen, hilft Ihnen diese magische Schaltfläche, herauszufinden, wann Sie sich treffen können, ohne alles selbst berechnen zu müssen. Es ist, als hätte man einen Helfer, der dafür sorgt, dass alle auf der gleichen Seite stehen, egal wo sie sind!
Beispiel:
void OnStart() { // Declaration of variables int gmtOffsetSeconds, gmtOffsetMinutes; // Assigning the current GMT offset to the variable in seconds gmtOffsetSeconds = TimeGMTOffset(); // Converting seconds to minutes gmtOffsetMinutes = gmtOffsetSeconds / 60; // Printing the GMT offset in minutes Print("Current GMT Offset (in minutes): ", gmtOffsetMinutes); }
Erläuterung:
„int gmtOffsetSeconds, gmtOffsetMinutes;“:
- Hier deklarieren wir zwei Variablen („gmtOffsetSeconds“ und „gmtOffsetMinutes“), um den GMT-Unterschied in Sekunden bzw. Minuten zu speichern.
„gmtOffsetSeconds = TimeGMTOffset();“:
- Wir verwenden die Funktion „TimeGMTOffset()“, um den aktuellen GMT-Offset in Sekunden zu ermitteln und ihn der Variablen „gmtOffsetSeconds“ zuzuweisen.
“gmtOffsetMinutes = gmtOffsetSeconds / 60;“:
- Um den GMT-Offset von Sekunden in Minuten umzurechnen, teilen wir „gmtOffsetSeconds“ durch „60“ und speichern das Ergebnis in „gmtOffsetMinutes“.
“Print("Current GMT Offset (in minutes): ", gmtOffsetMinutes);“:
- Schließlich geben wir die GMT-Unterschied in Minuten auf der Konsole aus. Die Funktion „Print“ zeigt den Text innerhalb der Anführungszeichen zusammen mit dem berechneten GMT-Offset in Minuten an.
In diesem Code wird zunächst der GMT-Offset in Sekunden mit „TimeGMTOffset()“ ermittelt, dann wird dieser Wert durch 60 geteilt, um ihn in Minuten umzurechnen. Schließlich drucken wir die GMT-Verschiebung in Minuten. Wenn Sie diesen Code in Ihrem MQL5-Skript ausführen, wird die GMT-Verschiebung in Minuten angezeigt.
Ein GMT-Unterschied von -60 bedeutet, dass die Ortszeit der GMT um 60 Minuten voraus ist.
3.2.5. TimeToStruct
In MQL5 wird die Funktion „TimeToStruct()“ verwendet, um einen Zeitstempel (dargestellt als die Anzahl der Sekunden seit dem 1. Januar 1970) in ein strukturiertes Format umzuwandeln. Dieses strukturierte Format wird durch die vordefinierte Struktur „MqlDateTime“ dargestellt, die separate Elemente für Jahr, Monat, Tag, Stunde, Minute und Sekunde enthält.
Beispiel:
void OnStart() { // Declare an MqlDateTime variable MqlDateTime myTime; // Convert the current timestamp to a structured format TimeToStruct(TimeCurrent(), myTime); // Access individual components of the structured time Print("Current Year: ", myTime.year); Print("Current Month: ", myTime.mon); Print("Current Day: ", myTime.day); Print("Current Hour: ", myTime.hour); Print("Current Minute: ", myTime.min); Print("Current Second: ", myTime.sec); }
Im obigen Beispiel gibt „TimeCurrent()“ den aktuellen Zeitstempel zurück, und „TimeToStruct“ wandelt diesen Zeitstempel in ein strukturiertes Format um, das in der „MqlDateTime“-Variablen „myTime“ gespeichert wird. Nach der Konvertierung können Sie auf bestimmte Komponenten der Zeit (Jahr, Monat, Tag usw.) über die Mitglieder der Struktur „myTime“ zugreifen.
Anmerkung: Weitere Erklärungen zu MqlDateTime werden im Laufe dieses Artikels folgen.
Analogie
Lassen Sie uns ein wenig tiefer in die Magie von „TimeToStruct()“ eintauchen. Stellen Sie sich vor, wir haben einen riesigen Vorrat an Sekunden, die im Jahr 1970 zu ticken begannen (das ist sozusagen der magische Startpunkt der Computerzeitmessung). Nun haben sich diese Sekunden angehäuft, und wir wollen wissen, wie viele Stunden, Minuten, Tage und sogar Jahre in dieser großen Zahl stecken.
Hier kommt „TimeToStruct()“ ins Spiel. Es nimmt diesen riesigen Haufen von Sekunden und unterteilt sie in ein menschenfreundlicheres Format. Wenn wir also eine gewaltige Zahl wie 100.000 Sekunden haben, wird „TimeToStruct()“ uns sagen: „Hey, das sind ungefähr 27 Stunden, 46 Minuten und 40 Sekunden!“ Es ist, als hätte man einen magischen Taschenrechner, der eine rohe Zahl von Sekunden in eine detaillierte Aufschlüsselung der Zeit umwandelt und dabei alles seit dem magischen Startpunkt im Jahr 1970 berücksichtigt.
Stellen Sie sich vor, Sie haben eine magische Zeitkapsel namens „MqlDateTime“, und wenn Sie sie mit einem bestimmten Zeitpunkt (z. B. der aktuellen Uhrzeit) füttern, öffnet sie sich und gibt die Details übersichtlich preis. Die Funktion „TimeToStruct()“ ist wie ein Zauberspruch für diese Zeitkapsel und verwandelt die rohen Sekunden seit 1970 in eine schön organisierte Informationen.
Wenn Sie also eine Sekunde gezählt haben, schwingt „TimeToStruct()“ seinen Zauberstab, und plötzlich haben Sie ein klares Verständnis von Jahr, Monat, Tag, Stunde, Minute, Sekunde, Wochentag und Tag des Jahres — alles fein säuberlich in die Struktur „MqlDateTime“ gepackt. Es ist, als würde man einen mysteriösen Zeitcode in ein lesbares Datums- und Zeitbuch verwandeln, was Ihre Programme vielseitiger und zeitbewusster macht!
Beispiel:
void OnStart() { // Declare an MqlDateTime variable MqlDateTime myTime; // Convert the number of seconds into a structured format TimeToStruct(100000, myTime); // Now, myTime will tell us the breakdown since 1970 Print("Years: ", myTime.year); Print("Months: ", myTime.mon); Print("Days: ", myTime.day); Print("Hours: ", myTime.hour); Print("Minutes: ", myTime.min); Print("Seconds: ", myTime.sec); }
Erläuterung:
„MqlDateTime myTime;“:
- Wir deklarieren eine magische Uhr namens „myTime“ unter Verwendung der Struktur „MqlDateTime“.
„TimeToStruct(100000, myTime);“:
- Hier wenden wir den Zauber namens „TimeToStruct“ an, um die Anzahl der Sekunden (in diesem Fall 100.000) in das strukturierte Format zu konvertieren, das in „myTime“ gespeichert ist. Es ist, als würde man der magischen Uhr sagen, sie solle einen bestimmten Zeitpunkt entschlüsseln.
„Print("Years: ", myTime.year);“:
- Nun befehlen wir der magischen Uhr, die Jahre seit 1970 mithilfe ihres Jahresattributs anzuzeigen. Das Gleiche gilt für Monate, Tage, Stunden, Minuten und Sekunden.
Vereinfacht ausgedrückt ist es so, als ob wir einen Moment in der Zeit (100.000 Sekunden seit 1970) nehmen und unsere magische Uhr bitten würden, ihn in Jahre, Monate, Tage usw. aufzuteilen. Es ist eine Möglichkeit, die Zeit auf eine detailliertere und strukturiertere Weise zu verstehen. Wie zauberhaft!
Liebe Coding-Enthusiasten, während Sie sich durch die Feinheiten der Zeitfunktionen in MQL5 navigieren, denken Sie daran, dass jede Frage ein Schlüssel zum Erschließen neuer Bereiche des Verständnisses ist. Diese Reise ist eine schrittweise Erkundung, ähnlich wie ein Streifzug durch einen magischen Wald von Codes. Wenn Sie ins Grübeln kommen, zögern Sie nicht, Fragen zu stellen, denn sie sind die Laternen, die uns durch die Gefilde des Wissens führen.
Anmerkung: Die heutigen Einblicke in „MqlDateTime“ sind erst der Anfang. Das Abenteuer der vordefinierten Strukturen wird im nächsten Artikel weiter entfaltet.
Schlussfolgerung
Zum Abschluss dieses Kapitels haben wir uns in das faszinierende Reich der Strukturen, Klassen und des Zeitkonzepts in MQL5 begeben. Denken Sie daran: Lernen ist eine dynamische Reise, und Fragen sind der Kompass, der Sie durch unbekannte Gebiete führt. Wenn Sie sich an einem Scheideweg befinden, zögern Sie nicht zu fragen; Ihre Neugier ist der Motor des Fortschritts. Bleiben Sie dran für die kommenden Artikel, in denen wir weitere Schichten der Programmiermagie von MQL5 aufdecken werden. Ihre Fragen sind nicht nur willkommen, sie sind der Katalysator für ein tieferes Verständnis. Viel Spaß beim Programmieren, und lassen wir die Suche nach Wissen weitergehen!
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/14232
![Datenwissenschaft und maschinelles Lernen (Teil 20): Algorithmische Handelseinblicke, eine Gegenüberstellung von LDA und PCA in MQL5](https://c.mql5.com/2/70/Data_Science_and_Machine_Learning_Part_20__LOGO.png)
![Aufbau und Test von Keltner-Kanal-Handelssystemen](https://c.mql5.com/2/69/Building_and_testing_Keltner_Channel_trading_systems____LOGO__1.png)
![Arbeiten mit ONNX-Modellen in den Datenformaten float16 und float8](https://c.mql5.com/2/71/onnx-float-avatar.png)
![Implementierung des verallgemeinerten Hurst-Exponenten und des Varianz-Verhältnis-Tests in MQL5](https://c.mql5.com/2/69/Implementing_the_Generalized_Hurst_Exponent_and_the_Variance_Ratio_test_in_MQL5____LOGO__1.png)
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.