XM MT4 for macのMetaEditorをSublimeText3で置き換えた話


手元にWindows向きのキーボードがないこともあって、MetaEditorでの開発が熾烈を極めた。
これはアカンと思いたちSublimeText3にパッケージを入れました

動作OS
・macOS Mojave

やりたいことは以下
・Macbook Proを今後開発に使う
・EAの開発・コンパイルはSublimeText3
・バックテスト・フォワードテストなどはXM MT4を使う

手順
1. SublimeText3のインストール
2. Wine Stable.appの導入
3. sublimeMQL4compileの導入
4. sublimeMQL4compileの中身をmacで動作するように書き換え
5. FinderにMT4のMQL4ディレクトリへのショートカットを登録

SublimeText3へのパッケージ導入参考はこちら↓
Sublime Text 3 による MQL 開発環境の構築 - Qiita https://qiita.com/Salinger/items/be5dcc6f686b9fe07d9e

[1] SublimeText3のインストール]
割愛

[2] Wine Stable.appの導入
https://dl.winehq.org/wine-builds/macosx/download.html
brew install wineでも導入できると思うのだが自前の環境ではwineserverの参照でエラーを吐いた
.app版はインストール時に64ビットモジュールにチェックを入れておく
インストールしたら.bash_profileに以下の要領でパスを通す

 export PATH=$PATH:/Applications/Wine\ Stable.app/Contents/Resources/wine/bin
source ~/.bash_profile

[3] sublimeMQL4compileの導入
この他にもsublime向けのプラグインが見つかったが、そちらはmetalang.exeを参照する一昔前の方式だったので試していない。
sublimeMQL4compile: https://github.com/rchjp/sublimeMQL4compile

何の話かというと、MT4の外部で.mq4をコンパイルする際にMT4に付随している"metaeditor.exe"を使ってコンパイルを行うのだが、このファイルは一昔前はmql.exeだったりmetalang.exeだったりしていた

[4] sublimeMQL4compileの中身をmacで動作するように書き換え
 sublimeMQL4compileパッケージが導入できたら、中にあるsublimeMQL4compile.pyを改変する

ここを

    cmd = '\"%s\" /compile:\"%s\" /log:\"%s\"' % (self.compilerpath, self.mql4filepath, self.mql4logpath)
    return subprocess.call(cmd)

こうする

    cmd = 'wine \"%s\" /compile:\"%s\" /log:\"%s\"' % (self.compilerpath, self.mql4filepath, self.mql4logpath)
    return subprocess.check_call(cmd, shell=True)

※shell=Trueはセキリュティ上リスクがあるので非推奨。使わない書き方にチャレンジしてみてください

[5] FinderにMT4のMQL4ディレクトリへのショートカットを登録
これはなんでわざわざ書くかというと、最初XM Trading MT4.appのパッケージ内のディレクトリは実際の動作には何も関係がなくて
本命は別の場所ということに気づくのにだいぶ時間がかかったためである

誤: /Applications/XM Trading MT4.app/Contents/Resources/wineprefix/drive_c/Program Files/XM MT4/metaeditor.exe
正: "/Users/*username/Library/Application Support/com.XM.MT4_***********/drive_c/Program Files/XM MT4/metaeditor.exe"

正しい方を変更するとMetaEditor上でも検知できる

今後
やっとEA開発に着手できる おそらくデバッグ機能がめちゃくちゃ欲しくなる気がするけどどうしたらいいんだろう 続く

追記
PCを再起動したら?コンパイルが通らなくなった wineまわりの参照関係が死んだっぽいけど調査中
もうおとなしくmetaeditorを使うのがよろしいかもしれんね
このときSublime上からの実行では成功sが返ってくるけど成果物が出てこない
コマンドライン上でコンパイルしてみると下記エラーが表示される

    0024:err:display:macdrv_ChangeDisplaySettingsEx No matching mode found 1920x1200x32 @60!
    /BuildRoot/Library/Caches/com.apple.xbs/Sources/AppleFSCompression/AppleFSCompression-96.200.3/Common/ChunkCompression.cpp:49: Error: unsupported compressor 8
    /BuildRoot/Library/Caches/com.apple.xbs/Sources/AppleFSCompression/AppleFSCompression-96.200.3/Libraries/CompressData/CompressData.c:353: Error: Unknown compression scheme encountered for file '/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/Exceptions.plist'
    /BuildRoot/Library/Caches/com.apple.xbs/Sources/AppleFSCompression/AppleFSCompression-96.200.3/Common/ChunkCompression.cpp:49: Error: unsupported compressor 8
    /BuildRoot/Library/Caches/com.apple.xbs/Sources/AppleFSCompression/AppleFSCompression-96.200.3/Libraries/CompressData/CompressData.c:353: Error: Unknown compression scheme encountered for file '/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/AppExceptions.bundle/Exceptions.plist'
    0009:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
    0009:fixme:kernelbase:AppPolicyGetProcessTerminationMethod 0xfffffffa, 0x32fe9c