為替取引所ごとに配布されている「MetaTrader 4 (MT4)」には、パソコン用としてはWindows版のほかにMac版がある。Mac版をダウンロードして試したところ、実行ファイルの実体はWindowsバイナリで、Wineを介して動作させるように上手にパッケージされていた。ちなみに詳細は省くが、手元のLinux (x86_64) 環境においても、Wineを使ってWindows版のMT4を動作させることができた。
一方、MT4のエキスパートアドバイザー (EA) を記述するMQL4ファイルの編集は、私の常用環境でもあるMacとLinuxではどのように行えるかというと、原則的にはWindows版と同じでMT4付属のMetaEditorで編集を行えばよい。だがやはり、開発環境としては鉄板のVisual Studio Code (VSCode) を使いたい。そこでVSCodeからMetaEditorを内部起動してMQL4ファイルをコンパイルする、下記の「compilemql4」というVSCode拡張機能が、Mac環境とLinux環境でも使えるかどうかを試行錯誤した。
結論から述べると、compilemql4によるVSCode内からのMQL4コンパイル機能は、MacでもLinuxでも利用可能だ。設定方法は次の通り。
metaeditor_wrapper.sh
を適当なpathに保存してchmod +x
するInclude Dir
とLog Dir
を設定した場合の動作は現時点では想定していません)設置項目 | 設定値 |
---|---|
Compile After Save | ON |
Include Dir | (カラ) |
Log Dir | (カラ) |
Metaeditor Dir | ${HOME}/path/to/metaeditor_wrapper.sh |
環境 | MQL4ファイルの保存Path |
---|---|
Mac | ${HOME}/Library/Application Support/MetaTrader 4/Bottles/metatrader64/drive_c/Program Files (x86)/MetaTrader 4/MQL4/Experts/ |
Linux | ${HOME}/.wine/drive_c/Program Files (x86)/XMTrading MT4/MQL4/Experts/ |
metaeditor_wrapper.sh
→metaeditor.exe
が呼び出されてコンパイルが行われる今回は次の目的で、キモの部分をwrapperとしてbashスクリプトで記述し、VSCodeに行う設定自体はシンプルにすることを心掛けた。
MQL4プログラミングの環境はこうして整備しつつあるが、肝心のエキスパートアドバイザー (EA) の中身はまだ書いたことがなく未着手だ。先日購入した下記の書籍などを参考にコツコツ進めていくつもり……。
MQL4プログラミング入門 ゼロからはじめる自動取引システム
木村 聡 (著)
#!/bin/bash
# metaeditor_wrapper.sh (Ver.20230114)
# metaeditor.exeの起動にWineを使っている環境用
# 動作確認したVSCodeの [CompileMQL4 configuration]
# - Compile After Save: ON
# - Include Dir: (カラ)
# - Log Dir: (カラ)
# - Metaeditor Dir: ${HOME}/path/to/metaeditor_wrapper.sh
ARG_COMPILE="$1"
ARG_LOG="$2"
FLAG_OK=0
if [ "$(uname)" == 'Darwin' ]; then
OS='Mac'
elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
OS='Linux'
else
OS='unknown'
fi
if [ ${OS} = 'Mac' ]; then
PATH_WINE='/Applications/MetaTrader 4.app/Contents/SharedSupport/metatrader4/MetaTrader 4/wine'
PATH_METAEDITOR="${HOME}/Library/Application Support/MetaTrader 4/Bottles/metatrader64/drive_c/Program Files (x86)/MetaTrader 4/metaeditor.exe"
FLAG_OK=1
elif [ ${OS} = 'Linux' ]; then
PATH_WINE='/usr/bin/wine'
PATH_METAEDITOR="${HOME}/.wine/drive_c/Program Files (x86)/XMTrading MT4/metaeditor.exe"
FLAG_OK=1
fi
if [ ${FLAG_OK} -eq 1 ]; then
VALUE_COMPILE=$(echo "${ARG_COMPILE}" | awk -F':' '{print $2}')
VALUE_LOG=$(echo "${ARG_LOG}" | awk -F':' '{print $2}')
FILE_COMPILE=$(basename "${VALUE_COMPILE}")
DIR_COMPILE="${VALUE_COMPILE%/*}"
FILE_LOG=$(basename "${VALUE_LOG}")
DIR_LOG="${VALUE_LOG%/*}"
cd "${DIR_COMPILE}"
"${PATH_WINE}" "${PATH_METAEDITOR}" /compile:"${FILE_COMPILE}" /log:"${FILE_LOG}"
fi