English
preview
Die MQL5-Standardbibliothek im Überblick (Teil 8): Ein hybrides Handelsjournal mit CFileTxt

Die MQL5-Standardbibliothek im Überblick (Teil 8): Ein hybrides Handelsjournal mit CFileTxt

MetaTrader 5Beispiele |
12 1
Clemence Benjamin
Clemence Benjamin

Inhalt:

  1. Einführung
  2. Konzept und Vorteile
  3. Standardbibliothek im Fokus
  4. Umsetzung
  5. Tests und Ergebnisse
  6. Schlussfolgerung
  7. Anlagen



Einführung

Willkommen zu Teil 8 unserer Reihe, in der wir uns anhand praktischer, praxisnaher Projekte mit der MQL5-Standardbibliothek befassen. Aufbauend auf dem interaktiven visuellen Positionsverwaltungssystem, das wir im vorherigen Teil entwickelt haben – komplett mithilfe von CCanvas gezeichneten Sprechblasen auf dem Chart und anklickbaren Schließen-Schaltflächen –, fügen wir nun eine Persistenzschicht auf professionellem Niveau hinzu: ein benutzerdefiniertes CSV-Handelsjournal.

MetaTrader 5 bietet eine hervorragende integrierte Handelshistorie, die die Details der Ausführungen und die Ergebnisse präzise erfasst. Bei Hybridsystemen, die automatisierte Strategielogik mit diskretionären manuellen Eingriffen kombinieren, die über den EA selbst abgewickelt werden, benötigen wir oft eine zusätzliche Kontextebene, die auf unsere spezifischen analytischen Anforderungen zugeschnitten ist. Dieses benutzerdefinierte Protokoll erfasst ausdrücklich die Entscheidungsquelle für jedes aufgezeichnete Ereignis – unabhängig davon, ob die Aktion vom Algorithmus („ALGO“) oder durch einen manuellen Klick auf unserer interaktiven Oberfläche („HUMAN“) ausgelöst wurde.

Indem wir diese Absicht zusammen mit den üblichen Details (Zeitpunkt, Ticket, Symbol, Aktion und erzielter Gewinn) erfassen, erstellen wir einen portablen, strukturierten Datensatz, der eine präzise Leistungszuordnung ermöglicht. Das Projekt dient als eingehende Untersuchung der Komponente „Files/FileTxt.mqh“ und veranschaulicht zuverlässige Dateioperationen, Verfahren zur Gewährleistung der Datenintegrität sowie saubere Integrationsmuster, die die integrierten Funktionen der Plattform ergänzen.

Der umfassende Expert Advisor vereint die Logik des gleitenden Durchschnitts-Crossovers, dynamische Canvas-Visualisierungen, Hitbox-basierte Interaktion und absichtsorientiertes Journaling – das Ergebnis ist ein ausgereiftes Hybrid-Tool, das nicht nur Trades ausführt, sondern auch seinen Entscheidungsprozess dokumentiert, um eine evidenzbasierte Optimierung zu ermöglichen.



Konzept und Vorteile

Die in MetaTrader 5 integrierten Berichte auf der Registerkarte „Kontoverlauf“ und im Strategietester sind zuverlässig und reichen für Buchhaltungs- und aufsichtsrechtliche Zwecke sowie für allgemeine Leistungsübersichten aus. Sie unterscheiden korrekt zwischen Ausführungskanälen und liefern eine lückenlose chronologische Aufzeichnung der Trades und Positionen.

Bei der aktiven Entwicklung und Live-Überwachung von Hybridsystemen benötigen wir jedoch häufig zusätzliche Aufzeichnungen, die sich auf die Fragen konzentrieren, die für die iterative Verbesserung am relevantesten sind. Die zentrale Metainformation, die uns hier interessiert, ist die Entscheidungsquelle: algorithmische Signale im Vergleich zu diskretionären manuellen Eingriffen, die über den Event-Handler und die Handelsklassen des EAs ausgeführt werden. Diese explizite Kennzeichnung ermöglicht es uns, den tatsächlichen Beitrag jeder Komponente eindeutig zu isolieren und zu vergleichen.

