Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Telegram !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Bibliothèque

Simplest Logger class for MetaTrader 5 - bibliothèque pour MetaTrader 5

Vues:
53
Note:
(5)
Publié:
\MQL5\Include\DKStdLib\Logger\
CDKLogger.mqh (26.27 KB) afficher
\MQL5\Scripts\
MQL5 Freelance Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance

Chaque programmeur a son propre logger. J'ai écrit le mien pour MQL5, en m'inspirant du module de logging de Python.

Cette classe est la plus simple. Pas de hiérarchie, de rotateurs ou de formateurs. Elle est simple et pratique pour n'importe quel projet.

Installation de la classe

  1. Copier CDKLogger.mqh dans le dossier MQL\Include\DKStdLib\Logger.
  2. Importer la classe CDKLogger.

#include <DKStdLib\Logger\CDKLogger.mqh

Utilisation

CDKLogger logger;

// ÉTAPE 1 : Init Logger with "MyLoggerName" name and INFO level (Démarrer l'enregistreur avec le nom "MyLoggerName" et le niveau "INFO")
logger.Init("MyLoggerName", INFO);

// Vous pouvez modifier le format de l'enregistreur par défaut "%name% :[%level%] %message%" pour le remplacer par le vôtre.
// Utiliser n'importe quelle combinaison de motifs 
logger.Format = "%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%"; 

// Si vous souhaitez filtrer les messages uniquement à l'aide de substitutions,
// remplir la liste des filtres 
// 2.1. Ajouter une sous-catégorie à FilterIntList
logger.FilterInList.Add("Including-Substring-#1");        
logger.FilterInList.Add("Including-Substring-#2");        

// 2.2. Diviser la chaîne par le séparateur " ;" pour ajouter toutes les sous-chaînes à FilterInList en une seule ligne
logger.FilterInFromStringWithSep("Including-Substring-#3;Including-Substring-#4", ";");  

// Si vous souhaitez filtrer les messages OUT avec des sous-chaînes, mais laisser tous les autres,
// remplir la liste des filtres (FilterOutList) 
// 3.1. Ajouter une sous-chaîne à FilterOutList
logger.FilterOutList.Add("Excluding-Substring-#1");        
logger.FilterOutList.Add("Excluding-Substring-#2");        

// 3.2. Diviser la chaîne par le séparateur " ;" pour ajouter toutes les sous-chaînes à FilterOutList en une seule ligne
logger.FilterOutFromStringWithSep("Excluding-Substring-#3;Excluding-Substring-#4", ";");  // utiliser Filter In mettre votre chaîne de filtre séparée par ; ici

// ÉTAPE 4 : Enregistrement
logger.Debug("Debug: Including-Substring-#1", false);                  // Débogage sans alerte
logger.Info("Info: Including-Substring-#1", true);                     // Info avec boîte de dialogue d'alerte
logger.Warn("Warn: Including-Substring-#1"); 
logger.Error("Error: Including-Substring-#1: Excluding-Substring-#1"); // Ignoré à cause de FilterOutList
logger.Critical("Critical: Including-Substring-#1");

logger.Assert(true, 
              "Log msg if true", INFO,   // si ok
              "Log msg if false", ERROR, // si échec
              true);                     // Afficher également l'alerte
logger.Assert(true, 
              "Same msg for true & false", 
              INFO,   // Niveau de journalisation si ok
              ERROR,  // Niveau de journalisation en cas d'échec
              false); // Pas d'alerte 

Les messages suivants seront affichés dans le journal à la suite de l'exécution :

Questions en suspens

J'utilise souvent la classe de cette manière :

logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f",
                          __FUNCTION__, __LINE__,
                          my_param));

Mais ici, nous avons un problème. La fonction StringFormat analyse la chaîne de caractères à chaque fois, même si le niveau de journalisation n'exige pas que le message soit affiché.

Si vous avez besoin de sortir des messages de débogage souvent, vous devrez envelopper la sortie dans une condition :

if(DEBUG >= logger.Level)                          
  logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f",
                            __FUNCTION__, __LINE__,
                            my_param));      

La meilleure façon de le faire serait d'utiliser StringFormat paresseusement, mais malheureusement MQL5 ne prend pas en charge le passage d'un nombre dynamique de paramètres de fonction aux fonctions Debug, Info, Error, etc.

Si vous avez des idées sur la façon dont cela pourrait être fait, je serais ravi de les entendre.

Traduit de l’anglais par MetaQuotes Ltd.
Code original : https://www.mql5.com/en/code/52741

Explosion de Waddah Attar Explosion de Waddah Attar

L'indicateur montre quand le marché commence à évoluer plus rapidement. En outre, il indique au trader quand acheter, vendre et sortir d'une transaction.

ADX lissé ADX lissé

Il existe de nombreux algorithmes de lissage, cet indicateur est un lissage de l'indicateur ADX standard.

TimeServerDaylightSavings TimeServerDaylightSavings

Fonctions liées au temps pour la détection empirique du fuseau horaire du serveur et du mode d'heure d'été (DST) à partir de l'historique des cotations

Martingale Pulse EA Martingale Pulse EA

Introducing MP by SPLpulse, a sophisticated and highly versatile Expert Advisor designed for the modern trader. Whether you are a scalper, a trend follower, or a reversal trader, MP by SPLpulse combines multiple trading strategies with an institutional-grade risk management suite to adapt to your unique trading style. Take control of your trading with unparalleled customization and powerful automation.