mcpField
M
mql5-x-compile

mql5-x-compile

github.com/tmaru-eng開発0119 回インストール41 週間前に更新
リポジトリ

mql5-x-compile について

Wine経由でMetaEditorを呼び出し、MQL5のインジケーター、スクリプト、EAをコマンドラインでコンパイルするスキルです。X:ドライブへの割り当てで空白を含むパスを避け、生成された.ex5ファイルと個別ログで結果を確認します。

主な機能

  1. 01MQL5のコマンドラインコンパイル
  2. 02MQL5をX:ドライブパスに割り当て
  3. 03/incによるインクルード解決
  4. 04出力ファイルと個別ログの確認
  5. 05Wineの終了コード動作への対応

活用シーン

  1. 01編集した.mq5または.mqhファイルのコンパイル
  2. 02ビルドで.ex5ファイルが生成されたか確認
  3. 03インクルード不足やパス問題の診断
  4. 04GUIを使わずにMQL5の変更を検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tmaru-eng/strategy-bricks --skill mql5-x-compile

インストール後、Claude Code で/mql5-x-compileを入力して読み込まれたか確認します。

詳細

MQL5 X: ドライブを使った CLI コンパイル

「Program Files」内のパスに含まれるスペースが原因でコンパイルが失敗しても気づかない問題を避けるため、X: ドライブへのマッピングを使ってコマンドラインから MQL5 のインジケーター/スクリプトをコンパイルします。

使用するタイミング(事前に使う条件)

次の場合は必ずこのスキルを使用してください:

  • 任意の .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 Neutrality インジケーターをコンパイルする
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)からコンパイルしています
解決策:/inc:"X:" フラグを付けて、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: ドライブ CLI約 1 秒✅ はい✅ 高い
MetaEditor を手動操作約 3 秒❌ いいえ✅ 高い
CLI で直接パスを指定該当なし⚠️ 信頼性が低い❌ 気づかないまま失敗

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

ボトルの場所:~/Library/Application Support/net.metaquotes.wine.metatrader5/

X: ドライブの割り当て先:ボトル内の MQL5/ フォルダー

確認方法:.ex5 ファイルを確認し、ファイルごとの .log を確認します(終了コードは常に 1 なので無視してください)

コメント