English Русский 日本語
preview
Einführung in MQL5 (Teil 39): Leitfaden für Anfänger zur Dateiverwaltung in MQL5 (I)

Einführung in MQL5 (Teil 39): Leitfaden für Anfänger zur Dateiverwaltung in MQL5 (I)

MetaTrader 5Experten |
119 0
ALGOYIN LTD
Israel Pelumi Abioye

Einführung

Willkommen zurück zu Teil 39 der Reihe „Einführung in MQL5“! In diesem Abschnitt konzentrieren wir uns auf die Dateiverwaltung in MQL5 und darauf, wie Sie Dateien in Ihren Programmen effektiv verwalten können. Dateien spielen in vielen praktischen Handelsanwendungen eine wichtige Rolle. Sie können dazu verwendet werden, Marktdaten zu speichern, Indikatorwerte zu sichern, Handelsaktivitäten zu protokollieren, Fehler aufzuzeichnen oder historische Informationen zu speichern, die auch nach einem Neustart von MetaTrader erhalten bleiben sollen. Dieser Artikel richtet sich an Anfänger. Die Code-Beispiele sind in übersichtliche, leicht verständliche Abschnitte unterteilt, und jeder Schritt wird ausführlich beschrieben. Wo immer es sinnvoll ist, werden für Anfänger leicht verständliche Vergleiche herangezogen, um technische Konzepte mit konkreten Situationen in Verbindung zu bringen.

In diesem Artikel werden wir uns damit befassen, wie MQL5 mit Dateien umgeht, wo diese auf Ihrem Computer gespeichert werden und wie man sie korrekt öffnet, aus ihnen liest, in sie schreibt und sie schließt. Außerdem werden praktische Anwendungsfälle behandelt, darunter Datenanalyse, Strategieprotokollierung, Konfigurationsspeicherung und Datenaustausch zwischen verschiedenen MQL5-Programmen. Wir werden, wie in dieser Reihe üblich, einen projektorientierten Ansatz verfolgen. Anstatt uns separat mit der Dateiverwaltung zu befassen, werden wir diese sofort in einem praxisnahen Projekt anwenden. In diesem Artikel werden wir ein MQL5-Skript erstellen, das als einfaches Handelsjournal dient. Das Skript erstellt bei seiner Aktivierung automatisch eine Datei und zeichnet Informationen zum Kontoverlauf auf, darunter Ticketnummer der Transaktion, Symbol, Ordertyp, Lotgröße, Eröffnungszeit, Eröffnungskurs, Stop-Loss, Take-Profit, Schließzeit, Schließkurs, Gewinn in Dollar und Handelsergebnis.

Das Journal enthält neben der Handelshistorie auch den Kontonamen, den Kontostand und die Login-Nummer. Die Handelshistorie wird für einen vorab festgelegten Zeitraum in das Journal übertragen, und in der Datei wird der Zeitpunkt der letzten Aktualisierung vermerkt. Dieses Projekt wird ein anschauliches Beispiel dafür liefern, wie Dateien in MQL5 genutzt werden können, um Handelsdaten auf wiederverwendbare und strukturierte Weise zu verwalten, zu speichern und zu organisieren.

Abbildung 1. Handelsjournal

Das Projekt wird in zwei Abschnitte unterteilt. Anstatt die Datei manuell in Ihrem Code zu erstellen, erfahren Sie in diesem Artikel, wie Sie mithilfe der Funktion „FileSelectDialog“ eine Datei direkt aus MetaTrader 5 erstellen können. Anschließend werden wir uns damit befassen, wie man die ausgewählte Datei öffnet, Daten hinzufügt und sie nach Abschluss des Vorgangs ordnungsgemäß schließt. Das Ziel dieses ersten Abschnitts ist es, Ihnen eine solide Grundlage zu vermitteln und Ihnen dabei zu helfen, die grundlegenden Dateiverarbeitungsroutinen von MQL5 besser zu verstehen.

Auf dieser Grundlage werden wir im folgenden Artikel zeigen, wie man vergangene Handelsdaten automatisch abruft und in der Protokolldatei speichert. In diesem Schritt wird alles zusammenlaufen und gezeigt, wie die Dateiverwaltung genutzt werden kann, um vollautomatische und nützliche Trading-Tools zu erstellen.


Verwendung von „FileSelectDialog“ zum Erstellen und Auswählen von Dateien in MQL5

Die erste Voraussetzung für die Arbeit mit einer Datei in MQL5 ist, dass man eine Datei hat. Das Programm muss beispielsweise genau wissen, in welche Datei Ihre Kontodaten geschrieben werden sollen, wenn Sie diese kopieren und in einem Handelsjournal speichern möchten. Eine einfache Methode ist es, den Dateinamen direkt in Ihre Software fest einzuprogrammieren. Das ist ziemlich einschränkend und starr, insbesondere bei Tools aus der Praxis, die für die gemeinsame Nutzung oder Wiederverwendung gedacht sind, auch wenn es in bestimmten Situationen funktioniert. Stellen Sie sich vor, was passieren würde, wenn Sie möchten, dass der Benutzer den Speicherort des Journals auswählt, oder wenn Sie jedes Mal eine andere Datei auswählen möchten. Wenn das Skript oder der Expert Advisor auf vielen Rechnern, Konten oder in vielen Umgebungen eingesetzt wird, gewinnt dies noch mehr an Bedeutung. In solchen Fällen ist es nicht mehr ideal, im Code einen festen Dateinamen vorzugeben.

