und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
- Ansichten:
- 158
- Rating:
- Veröffentlicht:
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Jeder Programmierer hat seinen eigenen Logger. Ich habe meinen eigenen für MQL5 geschrieben, inspiriert durch das Python-Logging-Modul.
Diese Klasse ist die einfachste. Keine Hierarchie, Rotatoren oder Formatierer. Sie ist einfach und praktisch für jedes Projekt.
Installation
- Kopieren Sie CDKLogger.mqh in den Ordner MQL\Include\DKStdLib\Logger.
- Importieren Sie die Klasse CDKLogger.
#include <DKStdLib\Logger\CDKLogger.mqh Verwendung
CDKLogger logger; // SCHRITT 1: Logger mit dem Namen "MyLoggerName" und der Stufe INFO initialisieren logger.Init("MyLoggerName", INFO); // Sie können das Standardformat des Loggers "%name%:[%level%] %message%" in Ihr eigenes Format ändern // Beliebige Musterkombinationen verwenden logger.Format = "%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%"; // SCHRITT 2: Wenn Sie die Nachricht nur mit Untertiteln filtern möchten, // Füllen der FilterInList // 2.1. Hinzufügen einer Untergruppe zu FilterIntList logger.FilterInList.Add("Including-Substring-#1"); logger.FilterInList.Add("Including-Substring-#2"); // 2.2. Zeichenkette durch ";" trennen, um alle Teilzeichenfolgen in einer Zeile zu FilterInList hinzuzufügen logger.FilterInFromStringWithSep("Including-Substring-#3;Including-Substring-#4", ";"); // SCHRITT 3: Wenn Sie die OUT-Nachricht nach Teilzeichenfolgen filtern möchten, alle anderen aber nicht, // Füllen der FilterOutList // 3.1. Hinzufügen eines Teilstrings zur FilterOutList logger.FilterOutList.Add("Excluding-Substring-#1"); logger.FilterOutList.Add("Excluding-Substring-#2"); // 3.2. Zeichenkette durch ";" trennen, um alle Teilzeichenfolgen in einer Zeile zur FilterOutList hinzuzufügen logger.FilterOutFromStringWithSep("Excluding-Substring-#3;Excluding-Substring-#4", ";"); // Verwenden Sie Filter In und fügen Sie hier Ihren Filterstring getrennt durch ; ein. // SCHRITT 4: Protokollierung logger.Debug("Debug: Including-Substring-#1", false); // Debuggen ohne Warnung logger.Info("Info: Including-Substring-#1", true); // Info mit Warndialog logger.Warn("Warn: Including-Substring-#1"); logger.Error("Error: Including-Substring-#1: Excluding-Substring-#1"); // Übersprungen aufgrund von FilterOutList logger.Critical("Critical: Including-Substring-#1"); logger.Assert(true, "Log msg if true", INFO, // wenn ok "Log msg if false", ERROR, // wenn nicht true); // Auch Alert anzeigen logger.Assert(true, "Same msg for true & false", INFO, // Protokollierungsstufe, wenn ok ERROR, // Protokollstufe bei Fehlschlag false); // Kein Alert
Die folgenden Meldungen werden als Ergebnis der Ausführung in das Protokoll ausgegeben:
Offene Probleme
Ich verwende die Klasse oft auf diese Weise:
logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f", __FUNCTION__, __LINE__, my_param));
Aber hier haben wir ein Problem. Die Funktion StringFormat parst die Zeichenkette jedes Mal, auch wenn die Protokollierungsebene die Ausgabe der Nachricht nicht erfordert.
Wenn Sie häufig Debug-Meldungen ausgeben müssen, müssen Sie die Ausgabe in eine Bedingung verpacken:
if(DEBUG >= logger.Level) logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f", __FUNCTION__, __LINE__, my_param));
Der beste Weg, dies zu tun, wäre, StringFormat lazily zu verwenden, aber leider unterstützt MQL5 nicht die Übergabe einer dynamischen Anzahl von Funktionsparametern an die Funktionen Debug, Info, Error usw.
Wenn Sie irgendwelche Ideen haben, wie dies getan werden könnte, würde ich sie gerne hören.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/52741
Ascending Sort A Struct Array By A Field Example
Dies ist ein Beispiel für die aufsteigende Sortierung einer Strukturliste nach einem Feld. Sie können herausfinden, und passen Sie die oben genannten Algorithmus je nach Zweck der Verwendung, das ist die grundlegendste Beispiel ist auch eine Richtung, um die Anordnung in einem Array von Struktur zu lösen. Der Algorithmus in diesem Beispiel verwendet wird, Quick Sort und Merge Sort.
Bollinger Bands Crossover Signals
Indikatorbeschreibung - Bollinger Bands Crossover Signals Name: Bollinger Bands Crossover Signals Version: 1.1 Autor: BENALI Link: https://www.mql5.com/en/users/dahmi_benali
TimeServerDaylightSavings
Zeitbezogene Funktionen zur empirischen Erkennung von Serverzeitzone und Sommerzeit (DST) aus der Historie der Angebote
Custom crosshair cursor with synchronization
Synchronisierter benutzerdefinierter Fadenkreuzindikator, der den Preis und die (Server-/lokale) Zeit anzeigt.
