smithery/tmaru-eng

mql5-x-compile

>- Compile MQL5 indicators via CLI using X: drive mapping to bypass 'Program Files' path spaces issue. Use PROACTIVELY after editing ANY .mq5 or .mqh file. Triggers - after editing MQL5 code, compile, build, MetaEditor, .mq5, .mqh, indicator, script, EA, expert advisor, "test it", "try it", "run it", path space errors. (project)

Installation

$ npx skills add smithery/tmaru-eng --skill mql5-x-compile

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Allowed toolsBash, Read

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 7,084 B
  • docs SUMMARY.md 349 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

MQL5 X-Drive CLI Compilation

Compile MQL5 indicators/scripts via command line using X: drive mapping to avoid "Program Files" path spaces that cause silent compilation failures.

When to Use (Proactive Triggers)

ALWAYS use this skill after:

  • Editing any .mq5 file (indicator, script, EA)
  • Editing any .mqh file (library/include)
  • User says "compile", "build", "test it", "try it", "run it"
  • User asks to verify changes work
  • Making code changes that need validation

Also use when:

  • User mentions MetaEditor, compilation errors, or path issues
  • Exit code 1 appears (reminder: exit 1 is normal, check .ex5 file)
  • Need to verify .ex5 file was created

Prerequisites

X: drive must be mapped (one-time setup):

BOTTLE="$HOME/Library/Application Support/net.metaquotes.wine.metatrader5"
cd "$BOTTLE/dosdevices"
ln -s "../drive_c/Program Files/MetaTrader 5/MQL5" "x:"

Verify mapping exists:

ls -la "$BOTTLE/dosdevices/" | grep "x:"

Compilation Instructions

Step 1: Construct X: Drive Path

Convert standard path to X: drive format:

  • Standard: C:\Program Files\MetaTrader 5\MQL5\Indicators\Custom\MyIndicator.mq5
  • X: drive: X:\Indicators\Custom\MyIndicator.mq5

Pattern: Remove Program Files/MetaTrader 5/MQL5/ prefix, replace with X:\

Step 2: Execute Compilation

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:"

Critical flags:

  • /log: Enable compilation logging
  • /compile:"X:\\...": Source file (X: drive path with escaped backslashes)
  • /inc:"X:": Include directory (X: drive root = MQL5 folder)

Step 3: Verify Compilation

CRITICAL: Wine returns exit code 1 even on successful compilation. Ignore the exit code - always verify by checking the .ex5 file and per-file log.

Check if .ex5 file was created:

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"

Per-file log location: The .log file is created in the same directory as the .mq5 file (e.g., Fvg.mq5 → Fvg.log). This is more reliable than logs/metaeditor.log.

Common Patterns

Example 1: Compile CCI Neutrality Indicator

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)

Example 2: Compile Script

WINEPREFIX="$WINEPREFIX" "$WINE" "C:/Program Files/MetaTrader 5/MetaEditor64.exe" \
  /log \
  /compile:"X:\\Scripts\\DataExport\\ExportAligned.mq5" \
  /inc:"X:"

Example 3: Verify X: Drive Mapping

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.

Troubleshooting

Issue: Exit code 1 but compilation succeeded

Cause: Wine always returns exit code 1, even on success Solution: Ignore exit code. Always verify by:

  1. Check .ex5 file exists with recent timestamp: ls -la YourFile.ex5
  2. Check per-file log for "0 errors, 0 warnings": cat YourFile.log

Issue: 42 errors, include file not found

Cause: Compiling from simple path (e.g., C:/file.mq5) without X: drive Solution: Use X: drive path with /inc:"X:" flag

Issue: Exit code 0 but no .ex5 file

Cause: Path contains spaces or special characters Solution: Use X: drive path exclusively (no spaces)

Issue: X: drive not found

Cause: Symlink not created Solution: Run prerequisite setup to create x: symlink in dosdevices

Issue: Wrong MetaTrader app path

Cause: MetaTrader 5.app path is different on this machine Solution: Verify with ls /Applications/MetaTrader\ 5.app

Issue: Can't find metaeditor.log

Cause: Looking in wrong location Solution: Use per-file log instead - it's in the same directory as your .mq5 file (e.g., Fvg.mq5 creates Fvg.log)

Benefits of X: Drive Method

✅ Eliminates path spaces: No "Program Files" in path ✅ Faster compilation: ~1 second compile time ✅ Reliable: Works consistently unlike direct path compilation ✅ Includes resolved: /inc:"X:" finds all MQL5 libraries ✅ Simple paths: X:\Indicators\... instead of long absolute paths

Comparison: X: Drive vs Manual GUI

Method Speed Automation Reliability
X: drive CLI ~1s ✅ Yes ✅ High
Manual MetaEditor ~3s ❌ No ✅ High
Direct CLI path N/A ⚠️ Unreliable ❌ Fails silently

Integration with Git Workflow

X: drive mapping is persistent and git-safe:

  • Symlink stored in bottle's dosdevices/ folder
  • Doesn't affect MQL5 source files
  • Works across git branches
  • No configuration files to commit

Security Notes

  • X: drive is READ-ONLY for compilation purposes
  • No execution of compiled files during compilation
  • MetaEditor runs in sandboxed Wine environment
  • No network access during compilation

Quick Reference

Compilation command template:

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 location: ~/Library/Application Support/net.metaquotes.wine.metatrader5/

X: drive maps to: MQL5/ folder inside bottle

Verification: Check for .ex5 file and review per-file .log (ignore exit code - it's always 1)