In dieser Situation ist diese Funktion sehr nützlich. Mit dieser Funktion kann MetaTrader 5 den Benutzer fragen, mit welcher Datei gearbeitet werden soll. Sobald der EA oder das Skript aktiviert wird, erscheint ein vertrautes Dateiauswahlfenster auf dem Bildschirm. In diesem Fenster können Sie bereits vorhandene Dateien durchsuchen, eine davon auswählen oder sogar einen neuen Dateinamen eingeben. Die Flexibilität und der Komfort dieses Ansatzes sind zwei seiner Hauptvorteile. Sie können die bestehende Handelsjournal-Datei auswählen und weiterhin neue Informationen hinzufügen. Falls die Datei noch nicht vorhanden ist, erstellt MetaTrader sie für Sie, sobald Sie einen neuen Dateinamen eingeben. So müssen Sie keine Dateien manuell erstellen und haben keine Probleme mit der Benennung und dem Speicherort.

Die Benutzerfreundlichkeit ist ein weiterer wesentlicher Vorteil. Wenn „FileSelectDialog“ verwendet wird, verhält sich Ihr Programm eher wie eine typische Desktop-Anwendung. Der Speicherort der Datei, ihr Name und ihr Verwendungszweck zur Datenspeicherung sind für den Benutzer auf einen Blick erkennbar. Dadurch werden Fehler vermieden und die Handhabung sowie die Sicherheit Ihrer Werkzeuge verbessert, insbesondere für Anfänger. Auf diese Weise können Sie das Skript für ein Handelsjournal starten, eine bereits vorhandene Journal-Datei auswählen oder eine neue anlegen und sofort damit beginnen, Kontoinformationen, Handelshistorie und Änderungen strukturiert einzugeben. Dieser Ansatz eignet sich ideal für die Entwicklung zuverlässiger und benutzerfreundlicher MQL5-Tools, da er vollständige Kontrolle über die Dateiverarbeitung bietet und gleichzeitig einfach und intuitiv zu handhaben ist.

Beispiel:
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string arrays_filename[];
   string default_filename = "Trading_Journal.csv";

   int result = FileSelectDialog("Select a File", NULL,"CSV files|*.csv", FSD_WRITE_FILE,arrays_filename,default_filename);

   string filename;
   if(result == 0)
     {

      Print("No file selected");

     }

   else
      if(result > 0)
        {

         Print("The trading journal will be saved in ",arrays_filename[0]);

         filename = arrays_filename[0];

        }

      else
        {

         Print(GetLastError());

        }
  }

Ausgabe:

Abbildung 2. FileSelectDialog

Erläuterung:

In der ersten Variablen sollen mehrere Dateinamen gespeichert werden. Da es mehrere Textwerte gleichzeitig speichern kann, ist es als Array deklariert. Dies ist besonders nützlich bei der Arbeit mit Dateiauswahldialogen, wenn ein Benutzer mehrere Dateien auswählen kann oder der Dialog mehrere Dateipfade zurückliefert. Die Verwendung eines Arrays sorgt dafür, dass die Software flexibel bleibt und für zukünftige Erweiterungen gerüstet ist. Derzeit kann das Programm nur eine einzige Datei verarbeiten, doch in Zukunft wird die Bearbeitung mehrerer Dateien kein Problem mehr darstellen. Kurz gesagt: Es funktioniert wie ein Feld, in das man viele Dateinamen oder Pfade eingeben kann, statt nur einen.

Der Name einer Sicherungs- oder Ausgangsdatei wird durch die zweite Variable dargestellt. Diese Option dient dazu, den Standarddateinamen festzulegen, der beim Start des Programms oder beim Öffnen des Dateiauswahlfensters verwendet oder empfohlen werden soll. Der Trader muss sich nicht mehr jedes Mal überlegen, welchen Namen er eingeben soll, was die Benutzerfreundlichkeit verbessert.  Wenn Sie diesen Standardnamen übernehmen, weiß das Programm bereits, welche Datei verwendet werden soll. Falls noch keine neue Datei mit diesem Namen vorhanden ist, kann sie automatisch angelegt werden. Im Wesentlichen dient sie als voreingestellte Option, die den Vorgang beschleunigt und Fehler wie die Eingabe eines falschen Dateinamens reduziert.

Diese Zeile speichert das Ergebnis der vom Benutzer durchgeführten Aktion und öffnet das Dateiauswahlfenster in MetaTrader 5. Der Wert gibt der Anwendung an, ob der Dialog erfolgreich beendet wurde, d. h., ob der Benutzer eine Datei erstellt oder ausgewählt hat, anstatt das Fenster zu schließen. Bei einem positiven Ergebnis kann die Anwendung die ausgewählte Datei problemlos weiterverarbeiten. Ein Wert von null oder ein negativer Wert bedeutet, dass keine Auswahl getroffen wurde. Das erste Argument dient der Benutzerführung und sorgt für eine übersichtlichere und ansprechendere Benutzeroberfläche, indem es den Titel festlegt, der oben im Dialogfeld angezeigt wird.