Ein individuell angepasstes CSV-Journal bietet mehrere konkrete Vorteile,

  1. Eindeutige Zuordnung der Absicht – manuelle Schließungen durch Klicks auf das Chart werden als „HUMAN“ protokolliert, während strategiegesteuerte Einstiege als „ALGO“ gekennzeichnet werden. Diese Trennung lässt sich allein mit der integrierten Historie in interaktiven Hybrid-Designs nicht zuverlässig erreichen.
  2. Universelle Kompatibilität – CSV-Dateien lassen sich sofort in Excel, Google Sheets, LibreOffice oder jedem beliebigen Texteditor öffnen. Es sind weder Exportvorgänge noch plattformspezifische Formate erforderlich.
  3. Integrierte Struktur für die Analyse – vordefinierte Spalten ermöglichen sofortige Filterung, Pivot-Tabellen und Berechnungen, ohne dass eine Bereinigung oder Transformation erforderlich ist.
  4. Erweiterbarkeit – Das Hinzufügen neuer Spalten (z. B. Indikatorwerte bei Einstieg, aktueller Drawdown, Volatilitätswert oder benutzerdefinierte Notizen) erfordert nur geringfügige Änderungen am Protokollierungsaufruf.
  5. Zuverlässige Diagnose – Das Protokoll dient als präzise Zeitleiste der Systementscheidungen und erleichtert die Rekonstruktion von Ereignissen während der Fehlersuche oder der nachträglichen Analyse erheblich, da man sich nicht ausschließlich auf die Ausgabe der Registerkarte „Experten“ verlassen muss.
  6. Ausfallsichere Persistenz – Durch den strategischen Einsatz von Flush() wird sichergestellt, dass jeder Eintrag physisch auf den Datenträger geschrieben wird, wodurch die Datenintegrität im Falle eines Systemabsturzes oder eines Stromausfalls gewährleistet bleibt.
  7. Schnittstelle zu externen Tools – Die CSV-Datei dient als direkte Eingabe für Python (Pandas, Matplotlib), R oder Datenbankimporte und ermöglicht so fortgeschrittene statistische Analysen, die Aufschlüsselung der Wertentwicklungskurve oder maschinelles Lernen anhand von Entscheidungsmustern.

All diese Vorteile tragen gemeinsam zu einem professionellen Arbeitsablauf in der Systementwicklung bei, bei dem Entscheidungen auf klaren, quellenbezogenen Belegen beruhen und nicht auf gemischten Aggregaten.



Standardbibliothek im Fokus

Die Klasse CFileTxt im Überblick

Die Klasse „CFileTxt“ ist ein schlankes und dennoch leistungsstarkes Werkzeug für die Bearbeitung von Textdateien innerhalb der Standardbibliothek. Sie bietet eine komfortable Abstraktionsschicht für Datei-Handles und zugleich praktische CSV-spezifische Funktionen.

Die wichtigsten Methoden und Muster, die wir anwenden:

  • Open() – Kombiniert mehrere Flags, um Schreibzugriff, CSV-Modus, ANSI-Codierung, das Verzeichnis Common sowie Lesezugriff für Größenprüfungen festzulegen.
  • Size() – Stellt schnell fest, ob die Datei neu ist (null Byte), sodass wir den Header nur einmal schreiben.
  • WriteString() – Fügt Text effizient an; beachtet die CSV-Quoting-Regeln, wenn das Flag gesetzt ist.
  • Flush() – der Grundpfeiler der Zuverlässigkeit – erzwingt das sofortige Schreiben auf den Datenträger
  • Seek() – Setzt den Zeiger an das Ende, um ein sauberes Anhängen zu ermöglichen.
  • Close() – Gibt Ressourcen frei (wird automatisch im Destruktor aufgerufen).

Diese Methoden ermöglichen die Verarbeitung von Dateien in Produktionsqualität mit minimalem Programmieraufwand. Diese Klasse eignet sich gleichermaßen zum Speichern von EA-Konfigurationsdateien, zum Exportieren benutzerdefinierter Berichte, zum dauerhaften Speichern von Optimierungsparametern oder zur Implementierung einer einfachen dateibasierten Kommunikation zwischen Skripten.



Umsetzung

