- 显示:
- 351
- 等级:
- 已发布:
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
每个程序员都有自己的日志记录器。受 Python 日志模块的启发,我为 MQL5 编写了自己的日志记录器。
这个类是最简单的。没有层次结构、旋转器或格式化器。对于任何项目来说都简单方便。
安装
- 复制 CDKLogger.mqh 到 MQL\Include\DKStdLib\Logger 文件夹。
- 导入 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
这是一个按字段对结构列表升序排序的示例。你可以根据使用目的找出并定制上述算法,这是最基本的示例,也是解决结构数组中排列问题的一个方向。 本例中使用的算法是快速排序和合并排序。
Bollinger Bands Crossover Signals
指标描述 - 布林线交叉信号 名称:布林线交叉信号 版本: 1.1 作者:BENALI 链接: https://www.mql5.com/en/users/dahmi_benali
TimeServerDaylightSavings
与时间相关的功能,可从历史报价中经验性地检测服务器时区和夏令时模式 (DST)
Custom crosshair cursor with synchronization
同步自定义十字线指标,显示价格和(服务器/本地)时间。