Abbildung 3. Beschriftung

Der zweite Parameter legt fest, in welchem Ordner das Dateiauswahlfenster zunächst geöffnet wird. Wenn dieser Parameter auf NULL gesetzt ist, wird MetaTrader angewiesen, kein benutzerdefiniertes Startverzeichnis festzulegen. Vielmehr öffnet die Plattform das Dialogfeld im Verzeichnis „MQL5\Files“, das als Standardarbeitsverzeichnis dient.  Dieses Verhalten ist hilfreich, da es die Dateioperationen im Einklang mit den Vorgaben des MetaTrader-Dateisystems hält und die Kompatibilität mit vielen Systemen gewährleistet. Da die Benutzer nicht an einen fest programmierten Ordnerpfad gebunden sind, verbessert dies zudem die Mobilität und Benutzerfreundlichkeit.

Die dritte Option dient der Dateifilterung und legt fest, welche Dateitypen im Dateidialog angezeigt und ausgewählt werden können. Ein senkrechter Strich trennt die beiden Abschnitte des Formats, das einer übersichtlichen Struktur folgt. Während der zweite Abschnitt das eigentliche Dateimuster darstellt, das MetaTrader anzeigen darf, ist der erste Teil die Bezeichnung, die der Benutzer im Dialogfeld sieht.

Bei CSV-Dateien (*.csv) wird dem Benutzer eine verständliche Bezeichnung für CSV-Dateien angezeigt:

Abbildung 4. Beschreibung

Dadurch wissen sie, mit welcher Art von Dateien sie arbeiten. Die Regel, die MetaTrader anweist, nur Dateien mit der Endung „.csv“ anzuzeigen, ist der Abschnitt, der auf den Strich folgt: *.csv. Der Benutzer kann nicht versehentlich einen nicht unterstützten Dateityp auswählen, da alle Dateien, die diesem Muster nicht entsprechen, ausgeblendet werden. Es ist außerdem möglich, diese Filtermethode für verschiedene Dateitypen anzupassen. Ein Logdatei-Filter kann die Liste beispielsweise auf Logdateien beschränken, während ein Textdatei-Filter nur .txt-Dateien anzeigt. Benutzer können aus verschiedenen unterstützten Formaten wählen, indem sie zahlreiche Dateitypen in einem einzigen Filter zusammenfassen. Dies macht die Auswahl übersichtlicher und trägt dazu bei, dass Ihr Programm nur Dateien öffnet, die es erkennen kann.

Das vierte Argument legt fest, welche Aktionen der Benutzer innerhalb des Fensters ausführen darf, und steuert somit das Verhalten des Dateidialogs. Bei einem Modus wie FSD_WRITE_FILE ist der Benutzer nicht darauf beschränkt, im Dialogfeld nur bereits vorhandene Dateien auszuwählen. Außerdem kann der Benutzer einen neuen, noch nicht vorhandenen Dateinamen eingeben, woraufhin MetaTrader die Datei sofort erstellt. Dies ist besonders nützlich für Trading-Tagebücher, da ein Trader entscheiden kann, ob er ein bestehendes Handelsjournal aktualisieren oder ganz von vorn beginnen möchte, ohne die Datei im Voraus vorbereiten zu müssen.

Durch die Kombination mehrerer Dialogoptionen lässt sich das Verhalten des Dateidialogs flexibel erweitern. Ein Modus ermöglicht beispielsweise die gleichzeitige Auswahl mehrerer Dateien. Mit dem senkrechten Strich können Sie diese Optionen kombinieren, wenn Sie mehrere Verhaltensweisen zulassen möchten. Dadurch wird MetaTrader angewiesen, mehrere Funktionen gleichzeitig zu aktivieren, darunter die Erstellung von Dateien und die Auswahl mehrerer Dateien. Je nachdem, wie einfach oder komplex Ihre Logik zur Dateiverwaltung sein muss, macht diese Architektur den Dateidialog äußerst vielseitig und an verschiedene Anwendungsfälle anpassbar.

Der fünfte Parameter dient dazu, das Ergebnis des Dateiauswahlvorgangs zu speichern. Dabei kann es sich entweder um den Namen einer im Dialogfeld neu eingegebenen Datei oder um den Namen einer vorhandenen Datei handeln, die der Benutzer ausgewählt hat. Sobald der Benutzer seine Auswahl bestätigt hat, werden die Dateinamen direkt aus dem Dialogfeld in diese Variable übernommen, sodass diese Dateien für nachfolgende Vorgänge wie das Auslesen von Daten, das Hinzufügen neuer Einträge oder das Schreiben neuer Informationen verfügbar sind. Da der Dateidialog bei aktivierter Mehrfachauswahl möglicherweise mehrere Dateinamen anzeigt, wird er als Array und nicht als einzelner Wert dargestellt. Die Verwendung eines Arrays gewährleistet die Kompatibilität für den Fall, dass der Benutzer mehrere Dateien gleichzeitig auswählt, auch wenn Ihr aktuelles Projekt nur eine Datei verwendet. Dank dieser Architektur ist das System flexibler, was zudem gewährleistet, dass alle gewählten Dateinamen korrekt erfasst werden.