In diesem Abschnitt bauen wir das interaktive Handelssystem weiter aus, das wir in Teil 7 erstellt haben. Unser Ziel ist es, den Funktionsumfang durch die Integration eines neuen Moduls zu erweitern: eines dauerhaften Handelsjournals. Es handelt sich hierbei nicht um ein eigenständiges Skript, sondern um eine logische Weiterentwicklung unserer bisherigen Arbeit. Wir werden uns nun mit dem praktischen Entwicklungsprozess befassen und zeigen, wie sich die Funktion zur Dateiprotokollierung aus der Bibliothek „Files/FileTxt.mqh“ in den Code unseres laufenden Expert Advisors integrieren lässt. Im Mittelpunkt steht die aktive Integration – wie wir unsere bestehende visuelle und strategische Logik mit einer neuen Datenebene verknüpfen, um eine vollständige, selbstdokumentierende Anwendung zu schaffen.

Schritt 1: Erweiterung unseres Toolkits um eine neue Bibliothek

Der erste Schritt zum Hinzufügen neuer Funktionen besteht darin, das erforderliche Modul der Standardbibliothek einzubinden. Da wir einem Projekt, das bereits die Canvas- und Trade-Bibliotheken nutzt, Dateifunktionen hinzufügen, erweitern wir einfach die Include-Liste am Anfang unseres bestehenden Codes.

Code:

//--- 1. INCLUDES (Extending the list from Part 7)
#include <Canvas\Canvas.mqh>       // For drawing custom graphics (from Part 7)
#include <Trade\PositionInfo.mqh>  // For reading trade details (from Part 7)
#include <Trade\Trade.mqh>         // For executing trades (from Part 7)
#include <Indicators\Trend.mqh>    // For Moving Averages (from Part 7)
#include <Files\FileTxt.mqh>       // NEW: This adds the CFileTxt class for file operations.

Mit dieser einzigen Zeile statten wir unser Programm mit allen Methoden aus, die zum Erstellen, Beschreiben und Verwalten von Textdateien erforderlich sind. Die Klasse „CFileTxt“ wird zu einem neuen Werkzeug in unserem Werkzeugkasten, das sich nahtlos in unsere Werkzeuge „CCanvas“ und „CTrade“ einfügt.

Schritt 2: Entwurf der Klasse „CTradeJournal“ als neue Komponente

Als Nächstes entwerfen wir eine neue Klasse, um alle Aspekte der Protokollierung zu verwalten. Wir konzipieren dies als eigenständige Komponente, die sich problemlos in unser Hauptprogramm integrieren lässt. Damit soll die Komplexität von Dateioperationen hinter einer einfachen Schnittstelle verborgen werden.

Code:

//--- 3. THE JOURNAL CLASS (A new component we are adding)
class CTradeJournal
  {
private:
   CFileTxt          m_file;       // This is our handle to the physical file on disk.
   string            m_filename;
   string            m_sep;        // Field separator for CSV format.

public:
   // Constructor: Initializes the object's default state.
   CTradeJournal() : m_sep(",") {}

   // The initialization function we will call from OnInit().
   bool Init(string filename)
     {
      m_filename = filename;
      // We define flags to control how the file is opened.
      int flags = FILE_WRITE|FILE_CSV|FILE_SHARE_READ;
      ResetLastError();

      // Here, we attempt to open the file. If it fails, we report the error.
      if(m_file.Open(filename, flags) == INVALID_HANDLE)
        {
         Print("Journal Init Failed. Error: ", GetLastError());
         return false;
        }

      // If the file is new, we write the column headers to define our data structure.
      if(m_file.Size() == 0)
        {
         string header = "Time,Ticket,Symbol,Action,Source,Profit\n";
         m_file.WriteString(header);
         m_file.Flush(); // Immediately save the headers to disk.
        }

      // Move to the end of the file so all new logs are appended.
      m_file.Seek(0, SEEK_END);
      return true;
     }

In dieser Init-Methode setzen wir mehrere bewährte Vorgehensweisen um. Durch die Verwendung von FILE_SHARE_READ können andere Programme die Protokolldatei einsehen, während wir in sie schreiben. Der Aufruf von GetLastError() liefert uns konkrete Diagnoseinformationen, falls die Datei nicht geöffnet werden kann, was für die Fehlersuche von entscheidender Bedeutung ist. Die Methode Flush() garantiert uns, dass der Header tatsächlich auf den Speicher geschrieben und nicht nur im Arbeitsspeicher gehalten wird.

Schritt 3: Die Kernmethode für die Protokollierung schreiben

Nun erstellen wir das Herzstück der Klasse: die Methode, die von jeder Stelle unseres Handelssystems aus aufgerufen wird, um ein Ereignis zu protokollieren. Das Design ist auf Benutzerfreundlichkeit für den Anrufer und Zuverlässigkeit bei der Ausführung ausgerichtet.

Code:

   // This is the public method our main code will call to save an entry.
   void Log(ulong ticket, string action, string source, double profit)
     {
      // We construct a single, formatted CSV line from the input parameters.
      string line = StringFormat("%s,%d,%s,%s,%s,%.2f\n",
                                 TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS),
                                 ticket,
                                 _Symbol,
                                 action,
                                 source, // The key differentiator: "ALGO" or "HUMAN"
                                 profit);
      // We write the line and then force it to disk.
      m_file.WriteString(line);
      m_file.Flush(); // This ensures the data survives a terminal crash.

      // We also print to the Experts tab for immediate developer feedback.
      Print("Journal: ", action, " | Ticket: ", ticket, " | Source: ", source);
     } 

