mcpField
M
mql5-x-compile

mql5-x-compile

github.com/tmaru-eng开发0119 次安装41 周前更新
代码仓库

关于 mql5-x-compile

通过 Wine 调用 MetaEditor,在命令行编译 MQL5 指标、脚本和 EA 的技能。它使用 X: 盘映射避开含空格的路径,并通过生成的 .ex5 文件和单文件日志验证结果。

主要功能

  1. 01从命令行编译 MQL5
  2. 02将 MQL5 映射为 X: 盘路径
  3. 03通过 /inc 解析包含文件
  4. 04检查输出文件和单文件日志
  5. 05处理 Wine 退出码行为

适用场景

  1. 01编译修改后的 .mq5 或 .mqh 文件
  2. 02确认构建是否生成 .ex5 文件
  3. 03诊断包含文件缺失或路径问题
  4. 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
解决方案:忽略退出代码。 务必通过以下方式验证:

  1. 检查 .ex5 文件是否存在且时间戳较新:ls -la YourFile.ex5
  2. 检查单文件日志是否显示 “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)

评论

支持 Markdown