Der letzte Parameter legt den im Dialogfeld angezeigten Standarddateinamen fest:

Abbildung 5. Standardname

Das spart Zeit und ist eine nützliche Hilfe für den Nutzer. Der Name wird automatisch übernommen, wenn der Benutzer ihn unverändert bestätigt. Das System erstellt die Datei mit diesem Namen, falls sie noch nicht existiert. Dadurch wird der Vorgang vereinfacht und Fehler bei der manuellen Eingabe werden vermieden. Das Programm verarbeitet anschließend das Ergebnis der Dateiauswahl. Wenn der Benutzer den Vorgang abbricht, wird eine Meldung angezeigt, dass keine Datei ausgewählt wurde. Der Name wird für die spätere Verwendung gespeichert, und der Speicherort der Datei wird angezeigt, wenn eine Datei ausgewählt wurde. Das Programm kann alle möglichen Ergebnisse des Dateidialogs sicher verarbeiten, indem es unerwartete Fehler abfängt und anzeigt.


Dateien in MQL5 erstellen

Die Funktion „FileSelectDialog“, mit der Benutzer bereits vorhandene Dateien auswählen oder einen neuen Dateinamen und Speicherort eingeben können, wurde im vorigen Kapitel behandelt. Aber „FileSelectDialog“ erstellt selbst keine Datei. Seine Funktion beschränkt sich darauf, Benutzereingaben zu erfassen und den Speicherort sowie den Namen der Datei festzulegen. In diesem Kapitel wird die Funktion „FileOpen“ vorgestellt und beschrieben, wie damit eine Datei für die Verwendung in einem MQL5-Programm vorbereitet wird. FileOpen erstellt entweder eine neue Datei oder öffnet eine vorhandene, wenn der Dateiname und der Speicherort über FileSelectDialog ausgewählt werden. Da diese Phase die Software mit der Datei verbindet und das sichere Lesen und Schreiben von Daten ermöglicht, ist sie von entscheidender Bedeutung.

Die Kombination aus „FileSelectDialog“ und „FileOpen“ bietet uns Kontrolle und Flexibilität. Das Programm stellt zwar sicher, dass die Datei korrekt erstellt und für Dateioperationen vorbereitet wird, doch der Benutzer kann den Dateinamen und den Speicherort selbst wählen. Diese Methode macht die Dateiverwaltung in MQL5 zuverlässiger und benutzerfreundlicher, insbesondere für praktische Anwendungen wie den Export von Kontodaten oder die Aufzeichnung von Handelsaktivitäten.

Beispiel:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string arrays_filename[];
   string default_filename = "Trading_Journal.csv";

   int result = FileSelectDialog("Select a File", NULL,"CSV files|*.csv", FSD_WRITE_FILE,arrays_filename,default_filename);

   string filename;
   if(result == 0)
     {

      Print("No file selected");

     }

   else
      if(result > 0)
        {

         Print("The trading journal will be saved in ",arrays_filename[0]);

         filename = arrays_filename[0];

        }

      else
        {

         Print(GetLastError());

        }

   int handle = FileOpen(filename, FILE_WRITE|FILE_CSV|FILE_SHARE_READ|FILE_ANSI, ',');

   if(handle == INVALID_HANDLE)
     {

      Print("Error opening file for writing. Error code: ", + GetLastError());

     }

   else
      if(handle != INVALID_HANDLE)
        {

         Print("File Sucessfully Opened");
         FileClose(handle);

        }
  }

Erläuterung:

Mit MQL5 ermöglicht die Funktion „FileOpen“ Ihrem Programm den Zugriff auf eine Datei, sodass es in diese schreiben oder aus ihr lesen kann. FileOpen legt die Datei sofort unter dem gewählten oder über FileSelectDialog eingegebenen Namen an, sofern der von Ihnen eingegebene Dateiname noch nicht existiert. Existiert die Datei bereits, wird sie einfach geöffnet. Da all dies im Hintergrund abläuft, wird die Datei auf Ihrem Bildschirm nicht als geöffnet angezeigt. Aus diesem Grund sollten Sie davon absehen, manuell auf die Datei zuzugreifen, da dies dazu führen kann, dass „FileOpen“ mit einer Fehlermeldung fehlschlägt.

Der Dateiname, der MQL5 mitteilt, welche Datei geöffnet oder erstellt werden soll, ist der erste Parameter von FileOpen. In der Regel handelt es sich dabei um den Namen, den Sie zuvor mit dem Dateiauswahldialog ausgewählt haben. Der Öffnungsmodus der Datei wird durch die zweite Option festgelegt. Mit FILE_WRITE kann das Programm in diesem Beispiel Daten in die Datei schreiben. Die Datei wird als CSV-Datei (Comma-Separated Values) behandelt, wobei FILE_CSV MQL5 anweist, die Datei als CSV-Datei zu behandeln, was für strukturierte Daten wie beispielsweise ein Handelsjournal von Vorteil ist. Dank FILE_SHARE_READ können andere Programme die Datei lesen, während Ihr Programm in sie schreibt. Um sicherzustellen, dass der Text in einer standardmäßigen, lesbaren Form vorliegt, definiert FILE_ANSI die Zeichenkodierung der Datei.