In der Log-Methode wird unsere Entwurfsabsicht in Code umgesetzt. Der Parameter „source“ ist die entscheidende Information, die wir unserem System hinzufügen; damit erfüllen wir die Anforderung, zwischen automatisierten und manuellen Aktionen zu unterscheiden. Die Verwendung von Flush() nach jedem Schreibvorgang ist ein bewusster Kompromiss, bei dem ein winziger Leistungsverlust zugunsten absoluter Datenintegrität in Kauf genommen wird – eine unverzichtbare Eigenschaft für ein Handelsjournal.

Schritt 4: Einbindung der neuen Komponente in das bestehende System

Nachdem wir die Journal-Klasse erstellt haben, integrieren wir sie nun in unseren bestehenden Expert Advisor. Dazu muss eine globale Instanz hinzugefügt und zusammen mit unseren anderen Objekten initialisiert werden.

Code:

//--- 4. GLOBAL OBJECTS (Adding to the existing list from Part 7)
CCanvas           ExtCanvas;       // Existing object for visuals
CPositionInfo     ExtPosition;     // Existing object for position data
CTrade            ExtTrade;        // Existing object for trade execution
CTradeJournal     ExtJournal;      // NEW: Our journaling object

// Inside our existing OnInit() function:
int OnInit()
  {
   // ... (Existing code to create indicators and canvas remains unchanged) ...

   // NEW INITIALIZATION: We start the journaling system.
   if(!ExtJournal.Init("HybridJournal.csv"))
     {
      return INIT_FAILED; // If logging fails, we fail the whole EA load.
     }
   return INIT_SUCCEEDED;
  }

Dies ist eine saubere, modulare Integration. Das Journal wird zu einem gleichrangigen Teil unserer anderen Subsysteme. Indem wir die Initialisierung als kritisch behandeln (d. h. OnInit() bricht ab, wenn der Start fehlschlägt), stellen wir sicher, dass das System entweder vollständig funktioniert oder gar nicht, und vermeiden so ein Szenario, in dem Trades stattfinden, ohne protokolliert zu werden.

Schritt 5: Verknüpfung der Protokollierung mit Handelsereignissen

Der letzte und wichtigste Schritt besteht darin, unsere bestehende Handelslogik gezielt um Protokollierung zu erweitern. Wir fügen Protokollierungsaufrufe genau an den Stellen ein, an denen aussagekräftige Aktionen stattfinden.

Zunächst passen wir unsere bestehende algorithmische Einstiegslogik aus Teil 7 an.

Code:

