恥は/dev/nullへ by 初心者

プログラミング初心者がのろのろと学んだことをつづっています♪

MeryでMQL4 その3 【コンパイル】

MeryでMQL4ファイルをコンパイルする方法を記述します。


コンパイルに使用するPowerShell用のファイルは、以下のページにあったコードを元にしています。

https://www.mql5.com/en/blogs/post/719548

 

(1)コンパイルに使うファイルを用意する 

 

(a) テキストファイルを新規作成し、Compile-MQL.ps1 という名前で保存します。

 

(b) そのファイルの中に以下の記述をします。

# 人によって異なる部分は 〇〇〇 にしてあります。ご自身の環境に応じて変更してください。
# 英語で書かれているコメントは元からあったものです。
#gets the File To Compile as an external parameter... Defaults to a Test file...
Param( $FileToCompile = "C:\Users\〇〇〇\AppData\Roaming\MetaQuotes\Terminal\〇〇〇\MQL4\Experts\Test.mq4")
#Test.mq4ファイルは中身が空っぽでも問題ありません。Expertsフォルダにあれば大丈夫です。
#cleans the terminal screen and sets the log file name...
Clear-Host
$LogFile = $FileToCompile + ".log"
#before continue check if the Compile File has any spaces in it...
if ($FileToCompile.Contains(" ")) {
"";"";
Write-Host "ERROR! Impossible to Compile! Your Filename or Path contains SPACES!" -ForegroundColor Red;
"";
Write-Host $FileToCompile -ForegroundColor Red;
"";"";
return;
}
# metaeditor.exe のある場所を示すように〇〇〇を記述してください。inc:の後はご自身の環境に合わせて〇〇〇を変更してください(2か所)。
#fires up the Metaeditor compiler...
& "C:\Program Files (x86)\〇〇〇\metaeditor.exe" /compile:"$FileToCompile" /log:"$LogFile" /inc:"C:\Users\〇〇〇\AppData\Roaming\MetaQuotes\Terminal\〇〇〇\MQL4" | Out-Null
#get some clean real state and tells the user what is being compiled (just the file name, no path)...
""
$JustTheFileName = Split-Path $FileToCompile -Leaf
Write-Host "Compiling........: $JustTheFileName"
""
#reads the log file. Eliminates the blank lines. Skip the first line because it is useless.
$Log = Get-Content -Path $LogFile | Where-Object {$_ -ne ""} | Select-Object -Skip 1
#Green color for successful Compilation. Otherwise (error/warning), Red!
$WhichColor = "Red"
$Log | ForEach-Object { if ($_.Contains("0 error(s), 0 warning(s)")) { $WhichColor="Green" } }
#runs through all the log lines...
$Log | ForEach-Object {
#ignores the ": information: error generating code" line when ME was successful
if (-Not $_.Contains("information:")) {
#common log line... just print it...
Write-Host $_ -ForegroundColor $WhichColor
}
}
#コンパイル時に作成されるlogファイルを削除するための式。logファイルを残したい人は以下の行を削除してください。
Remove-Item -Path $LogFile

 [ネタ元] https://www.mql5.com/en/blogs/post/719548

 

(c) Compile-MQL.ps1 ファイルの中身において、〇〇〇となっている部分を自分の環境に合わせて修正します。

 

(d) Compile-MQL.ps1 ファイルを好きな場所に置きます(私の場合は、Meryフォルダの中に置いています)。

 

(2) Meryの設定をする

(a) Meryを起動して「ツール」→「外部ツール」→「外部ツールの設定」を開きます。

 

(b)「追加」ボタンを押した後に登場する画面で以下のように入力します。

(タイトル) MQL4コンパイル ※意味が分かればどんなタイトルを付けても大丈夫です
(コマンド) %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
(引数) -ExecutionPolicy RemoteSigned -File Compile-MQL.ps1のある場所 $(Path)
(入力) 無し
(出力) 破棄
(エンコード) 自動選択

以上の項目に加えて、「アウトプットバーを使用する」にチェックを入れてから「OK」ボタンを押して保存します。

 

(c) 再び「外部ツールの設定」に戻るので、ここでも「OK」ボタンを押してください。

 

(d) 「ツール」 → 「オプション」 → 「キーボード」を開きます。

 

(e) 『カテゴリ』というメニューから「ツール」を選びます。

 

(f) 『コマンド』というメニューから「MQL4コンパイル」を選び、『新しいキー』という枠の中を1回クリックした後で、 F9 キーを押します。

 

(g) 「割り当て」というボタンを押すと、『現在のキー』という欄に「F9」が表示されます。そして「OK」ボタンを押します。


[備考]
Compile-MQL.ps1のある場所の記述例 (以下のように絶対パスで記述します)
C:\Users\〇〇〇\Documents\Mery\Compile-MQL.ps1

 

(3) 使い方

Meryで.mq4ファイルを開いている時に F9 キーを押すとコンパイルできます。
コンパイル結果は、画面の下段に登場するアウトプットバーに表示されます。

・アウトプットバーに表示されたエラーメッセージをクリックすると、エラー行にジャンプできます。

・アウトプットバーを閉じるには、アウトプットバーの表示/非表示を切り替えるキーを使います。
「表示」をクリックして登場するメニューにおいて「アウトプット」というところを見ると、割り当てられているキーが表示されています。
そのキーを押すと開いているアウトプットバーを閉じることができます。

 

(4) 重要事項

MetaEditorでコードを書いて、MetaEditor上部にある「コンパイル」ボタンを押した場合は、変更内容がMT4のインジケーター等に即座に反映しますが、この記事に書いた方法でコンパイルした場合はそのようになりません。

 

MT4のナビゲーターウィンドウで右クリックをして登場するメニューにおいて、「更新」を行う必要があります。

 

「更新」を行うと、コンパイルしたファイルの内容がMT4に反映します。