Das Trennzeichen, in diesem Fall ein Komma, ist der dritte Parameter. Dadurch wird MQL5 mitgeteilt, wie die Werte der Datei aufgeteilt werden sollen, was für CSV-Dateien von entscheidender Bedeutung ist, da dieses Zeichen die einzelnen Datenspalten voneinander trennt. Die Funktion „FileOpen“ stellt sicher, dass Ihre Datei für die Aufnahme von Daten im entsprechenden Format vorbereitet ist, und ermöglicht es anderen Programmen, diese bei Bedarf sicher zu lesen, indem diese Parameter kombiniert werden. Dies dient als Grundlage für die effektive Nachverfolgung Ihrer Kontohistorie und und dazu, Ihr Handelsjournal zu führen.

Bei der Verwendung von FileOpen wird ein Handle zurückgegeben, das als eindeutige Kennung für die Datei dient, mit der Ihr Programm gerade arbeitet. Man kann es sich als eine Art Ticket oder Schlüssel vorstellen, der MQL5 mitteilt, aus welcher Datei gelesen oder in welche Datei geschrieben werden soll. Jeder Datei, die Sie öffnen, wird ein Handle zugewiesen, das bei allen nachfolgenden Vorgängen verwendet wird, um auf die entsprechende Datei zuzugreifen. Auf diese Weise kann Ihre Software mehrere Dateien gleichzeitig verarbeiten, ohne dass diese durcheinandergeraten. Es ist von entscheidender Bedeutung, zu überprüfen, ob das Öffnen der Datei erfolgreich war. Das Programm prüft, ob der zurückgegebene Wert INVALID_HANDLE entspricht, also um einem Wert, der darauf hinweist, dass die Datei nicht erstellt oder geöffnet wurde. In diesem Fall gibt GetLastError einen Code zurück und zeigt eine Fehlermeldung an, die den Grund dafür erläutert. Dies kann daran liegen, dass die Datei gerade verwendet wird, dass die Berechtigungen nicht ausreichen oder ein anderes Problem vorliegt.

Die Gültigkeit des Handles wird durch die zweite Anforderung bestätigt. Dies bestätigt, dass die Datei erfolgreich erstellt bzw. geöffnet wurde. In diesem Fall zeigt das Programm durch die Ausgabe einer Meldung an, dass die Datei zum Schreiben bereit ist. Die Beschränkung von Dateioperationen auf gültige Handles trägt dazu bei, Fehler zu vermeiden, und gewährleistet die Sicherheit Ihrer Daten. Mit der Funktion „FileClose“ können Dateien, die mit „FileOpen“ geöffnet wurden, ordnungsgemäß geschlossen werden. Welche Datei geschlossen wird, hängt vom angegebenen Handle ab. Um sicherzustellen, dass alle geschriebenen Daten korrekt gespeichert werden, und um Systemressourcen freizugeben, muss eine Datei geschlossen werden. Wenn eine Datei offen bleibt, werden die Daten möglicherweise nicht vollständig geschrieben, und andere Programme oder Skripte können möglicherweise erst dann darauf zugreifen, wenn MetaTrader beendet wurde.

Analogie:

Man kann sich „FileOpen“ so vorstellen, als würde es Ihrem Programm ein persönliches Schließfach zur Verfügung stellen, in dem Daten gespeichert und abgerufen werden können. Das von Ihnen ausgewählte Schließfach wird von FileOpen sofort angelegt, falls es noch nicht existiert – ganz so, wie wenn Sie sich in der Schule ein neues Schließfach aussuchen. Die Software öffnet das Schließfach lediglich, wenn es bereits vorhanden ist, damit sie auf dessen Inhalt zugreifen kann. Auf Ihrem Bildschirm werden Sie nicht sehen, wie sich das Schließfach öffnet, da alles im Hintergrund abläuft. Da das Schließfach bereits belegt ist, sollten Sie davon absehen, gleichzeitig manuell darauf zuzugreifen, um zu verhindern, dass die Software eine Fehlermeldung ausgibt.

Das Eintragen der Schließfachnummer auf einem Etikett entspricht der Verwendung des ersten Arguments von FileOpen. Dadurch wird das Programm angewiesen, ein Schließfach zu öffnen oder anzulegen, in der Regel unter Verwendung des Namens, den Sie zuvor über FileSelectDialog ausgewählt haben. Die Richtlinien für die Nutzung des Schließfachs werden durch den zweiten Parameter festgelegt. So garantiert beispielsweise FILE_ANSI, dass alle gespeicherten Daten in einem lesbaren Standardformat vorliegen; FILE_WRITE ermöglicht es dem Programm, neue Inhalte im Schließfach abzulegen; FILE_CSV ordnet Elemente zur strukturierten Speicherung in separate Bereiche ein; und FILE_SHARE_READ ermöglicht es anderen, das Schließfach einzusehen, ohne dessen Inhalt zu verändern.