// This is inside our existing CheckStrategy() function.
// After a successful trade execution, we now add a logging call.
if(ExtTrade.Buy(0.10, _Symbol, ask, sl, tp, "MA_Cross_Buy"))
  {
   // NEW LINE: We log this as an algorithmic entry.
   ExtJournal.Log(ExtTrade.ResultOrder(), "ENTRY_BUY", "ALGO", 0.0);

Zweitens erweitern wir den bestehenden OnChartEvent-Handler aus Teil 7, um manuelle Schließungen zu protokollieren:

// Inside our existing OnChartEvent() function, where we handle bubble clicks.
if(ExtPosition.SelectByTicket(ExtHitboxes[i].ticket))
  {
   double final_profit = ExtPosition.Profit(); // Get profit before closing
   ExtTrade.PositionClose(ExtHitboxes[i].ticket); // Existing close command

   // NEW LINE: We log this as a human-triggered closure with the final profit.
   ExtJournal.Log(ExtHitboxes[i].ticket, "CLOSE_MANUAL", "HUMAN", final_profit);
  }

Diese Einfügungen sind der Höhepunkt unserer Arbeit. Es handelt sich um minimale, gezielte Änderungen, die einen maximalen Mehrwert schaffen. Indem wir in jedem Kontext die entsprechende Quellzeichenfolge übergeben, stellen wir sicher, dass jeder Eintrag in der Protokolldatei mit seiner Herkunft gekennzeichnet wird. Die Klasse „CTradeJournal“ und damit auch die Bibliothek „CFileTxt“ dienen nun als einheitliches Protokollierungssystem für die beiden unterschiedlichen Betriebsmodi unseres hybriden Handelssystems.

Was wir getan haben, ist ein klassisches Beispiel für iterative Softwareentwicklung. Wir haben mit einer visuellen Handelsoberfläche begonnen (Teil 7) und diese nun um eine Datenspeicherschicht erweitert (Teil 8). Das Protokollierungsmodul existiert nicht isoliert; es handelt sich um ein abhängiges Teilsystem, das seine Eingaben aus dem erfolgreichen Betrieb der Module „Canvas“, „Handelsausführung“ und „Positionsinformationen“ bezieht. Indem wir diesen Prozess befolgt haben – Einbinden einer Bibliothek, Entwerfen einer Klasse, globales Instanziieren dieser Klasse und Aufrufen ihrer Methoden an strategischen Punkten –, haben wir unserem Handelssystem erfolgreich ein dauerhaftes Gedächtnis verliehen und damit das Kernziel erreicht, algorithmische von manuellen Aktionen in einem dauerhaften, analysierbaren Format zu unterscheiden.



Tests und Ergebnisse

Nachdem der Code kompiliert und der Expert Advisor einsatzbereit ist, erfolgt das Testen in mehreren sich ergänzenden Phasen. Gemeinsam validieren sie beide Seiten des Systems: die algorithmische Handels- und Protokollierungslogik sowie die interaktiven, manuell ausgelösten Komponenten. Diese Unterscheidung ist beabsichtigt und spiegelt wider, wie das System selbst zwischen automatisierten und manuellen Aktionen unterscheidet.

Phase 1: Schnelle Validierung über den Strategy Tester (algorithmischer Pfad)

Der schnellste Weg, den Kernmechanismus der Protokollierung zu überprüfen, ist der MetaTrader 5-Strategietester. In diesem Umfeld verarbeitet der Expert Advisor historische Kursdaten, und die Strategie auf Basis des Kreuzungspunkts der gleitenden Durchschnitte führt automatisch Trades aus. Sie können den visuellen Modus aktivieren, wenn Sie die Kursentwicklung beobachten möchten, dies ist jedoch für die Überprüfung des Protokollierungsverhaltens nicht erforderlich.

Es ist wichtig, die Grenzen dieser Phase zu verstehen. Das manuelle Schließen von Positionen über Chart-Bubbles kann im Standard-Backtesting nicht getestet werden, da die visuelle Benutzeroberfläche und der OnChartEvent()-Handler nicht aktiv sind. In dieser Phase liegt der Schwerpunkt daher ausschließlich auf der Validierung der algorithmischen Ausführung und der Protokollierung.

Um den Test durchzuführen, lassen Sie den EA im Strategietester über einen Zeitraum laufen, der mehrere Signale für das Kreuzen von gleitenden Durchschnitten enthält. Beobachten Sie während der Testausführung die Registerkarte „Experten“ im Fenster „Strategietester“. Für jeden von der Strategie ausgeführten Handel sollten Meldungen wie die folgenden angezeigt werden:

„Journal Entry Saved: ENTRY_BUY by ALGO.“

Diese Meldungen bestätigen, dass die algorithmischen Handelsereignisse erfasst und korrekt an das Journal weitergeleitet werden.

Suchen Sie nach Abschluss des Tests die erstellte CSV-Datei im Standardverzeichnis des Terminals:

<Terminal Data Path>\MQL5\Files\HybridJournal.csv

Das Öffnen dieser Datei bestätigt, dass alle algorithmischen Trades protokolliert und durchgängig mit der Quelle „ALGO“ gekennzeichnet wurden. Mit diesem Ansatz können Sie die Protokollierungslogik anhand zahlreicher Trades in einer kontrollierten und reproduzierbaren Umgebung einem Stresstest unterziehen, ohne auf reale Marktbedingungen warten zu müssen. Außerdem trennt es die algorithmische Validierung sauber von jeglicher manueller Interaktionslogik.

Ergebnisse des Strategie-Tester-Durchlaufs

Abb. 1. Kurzer Test im Strategietester

Phase 2: Live- oder visuelle Tests (integriertes System)

Sobald der algorithmische Pfad validiert wurde, fahren wir mit dem Testen des vollständig integrierten Systems in einem Live-Chart oder einer visuellen Testumgebung fort.

Beginnen Sie damit, die Datei Part8_HybridJournal.mq5 im MetaEditor zu kompilieren und den Expert Advisor auf einem Chart zu starten, beispielsweise dem Chart von EURUSD, in einem geeigneten Zeitrahmen wie M5 oder H1. Stellen Sie sicher, dass das Chart in einer normalen Live-Umgebung oder im visuellen Testmodus läuft und nicht im Backtesting-Modus, der ausschließlich der Optimierung dient.

Überprüfen Sie direkt nach dem Hinzufügen zum Chart die Registerkarte „Experten“. Es sollten Bestätigungsmeldungen angezeigt werden, die darauf hinweisen, dass die Zeichenfläche erstellt und die Protokolldatei initialisiert bzw. geöffnet wurde. Sollten Fehler bei den Dateiberechtigungen auftreten, überprüfen Sie, ob das Terminal Schreibzugriff auf das Verzeichnis „MQL5\Files“ hat. Eine erfolgreiche Initialisierung bestätigt, dass das CTradeJournal-Objekt seine Init()-Routine erfolgreich ausgeführt und die CSV-Datei für das Schreiben vorbereitet hat.

Lassen Sie die Strategie anschließend so lange laufen, bis es zu einem Crossover der gleitenden Durchschnitte kommt. Wenn der schnelle gleitende Durchschnitt den langsamen nach oben kreuzt, führt der EA automatisch einen Kaufauftrag aus. Die erfolgreiche Ausführung wird durch drei aufeinander abgestimmte Signale bestätigt: Auf der Registerkarte „Handel“ erscheint eine neue Position, am Einstiegspunkt wird im Chart eine Sprechblase eingeblendet, die die Ticket- und Gewinninformationen anzeigt, und auf der Registerkarte „Experten“ wird eine Meldung angezeigt, die eine „ENTRY_BUY-Aktion durch ALGO“ bestätigt.

Dies bestätigt, dass der algorithmische Ausführungsablauf und das Protokollierungssystem unter Live-Bedingungen vollständig integriert sind.

Um den manuellen Interaktionspfad zu bestätigen, suchen Sie die rote „X“-Schaltfläche in der Handelsblase und klicken Sie einmal darauf. Die Position sollte sofort geschlossen werden, die Blase sollte aus dem Chart verschwinden, und auf der Registerkarte „Experten“ sollte eine Meldung angezeigt werden, die eine „CLOSE_MANUAL“-Aktion durch „HUMAN“ bestätigt.

Diese Abfolge bestätigt, dass das Ereignis durch eine Benutzerinteraktion ausgelöst wurde, den OnChartEvent()-Handler durchlief, die Positions- und Handelsschnittstellen durchlief und korrekt im Journal mit dem Quell-Tag „HUMAN“ protokolliert wurde. Der endgültige Gewinn oder Verlust wird vor Abschluss erfasst, wodurch eine korrekte historische Erfassung gewährleistet wird.

Phase 3: Das Journal prüfen und Erkenntnisse gewinnen

Der endgültige Nachweis für den korrekten Betrieb findet sich in der CSV-Datei unter folgendem Pfad:

<Terminal Data Path>\MQL5\Files\HybridJournal.csv

Navigieren in den Terminal-Ordnern

Abb. 2. Navigieren in den Terminal-Ordnern

Wenn man diese Datei in einer Tabellenkalkulation öffnet, wird ein strukturierter Datensatz angezeigt, der Zeit, Ticket, Symbol, Aktion, Quelle und Gewinn enthält. Sie sollten algorithmische Einträge mit dem Tag „ALGO“ und manuelle Schließungen mit dem Tag „HUMAN“ sehen. Jede Zeile wird sofort auf den Datenträger geschrieben, wodurch die Persistenz auch bei unerwarteten Systemabschaltungen gewährleistet ist.

Ab diesem Punkt ist das Journal mehr als nur ein Validierungswerkzeug. Mithilfe einfacher Filterfunktionen können Sie die Leistung algorithmischer und manueller Strategien getrennt analysieren und Kennzahlen wie die Anzahl der Trades, den Gesamtgewinn oder die durchschnittliche Rendite berechnen. Durch den Import der CSV-Datei in externe Tools lassen sich weitergehende Analysen durchführen, die separate Wertentwicklungskurven, Risikokennzahlen oder eine Verhaltensanalyse manueller Eingriffe ermöglichen.

Insgesamt zeigt dieser Testprozess einen lückenlosen und strukturierten Arbeitsablauf. Der Strategy Tester ermöglicht eine schnelle und wiederholbare Validierung der algorithmischen Protokollierung, während Live- oder visuelle Tests die Interaktion und Integration überprüfen. Das Ergebnis ist ein transparentes, überprüfbares System, das das undurchsichtiges Black-Box-Verhalten durch evidenzbasierte Erkenntnisse ersetzt und damit das Kernziel erfüllt, algorithmische und menschliche Handelsentscheidungen klar voneinander abzugrenzen und zu bewerten.

Inhalt der CSV-Datei

Abb. 3. Der Inhalt der Datei „HybridJournal.csv“ beim Live-Test.

Abb. 3 oben zeigt einen Ausschnitt aus der CSV-Datei, die nach dem Live-Test erstellt wurde. Wie zu sehen ist, wurden die meisten Positionen zu Testzwecken manuell geschlossen, da es unter realen Marktbedingungen länger dauerte, bis die automatisierten Ausstiegsbedingungen eintraten.



Schlussfolgerung

In dieser Erörterung der Serie ist es uns gelungen, die entscheidende Lücke zwischen Ausführung und Analyse zu schließen. Indem wir unsere bisherigen Arbeiten um ein forensisches Protokollierungssystem erweitert haben, haben wir ein einfaches Trading-Werkzeug in ein System mit klarer Rechenschaftspflicht und Nachvollziehbarkeit verwandelt, in dem jede Entscheidung eindeutig ihrer Quelle zugeordnet werden kann. Diese Unterscheidung ist von entscheidender Bedeutung; sie hilft uns dabei, wichtige Daten für eine gezielte Analyse der Systemleistung zu erfassen.

Aus technischer Sicht zeigt dieses Projekt, wie die Header-Komponente der Bibliothek CFileTxt mit minimalem Aufwand eine Persistenz auf professionellem Niveau ermöglicht. Durch die Nutzung der Standardbibliothek vermeiden wir die Komplexität und Anfälligkeit bei der Verwaltung von Dateihandles auf niedriger Ebene und konzentrieren uns stattdessen auf die Anwendungslogik. Der daraus resultierende hybride Expert Advisor ist robust, interaktiv und selbstdokumentierend und liefert strukturierte Daten, die eine fundierte Analyse und langfristige Weiterentwicklung ermöglichen. Dies belegt zudem einen wichtigen Punkt: Funktionen wie eine zentralisierte Protokollierung und eine Excel-kompatible CSV-Ausgabe sind nicht institutionellen Plattformen vorbehalten, sondern für private Entwickler, die die Bibliothek korrekt einsetzen, problemlos realisierbar.

Der Wert dieser Arbeit reicht weit über diesen einen Expert Advisor hinaus. Die hier vorgestellten Entwurfsmuster sind bewusst so konzipiert, dass sie wiederverwendbar sind. Die Klasse „CTradeJournal“ ist ein eigenständiges Modul, das in zukünftige Projekte integriert werden kann, um sofort forensische Transparenz zu schaffen. Von hier aus können Sie das Journal um weitere Felder erweitern, mit alternativen Ausgabeformaten experimentieren oder tiefgreifendere Integrationen wie die datenbankgestützte Speicherung mithilfe anderer Komponenten der Standardbibliothek erkunden. Jeder Schritt baut auf denselben Grundsätzen der Klarheit und Verantwortlichkeit auf, die in diesem Teil dargelegt wurden. 



Anlagen

Name der QuelldateiTypVersionBeschreibung:
Part8_HybridJournalExpert Advisor1.00Umfassender Hybrid-Expert-Advisor, der die Interaktion mit der Zeichenfläche und eine absichtsorientierte CSV-Protokollierung integriert.

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

Beigefügte Dateien |
Letzte Kommentare | Zur Diskussion im Händlerforum (1)
Kenton Gichuki
Kenton Gichuki | 19 Feb. 2026 in 11:31
Ich werde es mal ausprobieren. Danke.
Die Übertragung der Trading-Signale in einem universalen Expert Advisor. Die Übertragung der Trading-Signale in einem universalen Expert Advisor.
In diesem Artikel wurden die verschiedenen Möglichkeiten beschrieben, um die Trading-Signale von einem Signalmodul des universalen EAs zum Steuermodul der Positionen und Orders zu übertragen. Es wurden die seriellen und parallelen Interfaces betrachtet.
Python-MetaTrader 5-Strategietester (Teil 05): Strategietests mit mehreren Symbolen und Zeitrahmen Python-MetaTrader 5-Strategietester (Teil 05): Strategietests mit mehreren Symbolen und Zeitrahmen
Dieser Artikel stellt einen MetaTrader 5-kompatiblen Backtesting-Workflow vor, der sich auf verschiedene Symbole und Zeitrahmen hinweg skaliert. Wir nutzen den HistoryManager, um die Datenerfassung zu parallelisieren, Kursbalken und Ticks aus allen Zeitrahmen zu synchronisieren und symbolisolierte OnTick-Handler in Threads auszuführen. Sie erfahren, wie sich Modellierungsmodi auf Geschwindigkeit und Genauigkeit auswirken, wann Sie sich auf Terminaldaten verlassen können, wie Sie den I/O-Aufwand durch ereignisgesteuerte Aktualisierungen reduzieren und wie Sie einen vollständigen Multiwährungs-Trading-Roboter erstellen.
Eine alternative Log-datei mit der Verwendung der HTML und CSS Eine alternative Log-datei mit der Verwendung der HTML und CSS
In diesem Artikel werden wir eine sehr einfache, aber leistungsfähige Bibliothek zur Erstellung der HTML-Dateien schreiben, dabei lernen wir auch, wie man eine ihre Darstellung einstellen kann (nach seinem Geschmack) und sehen wir, wie man es leicht in seinem Expert Advisor oder Skript hinzufügen oder verwenden kann.
MQL5 Trading Tools (Teil 16): Verbessertes Supersampling-Anti-Aliasing (SSAA) und hochauflösendes Rendering MQL5 Trading Tools (Teil 16): Verbessertes Supersampling-Anti-Aliasing (SSAA) und hochauflösendes Rendering
Wir fügen dem MQL5-Canvas-Dashboard ein auf Supersampling basierendes Anti-Aliasing sowie hochauflösendes Rendering hinzu und skalieren anschließend auf die Zielgröße herunter. Der Artikel implementiert Füllungen und Rahmen in Form abgerundeter Rechtecke, Pfeile in Form abgerundeter Dreiecke sowie eine benutzerdefinierte Bildlaufleiste mit Theme-Unterstützung für die Statistik- und Textpanels. Mit diesen Tools können Sie in MetaTrader 5 glattere und besser lesbare UI-Komponenten erstellen.