请观看如何免费下载自动交易
请在Twitter上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
显示:
351
等级:
(5)
已发布:
\MQL5\Include\DKStdLib\Logger\
CDKLogger.mqh (26.27 KB) 预览
\MQL5\Scripts\
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

每个程序员都有自己的日志记录器。受 Python 日志模块的启发,我为 MQL5 编写了自己的日志记录器。

这个类是最简单的。没有层次结构、旋转器或格式化器。对于任何项目来说都简单方便。

安装

  1. 复制 CDKLogger.mqh 到 MQL\Include\DKStdLib\Logger 文件夹。
  2. 导入 CDKLogger 类。

#include <DKStdLib\Logger\CDKLogger.mqh

使用

CDKLogger logger;

// 第 1 步: 使用 "MyLoggerName "名称和 INFO 级别启动日志记录器
logger.Init("MyLoggerName", INFO);

// 您可以将默认日志格式"%name%:[%level%] %message%"改为自己的格式
// 使用任何模式组合 
logger.Format = "%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%"; 

// 第 2 步 如果您只想用子代过滤信息,请执行以下操作
// 填充 FilterInList 
// 2.1.为 FilterIntList 添加子元素
logger.FilterInList.Add("Including-Substring-#1");        
logger.FilterInList.Add("Including-Substring-#2");        

// 2.2.用"; "分隔符分割字符串,以便在一行中将所有子字符串添加到 FilterInList 中
logger.FilterInFromStringWithSep("Including-Substring-#3;Including-Substring-#4", ";");  

// 第 3 步: 如果您想过滤带有子字符串的 OUT 信息,但不过滤其他所有信息、
// 填充过滤器输出列表 
// 3.1.在 FilterOutList 中添加子串
logger.FilterOutList.Add("Excluding-Substring-#1");        
logger.FilterOutList.Add("Excluding-Substring-#2");        

// 3.2.用"; "分隔符分割字符串,以便在一行中将所有子字符串添加到 "筛选出列表 "中
logger.FilterOutFromStringWithSep("Excluding-Substring-#3;Excluding-Substring-#4", ";");  // 使用 "过滤器",在此处输入过滤器字符串,以 ; 隔开

// 第 4 步:记录
logger.Debug("Debug: Including-Substring-#1", false);                  // 无警报调试
logger.Info("Info: Including-Substring-#1", true);                     // 带警报对话框的信息
logger.Warn("Warn: Including-Substring-#1"); 
logger.Error("Error: Including-Substring-#1: Excluding-Substring-#1"); // 由于使用了 FilterOutList 而被跳过
logger.Critical("Critical: Including-Substring-#1");

logger.Assert(true, 
              "Log msg if true", INFO,   // 如果确定
              "Log msg if false", ERROR, // 如果失败
              true);                     // 同时显示警报
logger.Assert(true, 
              "Same msg for true & false", 
              INFO,   // Log level if ok
              ERROR,  // 失败时的日志级别
              false); // 无警报 

执行后,以下信息将输出到日志中:

打开的问题

我经常这样使用类:

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

但这里有一个问题。StringFormat 函数每次都会解析字符串,即使日志级别不要求输出消息。

如果需要经常输出调试信息,就必须用一个条件来封装输出:

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

最好的方法是偷懒地使用 StringFormat,但不幸的是,MQL5 不支持 向调试、信息、错误等函数传递动态数量的函数参数

如果您对此有任何想法,请告诉我。

由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/52741

Ascending Sort A Struct Array By A Field Example Ascending Sort A Struct Array By A Field Example

这是一个按字段对结构列表升序排序的示例。你可以根据使用目的找出并定制上述算法,这是最基本的示例,也是解决结构数组中排列问题的一个方向。 本例中使用的算法是快速排序和合并排序。

Bollinger Bands Crossover Signals Bollinger Bands Crossover Signals

指标描述 - 布林线交叉信号 名称:布林线交叉信号 版本: 1.1 作者:BENALI 链接: https://www.mql5.com/en/users/dahmi_benali

TimeServerDaylightSavings TimeServerDaylightSavings

与时间相关的功能,可从历史报价中经验性地检测服务器时区和夏令时模式 (DST)

Custom crosshair cursor with synchronization Custom crosshair cursor with synchronization

同步自定义十字线指标,显示价格和(服务器/本地)时间。