Die Trennwand des Schließfachs, die wie beschriftete Fächer für verschiedene Arten von Gegenständen aussieht, ist der dritte Parameter. In diesem Fall werden die einzelnen Datenelemente durch ein Komma getrennt, sodass alles übersichtlich in Spalten angeordnet werden kann. Da diese Konfiguration den gesamten Kontoverlauf, alle Transaktionen und Zahlen übersichtlich und gut lesbar darstellt, eignet sie sich besonders gut für ein Handelsjournal. FileOpen richtet den Speicherbereich so ein, dass Sie Ihre Handelsdaten durch die Kombination dieser Optionen sicher speichern und abrufen können.

Schließlich lässt sich das von FileOpen zurückgegebene Handle mit einem Schließfachschlüssel vergleichen. Jedes Schließfach verfügt über einen eigenen Schlüssel, den das Programm für alle nachfolgenden Dateioperationen verwendet. Die Software überprüft die Funktionsfähigkeit des Schlüssels nach dem Öffnen des Schließfachs. Das Programm zeigt eine Fehlermeldung mit einer Begründung an, wenn der Schlüssel ungültig ist, wodurch die Erstellung oder das Öffnen des Schließfachs verhindert wird. Die Software kann Daten sicher speichern oder lesen, ohne dass dabei das Risiko von Fehlern oder Konflikten besteht, sofern der Schlüssel gültig ist und das Schließfach einsatzbereit ist.

FileClose (handle) lässt sich damit vergleichen, dass man sein Schließfach abschließt, sobald man seine Sachen verstaut oder herausgeholt hat. Es wird ein letztes Mal mit dem Schlüssel (Handle) verriegelt. Sobald das Schließfach verschlossen ist, sind alle Ihre Habseligkeiten darin sicher aufbewahrt, und es kann bei Bedarf von anderen genutzt werden. Wenn Sie versäumen, das Schließfach abzuschließen, können andere Schüler oder Programme möglicherweise nicht ordnungsgemäß auf das Schließfach zugreifen, und die darin befindlichen Gegenstände sind möglicherweise nicht vollständig gesichert. Wenn Sie das Schließfach abschließen, können Sie sicher sein, dass alles darin vollständig und unversehrt ist und dass Ihr Schlüssel so lange unwirksam bleibt, bis Sie ihn wieder aufschließen.


Daten in Dateien schreiben in MQL5

Der nächste Schritt besteht darin, mithilfe der Funktion „FileOpen“ in die neu erstellte Datei zu schreiben. Zur Erinnerung: Das Programm kann Daten in die Datei schreiben, da wir beim Öffnen der Datei die Berechtigung FILE_WRITE vergeben haben. Ohne diese Berechtigung könnten Sie keine Daten speichern; die Datei wäre somit nur lesbar. Durch das Schreiben in die Datei können Sie den Kontoverlauf, Handelsdaten und alle weiteren benötigten Informationen speichern, wodurch Ihr Handelsjournal zu einem nützlichen Werkzeug wird.

Wie bereits in den vorangegangenen Abschnitten werden wir jeden Vorgang ausführlich veranschaulichen und einfache Erklärungen sowie Beispiele bereitstellen, damit Sie besser verstehen, wie das Schreiben in Dateien in MQL5 funktioniert. Als Erstes sollten Sie beim Schreiben in die Datei die Anfangsinformationen hinzufügen, die als Kopfzeile Ihres Handelsjournals dienen sollen. In der ersten Zeile steht der Kontoname, in der zweiten der Kontostand. In der dritten Zeile steht die Login-Nummer des Kontos. Anschließend wird der Startzeitpunkt angegeben, ab dem die Kontodaten kopiert werden sollen. Die Endzeit des Datenbereichs wird dann einbezogen. In der folgenden Zeile wird schließlich der Zeitpunkt der letzten Aktualisierung angegeben, der angibt, wann das Programm die Datei zuletzt aktualisiert hat.

Wir schaffen eine systematische Grundlage für das Handelsjournal, indem wir diese Angaben zunächst oben in die Datei eintragen. Dadurch wird sichergestellt, dass jedes Programm, das die Datei verarbeitet, oder jeder, der sie später liest, den Kontext der Daten schnell erfassen kann, bevor bestimmte Transaktionen untersucht werden.

Beispiel:

int handle = FileOpen(filename, FILE_WRITE|FILE_CSV|FILE_SHARE_READ|FILE_ANSI, ',');
if(handle == INVALID_HANDLE)
  {

   Print("Error opening file for writing. Error code: ", + GetLastError());

  }

else
   if(handle != INVALID_HANDLE)
     {

      Print("File Sucessfully Opened");

      string account_name = AccountInfoString(ACCOUNT_NAME);
      double account_balance = AccountInfoDouble(ACCOUNT_BALANCE);
      long account_login = (long)AccountInfoInteger(ACCOUNT_LOGIN);

      FileWrite(handle, "Account Name: " + account_name);
      FileWrite(handle, "Account Balnce: " + DoubleToString(account_balance));
      FileWrite(handle, "Account Login: " + IntegerToString(account_login));
      FileWrite(handle, "Start Time: ", start_time);
      FileWrite(handle, "End Time: ", end_time);
      FileWrite(handle, "Last Update: ", TimeCurrent());

      FileClose(handle);
     }

Ausgabe:

Abbildung 6. In eine Datei schreiben

Erläuterung:

