关于 mql5-x-compile
通过 Wine 调用 MetaEditor,在命令行编译 MQL5 指标、脚本和 EA 的技能。它使用 X: 盘映射避开含空格的路径,并通过生成的 .ex5 文件和单文件日志验证结果。
主要功能
- 01从命令行编译 MQL5
- 02将 MQL5 映射为 X: 盘路径
- 03通过 /inc 解析包含文件
- 04检查输出文件和单文件日志
- 05处理 Wine 退出码行为
适用场景
- 01编译修改后的 .mq5 或 .mqh 文件
- 02确认构建是否生成 .ex5 文件
- 03诊断包含文件缺失或路径问题
- 04无需 GUI 验证 MQL5 代码变更
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tmaru-eng/ strategy-bricks --skill mql5-x-compile安装后在 Claude Code 中输入/mql5-x-compile确认已加载。
详细介绍
MQL5 X-Drive 命令行编译
通过命令行使用 X: 盘映射编译 MQL5 指标/脚本,避免 “Program Files” 路径中的空格导致编译悄无声息地失败。
适用时机(主动触发条件)
以下情况后务必使用此技能:
- 编辑任何
.mq5文件(指标、脚本、EA)后 - 编辑任何
.mqh文件(库/包含文件)后 - 用户说“compile”“build”“test it”“try it”或“run it”
- 用户要求验证更改是否有效
- 进行需要验证的代码更改
以下情况也要使用:
- 用户提到 MetaEditor、编译错误或路径问题
- 出现退出代码 1(提醒:退出代码 1 属于正常情况,请检查 .ex5 文件)
- 需要验证是否已创建 .ex5 文件
先决条件
必须已映射 X: 盘(一次性设置):
BOTTLE="$HOME/Library/Application Support/net.metaquotes.wine.metatrader5"
cd "$BOTTLE/dosdevices"
ln -s "../drive_c/Program Files/MetaTrader 5/MQL5" "x:"
验证映射是否存在:
ls -la "$BOTTLE/dosdevices/" | grep "x:"
编译说明
步骤 1:构造 X: 盘路径
将标准路径转换为 X: 盘格式:
- 标准路径:
C:\Program Files\MetaTrader 5\MQL5\Indicators\Custom\MyIndicator.mq5 - X: 盘路径:
X:\Indicators\Custom\MyIndicator.mq5
模式:移除 Program Files/MetaTrader 5/MQL5/ 前缀,替换为 X:\
步骤 2:执行编译
WINE="/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64"
WINEPREFIX="$HOME/Library/Application Support/net.metaquotes.wine.metatrader5"
ME="C:/Program Files/MetaTrader 5/MetaEditor64.exe"
# Compile using X: drive path
WINEPREFIX="$WINEPREFIX" "$WINE" "$ME" \
/log \
/compile:"X:\\Indicators\\Custom\\YourFile.mq5" \
/inc:"X:"
关键标志:
/log:启用编译日志/compile:"X:\\...":源文件(使用转义反斜杠的 X: 盘路径)/inc:"X:":包含目录(X: 盘根目录 = MQL5 文件夹)
步骤 3:验证编译
重要:即使编译成功,Wine 也会返回退出代码 1。忽略退出代码——务必通过检查 .ex5 文件和单文件日志来验证。
检查是否已创建 .ex5 文件:
BOTTLE="$HOME/Library/Application Support/net.metaquotes.wine.metatrader5"
EX5_FILE="$BOTTLE/drive_c/Program Files/MetaTrader 5/MQL5/Indicators/Custom/YourFile.ex5"
LOG_FILE="$BOTTLE/drive_c/Program Files/MetaTrader 5/MQL5/Indicators/Custom/YourFile.log"
# Check .ex5 exists with recent timestamp
if [ -f "$EX5_FILE" ]; then
ls -lh "$EX5_FILE"
echo "✅ Compilation successful"
else
echo "❌ Compilation failed"
fi
# Check per-file log (UTF-16LE, but often readable with cat)
cat "$LOG_FILE" | grep -i "error\|warning\|Result"
单文件日志位置:.log 文件会创建在与 .mq5 文件相同的目录中(例如,Fvg.mq5 → Fvg.log)。这比 logs/metaeditor.log 更可靠。
常见模式
示例 1:编译 CCI 中性指标
WINE="/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64"
WINEPREFIX="$HOME/Library/Application Support/net.metaquotes.wine.metatrader5"
WINEPREFIX="$WINEPREFIX" "$WINE" "C:/Program Files/MetaTrader 5/MetaEditor64.exe" \
/log \
/compile:"X:\\Indicators\\Custom\\Development\\CCINeutrality\\CCI_Neutrality_RoC_DEBUG.mq5" \
/inc:"X:"
# Result: CCI_Neutrality_RoC_DEBUG.ex5 created (23KB)
示例 2:编译脚本
WINEPREFIX="$WINEPREFIX" "$WINE" "C:/Program Files/MetaTrader 5/MetaEditor64.exe" \
/log \
/compile:"X:\\Scripts\\DataExport\\ExportAligned.mq5" \
/inc:"X:"
示例 3:验证 X: 盘映射
WINE="/Applications/MetaTrader 5.app/Contents/SharedSupport/wine/bin/wine64"
WINEPREFIX="$HOME/Library/Application Support/net.metaquotes.wine.metatrader5"
WINEPREFIX="$WINEPREFIX" "$WINE" cmd /c "dir X:\" | head -10
# Should list: Indicators, Scripts, Include, Experts, etc.
故障排除
问题:退出代码为 1,但编译成功
原因:即使编译成功,Wine 也总是返回退出代码 1
解决方案:忽略退出代码。 务必通过以下方式验证:
- 检查
.ex5文件是否存在且时间戳较新:ls -la YourFile.ex5 - 检查单文件日志是否显示 “0 errors, 0 warnings”:
cat YourFile.log
问题:出现 42 个错误,找不到包含文件
原因:未使用 X: 盘,而是从简单路径(例如 C:/file.mq5)编译
解决方案:使用 X: 盘路径和 /inc:"X:" 标志
问题:退出代码为 0,但没有 .ex5 文件
原因:路径包含空格或特殊字符
解决方案:仅使用 X: 盘路径(不含空格)
问题:找不到 X: 盘
原因:未创建符号链接
解决方案:运行先决条件设置,在 dosdevices 中创建 x: 符号链接
问题:MetaTrader 应用路径不正确
原因:此计算机上的 MetaTrader 5.app 路径不同
解决方案:使用 ls /Applications/MetaTrader\ 5.app 验证
问题:找不到 metaeditor.log
原因:查找位置错误
解决方案:改用单文件日志——它位于与 .mq5 文件相同的目录中(例如,Fvg.mq5 会创建 Fvg.log)
X: 盘方式的优势
✅ 消除路径空格:路径中不含 “Program Files”
✅ 编译更快:编译时间约 1 秒
✅ 可靠:运行稳定,不像直接路径编译
✅ 解析包含文件:/inc:"X:" 可找到所有 MQL5 库
✅ 路径简洁:使用 X:\Indicators\...,而非冗长的绝对路径
对比:X: 盘与手动 GUI
| 方式 | 速度 | 自动化 | 可靠性 |
|---|---|---|---|
| X: 盘命令行 | ~1s | ✅ 是 | ✅ 高 |
| 手动使用 MetaEditor | ~3s | ❌ 否 | ✅ 高 |
| 直接命令行路径 | N/A | ⚠️ 不可靠 | ❌ 静默失败 |
与 Git 工作流集成
X: 盘映射会持久保留,且对 Git 安全:
- 符号链接存储在 bottle 的
dosdevices/文件夹中 - 不会影响 MQL5 源文件
- 可在不同 Git 分支间使用
- 无需提交配置文件
安全说明
- X: 驱动器在编译期间为只读
- 编译期间不会执行编译后的文件
- MetaEditor 在沙盒化的 Wine 环境中运行
- 编译期间无法访问网络
快速参考
编译命令模板:
WINEPREFIX="$HOME/Library/Application Support/net.metaquotes.wine.metatrader5" \
/Applications/MetaTrader\ 5.app/Contents/SharedSupport/wine/bin/wine64 \
"C:/Program Files/MetaTrader 5/MetaEditor64.exe" \
/log /compile:"X:\\Path\\To\\File.mq5" /inc:"X:"
Bottle 位置:~/Library/Application Support/net.metaquotes.wine.metatrader5/
X: 驱动器映射到:Bottle 内的 MQL5/ 文件夹
验证:检查 .ex5 文件并查看每个文件对应的 .log(忽略退出代码——它始终为 1)