关于 mt5-log-reader
mt5-log-reader 是用于程序化检查 MetaTrader 5 运行与编译日志的技能。它通过定向搜索帮助开发者验证指标、脚本、EA 和测试输出,减少手动浏览日志的需要。
主要功能
- 01读取运行和编译日志
- 02按指定模式搜索日志条目
- 03检查错误、版本和调试输出
- 04验证单元测试结果
适用场景
- 01确认指标重新加载及其版本
- 02调查运行时或编译错误
- 03检查指标计算和测试结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ terrylica/ mql5-crossover --skill mt5-log-reader安装后在 Claude Code 中输入/mt5-log-reader确认已加载。
详细介绍
MT5 日志读取器
概述
以编程方式读取 MetaTrader 5 日志文件,访问指标、脚本和专家顾问的 Print() 输出。采用双重日志记录模式:Print() 语句写入 MT5 日志(便于人工阅读),CSV 文件则提供结构化数据以供验证。
适用场景
在以下情况下使用此技能:
- 验证 MT5 指标或脚本的执行情况
- 检查编译错误或运行时错误
- 分析指标的 Print() 调试输出
- 验证单元测试结果(Test_PatternDetector、Test_ArrowManager)
- 用户提到要手动检查“Experts 窗格”或“日志”
- 用户询问“是否运行成功?”或“检查输出”
日志文件结构
运行时日志(Experts 窗格)
MT5 运行时日志存储在:
$MQL5_ROOT/Program Files/MetaTrader 5/MQL5/Logs/YYYYMMDD.log
文件格式:
- 编码:UTF-16LE(小端序)——Read 工具会自动处理
- 结构:以制表符分隔的字段(时间戳、来源、消息)
- 大小:全天持续增长(通常为 10-100KB,可能达到 5MB 以上)
编译日志(每个文件)
MetaEditor 会在每个已编译的 .mq5 文件旁创建一个 .log 文件:
# Example: Fvg.mq5 creates Fvg.log in the same directory
$MQL5_ROOT/Program Files/MetaTrader 5/MQL5/Indicators/Custom/Development/FVG/Fvg.log
文件格式:
- 编码:UTF-16LE(通常可用普通的
cat读取) - 内容:编译进度、错误数量、警告、耗时
- 成功标志:“0 errors, 0 warnings”
重要:即使编译成功,Wine/CrossOver 也会返回退出代码 1。务必检查 .log 文件或确认 .ex5 文件存在。
工作流
步骤 1:构造日志路径
确定当天日期并构造绝对路径:
TODAY=$(date +"%Y%m%d")
LOG_FILE="$MQL5_ROOT/Program Files/MetaTrader 5/MQL5/Logs/${TODAY}.log"
步骤 2:搜索相关条目
使用 Grep 工具筛选日志条目(比读取整个文件更高效):
Pattern: indicator name, "error", "ERROR", "v0\\.4\\.0", "Phase 2", etc.
Path: Log file from Step 1
Output mode: "content"
-n: true (show line numbers)
-A: 5 (show 5 lines after matches for context)
常见搜索模式:
CCI Rising Test|CCI_Rising_Test- 查找特定指标输出error|ERROR|failed- 查找错误消息v0\\.4\\.0|v0\\.3\\.0- 查找特定版本的输出Phase \\d+|Test arrow created- 查找初始化消息DEBUG Bar- 查找计算输出
步骤 3:分析结果
检查 grep 输出中的以下内容:
- 时间戳 - 确认输出时间与预期的执行时间相符
- 错误消息 - 根据上下文识别具体故障
- 版本号 - 确认加载了正确的 .ex5 文件
- DEBUG 输出 - 验证计算结果
- 测试结果 - 确认单元测试通过或失败
常见验证模式
检查已加载的指标版本
编译后,确认已加载新的 .ex5 文件:
# Search for version string in recent log entries
Pattern: "v0\\.4\\.0|=== CCI Rising Test"
Output mode: content
Context: -A 2
查找包含版本号的初始化消息,并确认其时间戳与重新加载时间相符。
查找运行时错误
Pattern: "error|ERROR|failed|Failed"
Output mode: content
Context: -A 3 -B 1 # Show 3 lines after, 1 before
分析错误代码(例如,4003 = 时间无效)及错误上下文。
监控计算输出
Pattern: "DEBUG Bar"
Output mode: content
Context: -A 0 # No extra context needed
-n: true # Show line numbers
确认计算值合理(不是 EMPTY_VALUE,也没有颠倒)。
验证测试箭头创建情况
Pattern: "Phase 2|Test arrow created|Failed to create"
Output mode: content
Context: -A 2
检查是否有包含时间戳的成功消息。
大型日志文件
如果日志文件超过 5MB(Read 工具的限制):
- 仅使用 Grep(比读取整个文件更高效)
- 使用
-A和-B上下文参数按时间筛选 - 搜索特定指标名称以缩小结果范围
与双重日志记录的集成
此技能可访问双重日志记录模式中的一部分:
- MT5 日志文件(此技能) - 便于人工阅读的 Print() 输出
- CSV 文件(CSVLogger.mqh) - 结构化审计记录
无需用户干预即可通过编程方式访问两者。
安全注意事项
- 日志文件可能包含敏感交易数据(品种名称、账户信息)
- 面向用户的输出中不要无必要地暴露绝对路径
- 报告结果时过滤敏感信息
- 不允许执行文件修改操作(仅限读取)
示例
示例 1:确认指标在编译后已重新加载
User: "I reloaded the indicator, can you check if v0.4.0 is running?"
Action:
1. Grep for "v0\\.4\\.0|CCI Rising Test v0\\.4"
2. Check most recent match timestamp
3. Verify it's after compilation time (16:59)
Output: "Yes, v0.4.0 loaded at 17:01 on EURUSD M1 chart"
示例 2:查找直方图为空的原因
User: "The last 19 bars are still empty, check the log"
Action:
1. Grep for "DEBUG Bar|CCI=" pattern
2. Look for EMPTY_VALUE or unusual values
3. Check for error messages with -A 3 context
Output: "Found 'CCI=179769313486231570...' which is EMPTY_VALUE constant. The indicator didn't calculate CCI for those bars."
示例 3:验证计算修复
User: "Check if the absolute value fix is working"
Action:
1. Grep for "DEBUG Bar.*\\|CCI\\|=" (looking for |CCI|= output)
2. Compare with old format "DEBUG Bar.*CCI=" (without |CCI|)
3. Check timestamp matches latest compilation
Output: "The log shows old format (no |CCI|=) at 16:56. Need to reload to get v0.4.0 from 16:59."
参考资料
- MT5 文件位置:
docs/guides/MT5_FILE_LOCATIONS.md - 双重日志记录实现:
docs/plans/cci-rising-pattern-marker.yaml第 3-4 阶段 - CSVLogger 库:
Program Files/MetaTrader 5/MQL5/Indicators/Custom/Development/CCINeutrality/lib/CSVLogger.mqh
评论
支持 Markdown