In der ersten Zeile wird der Kontoname als Textzeichenfolge gespeichert, nachdem er aus MetaTrader 5 abgerufen wurde. In der Regel handelt es sich bei dem Namen, den Sie bei Ihrem Broker registriert haben, um die Kontoangabe, die von der Funktion als Suchbegriff für die Abfrage bei der Plattform verwendet wird. Auf diese Weise kann die Software feststellen, welches Handelskonto zu einem bestimmten Zeitpunkt aktiv ist. Der Kontostand wird abgerufen und in der zweiten Zeile als Dezimalwert gespeichert. Das ist der gesamte Geldbetrag, der derzeit auf dem Konto verfügbar ist. Die genaue Speicherung von Bruchmengen wird durch die Verwendung des Typs double gewährleistet, was für Berechnungen im Zusammenhang mit Handelsgeschäften, Gewinnen oder dem Risikomanagement von entscheidender Bedeutung ist.

In der dritten Zeile wird die Login-Nummer des Kontos, eine spezielle Identifikationsnummer für das Konto, abgerufen. Obwohl der Wert als Ganzzahl abgerufen wird, wandeln wir ihn um, da wir ihn als Typ „long“ beibehalten möchten, damit er große Zahlen darstellen kann, ohne dass dabei die Genauigkeit beeinträchtigt wird. Wenn Sie Informationen in Ihrem Handelsjournal speichern oder eine automatische Nachverfolgung durchführen, hilft das Kontologin dabei, das genaue Konto zu identifizieren. Es wird eine Variable namens „start_time“ angelegt. Ohne die Software selbst zu ändern, können Benutzer mithilfe von Eingabevariablen Werte direkt in den Einstellungen ändern. Diese Variable enthält ein bestimmtes Datum und eine bestimmte Uhrzeit, in diesem Fall den 1. Januar 2026 um Mitternacht. Dadurch wird der Software mitgeteilt, wo mit dem Kopieren oder Auswerten des Kontoverlaufs begonnen werden soll.

Anschließend haben wir end_time definiert, eine weitere Eingabevariable vom Typ datetime. Der Wert ist auf den 31. Januar 2026 um Mitternacht gesetzt. Diese Variable gibt an, bis zu welchem Zeitpunkt die letzten Kontohistorie von der Software berücksichtigt wird. Ein Zeitfenster wird durch die Kombination von start_time und end_time definiert. Das Programm verarbeitet ausschließlich Kontodaten, die in diesen Bereich fallen. Da der Trader den zu verarbeitenden Zeitraum ändern kann, ohne den Code anzupassen, sorgt die Verwendung von Eingabevariablen hierfür für Flexibilität beim EA oder Skript.

Der Kontoname wird in der ersten Zeile in die Datei geschrieben. Es kombiniert den tatsächlichen Namen des Handelskontos mit der Bezeichnung „Account Name:“. Dadurch wird sichergestellt, dass das Konto, zu dem die Datei gehört, in der ersten Zeile des Journals eindeutig identifiziert wird. Wenn Sie das Journal mit anderen teilen oder mehrere Konten verwalten müssen, ist es äußerst hilfreich, den Kontonamen anzugeben. In der zweiten Zeile wird der Kontostand in die Datei geschrieben. Da es sich bei dem Saldo um eine Zahl mit Dezimalstellen handelt, muss er vor dem Schreiben in die Datei in ein Textformat umgewandelt werden. Auf diese Weise stellt das Programm sicher, dass der Wert korrekt in der Datei gespeichert wird und später angezeigt oder gelesen werden kann. Diese Zeile erleichtert es, die Entwicklung des Kontostands im Laufe der Zeit nachzuverfolgen, da sie den Geldbetrag auf dem Konto zum Zeitpunkt der Erstellung des Journals anzeigt.

Die ID des Kontologins für das Konto steht in der dritten Zeile. Diese numerische Kennung identifiziert das Konto eindeutig. Durch die Umwandlung in Text kann sie in lesbarer Form in die Datei geschrieben werden. Durch die Angabe der Login-ID im Journal wird sichergestellt, dass die Daten korrekt dem entsprechenden Konto zugeordnet werden, und die Unterscheidung zwischen den Konten wird erleichtert. Die Start- und Endzeiten der Daten, die in das Journal übertragen werden, sind in der vierten und fünften Zeile angegeben. Das Programm sollte zum Startzeitpunkt mit der Aufzeichnung vergangener Handelsgeschäfte beginnen, und der Datenerfassungszeitraum sollte zum Endzeitpunkt enden. Wenn diese Zeitangaben in die Datei aufgenommen werden, wird deutlich, welchen Zeitraum das Journal abdeckt, und es wird sichergestellt, dass der Leser über den Umfang der Daten informiert ist.

Der Zeitpunkt der letzten Aktualisierung des Journals ist in der letzten Zeile vermerkt. Um Ihnen den genauen Zeitpunkt der letzten Aktualisierung der Datei mitzuteilen, wird hier die aktuelle Serverzeit abgerufen und in die Datei eingetragen. Wenn das Skript wiederholt ausgeführt wird, ist es unerlässlich, diese Daten einzubeziehen, da Sie so die jüngsten Änderungen oder Ergänzungen im Handelsjournal überwachen können. Die Zeilen in diesem Abschnitt bilden zusammen die Kopfzeile des Handelsjournals und enthalten wichtige Kontodaten sowie Hintergrundinformationen zu den nachfolgenden historischen Daten. Das Handelsjournal ist gut strukturiert, gut lesbar und dank dieser methodischen Vorgehensweise so angelegt, dass weitere Daten am Ende angefügt werden können.


