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)
How do I install this agent skill?
npx skills add https://github.com/tmaru-eng/strategy-bricks --skill mql5-x-compileIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill is a developer utility for compiling MQL5 code on macOS using Wine. It provides bash commands to map a virtual drive and execute the local MetaEditor compiler. No security issues were detected.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- Runlayerfail
1/1 file flagged
- ZeroLeakspass
Score: 93/100 · 2 sections analyzed
What does this agent skill do?
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
.mq5file (indicator, script, EA) - Editing any
.mqhfile (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:
- Check
.ex5file exists with recent timestamp:ls -la YourFile.ex5 - 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)
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/tmaru-eng/strategy-bricks/mql5-x-compile">View mql5-x-compile on skillZs</a>