Schlussfolgerung

In diesem Artikel haben Sie gelernt, wie Sie die Funktionen „FileSelectDialog“ und „FileOpen“ in MQL5 zum Erstellen und Verwalten von Dateien verwenden. Sie haben gelernt, wie Sie eine Datei auswählen oder eine neue erstellen, diese mit den richtigen Berechtigungen sicher öffnen und wichtige Kontodaten darin eingeben, wie beispielsweise den Kontonamen, den Kontostand, die Kontologin, den Erfassungszeitraum und den Zeitpunkt der letzten Aktualisierung. Dieser Artikel bietet eine Einführung in die Dateiverwaltung in MQL5 und legt den Grundstein für die Erstellung eines funktionsfähigen, gut strukturierten und benutzerfreundlichen Handelsjournals. Im nächsten Artikel werden Sie die Handelshistorie für den angegebenen Zeitraum in das Journal exportieren.

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/21160

Beigefügte Dateien |
Liquidity-Raids optimieren: Den Unterschied zwischen Liquidity-Raids und Marktstrukturverschiebungen verstehen Liquidity-Raids optimieren: Den Unterschied zwischen Liquidity-Raids und Marktstrukturverschiebungen verstehen
In diesem Artikel geht es um einen spezialisierten, trendfolgenden EA, der deutlich machen soll, wie man Handels-Setups nach Liquidity-Raids nutzen kann. In diesem Artikel wird ein EA ausführlich vorgestellt, der speziell für Trader entwickelt wurde, die daran interessiert sind, Liquiditätsabschöpfungen als Einstiegskriterien für ihre Trades und Handelsentscheidungen zu optimieren und zu nutzen. Außerdem wird untersucht, wie man korrekt zwischen Liquidity-Raids und Marktstrukturwechseln unterscheidet und wie man diese jeweils validiert und nutzt, wenn sie auftreten, um so Verluste zu minimieren, die dadurch entstehen, dass Trader beides miteinander verwechseln.
Entwicklung eines Toolkits zur Price-Action-Analyse (Teil 61): Durchbrüche struktureller schräg verlaufender Trendlinien mit 3-Swing-Bestätigung Entwicklung eines Toolkits zur Price-Action-Analyse (Teil 61): Durchbrüche struktureller schräg verlaufender Trendlinien mit 3-Swing-Bestätigung
Wir stellen ein Tool zur Erkennung von Ausbrüchen aus schrägen Trendlinien vor, das auf einer Validierung anhand von drei Swings basiert, um objektive Signale aus der Price‑Action zu generieren. Das System automatisiert die Erkennung von Swings, die Erstellung von Trendlinien und die Bestätigung von Ausbrüchen anhand einer Kreuzungslogik, um Störsignale zu reduzieren und die Ausführung zu standardisieren. Der Artikel erläutert die Strategievorgaben, zeigt die MQL5-Implementierung und gibt einen Überblick über die Testergebnisse; das Tool ist für die Analyse und die Bestätigung von Signalen gedacht, nicht für den automatisierten Handel.
Einführung in MQL5 (Teil 40): Einsteigerleitfaden zur Dateiverarbeitung in MQL5 (II) Einführung in MQL5 (Teil 40): Einsteigerleitfaden zur Dateiverarbeitung in MQL5 (II)
Erstellen Sie in MQL5 ein CSV-Trading-Journal, indem Sie den Kontoverlauf für einen festgelegten Zeitraum auslesen und strukturierte Datensätze in eine Datei schreiben. Der Artikel erläutert die Zählung von Transaktionen, das Abrufen von Tickets, das Zuordnen von Symbolen und Ordertypen sowie die Erfassung von Daten zur Eröffnung (Losgröße, Zeitpunkt, Kurs, SL/TP) und zur Schließung (Zeitpunkt, Kurs, Gewinn, Ergebnis) mithilfe dynamischer Arrays. Das Ergebnis ist ein übersichtliches, dauerhaft verfügbares Trading-Journal, das sich für Analysen und Berichte eignet.
Larry Williams’ Marktgeheimnisse (Teil 11): Erkennen von „Smash-Day“-Umkehrungen mit einem Indikator Larry Williams’ Marktgeheimnisse (Teil 11): Erkennen von „Smash-Day“-Umkehrungen mit einem Indikator
Wir setzen die „Smash-Day“-Umkehrregeln von Larry Williams in einen praktischen MQL5-Indikator um, der bestätigte Setups mit Pfeilen markiert. Schritt für Schritt werden in diesem Text die Pufferverknüpfung, Diagrammeigenschaften, die Auswertung historischer Daten sowie Echtzeit-Aktualisierungen innerhalb von OnCalculate erläutert. Dank anpassbarer Lookback-Parameter und einer übersichtlichen Chart-Darstellung können Sie gültige Trendumkehrungen schnell erkennen, während die endgültigen Handelsentscheidungen weiterhin nach eigenem Ermessen und kontextbezogen getroffen werden.