はじめに
MQL4を開発しやすい環境を整えたので、特につまずいた部分を備忘録として残しておきます。
環境は以下の通りです。
- Wintows10
- MT4 build 1260
- Notepad++ v7.8.5
普段使用している VS Code や IntelliJ IDEA も試してみましたが、Notepad++ が最も要求を満たすことができました。
設定内容
コンパイル
Notepad++ からショートカットキーでコンパイルをできるようにします。
まず以下内容のバッチファイルを作成してください。
ログ内容表示.bat を作成します。
type %1
引数で受け取ったファイルの情報を表示させるだけです。
※何故か Notepad++ のコマンド実行で type が認識されなかったのでバッチファイルを作成して実行させることにしています。
次にプラグインの NppExec を導入します。
導入した後、F6キーを押すとコマンドを入力する画面が出るので以下を入力します。
NPP_SAVE
"C:\{MT4インストールフォルダ}\metaeditor.exe" /compile:"$(FULL_CURRENT_PATH)" /log
{先程作成したバッチファイルのパス} "$(CURRENT_DIRECTORY)$(NAME_PART).log"
{MT4インストールフォルダ} と {先程作成したバッチファイルのパス} は適宜変更してください。
OKボタンを押すとコンパイルが実行されます。
Result: 0 errors, 0 warnings, 119 msec elapsed
上記のようなメッセージがコンソールに出力されれば成功です。
もう一度F6キーを押し、内容を保存します。
save > 名前を入力 > save
最後にショートカットの登録を行います。
設定 > ショートカット管理 > プラグインタブ で先程保存した名前がありますので、お好みのショートカットを設定します。
シンタックスハイライト
構文によって文字の色を変える設定をします。
基本的には下記サイトを参考にさせて頂きました。

コード補完
MQL4でデフォルト定義されている関数等を最初の何文字かを入力することで自動的に補完するようにする設定をします。
基本的には下記サイトを参考にさせて頂きました。

一部違うところがありましたので、その部分だけ記載いたします。
作成した mql4.xml の配置場所は以下になります。
C:\Program Files\Notepad++\autoCompletion
MQL4のヘルプ表示
MQL4でデフォルト定義されている関数等にカーソルがある際に指定したショートカットキーを押すことでヘルプが出るようにします。
まずはプラグインの LanguageHelp を導入します。
次に設定です。
プラグイン > Language Help > Options… > Add…
Name: mql4
Extension/file mask: *.mq4;*.mqh
Extended help file path: C:\Users\{ユーザ名}\AppData\Roaming\MetaQuotes\Terminal\Help\mql4.chm
{ユーザ名} は適宜変更してください。
この段階でテストボタンを押下してヘルプが開くことを確認すると良いかと思います。
最後にショートカットの登録を行います。
設定 > ショートカット管理 > プラグインタブ > Help(プラグイン列が LanguageHelp.dll になっているもの)
関数リストの表示
表示 > 関数リスト をチェックした際に右側に表示されますが、最初は中身が空っぽになっているので、表示できるように設定をします。
以下ファイルの編集を行います。
C:\Users\{ユーザ名}\AppData\Roaming\Notepad++/functionList.xml
修正箇所は2箇所です。
associationMap タグ内に以下を追加する。
<association id= "mql4_function" userDefinedLangName="MQL4" />
parsers タグ内に以下を追加する。
<parser
displayName="MQL4"
id ="mql4_function"
commentExpr="(?s:/\*.*?\*/)|(?m-s://.*?$)"
>
<classRange
mainExpr ="^[\t\x20]*(class|struct)[\t\x20]+\w+\s*(final)?\s*(:\s*(public|protected|private)\s+\w+\s*)?\{"
openSymbole ="\{"
closeSymbole="\}"
>
<className>
<nameExpr expr="(class|struct)[\t\x20]+\w+" />
<nameExpr expr="[\t\x20]+\w+" />
<nameExpr expr="\w+" />
</className>
<function
mainExpr="^[\t\x20]*((static|const|virtual)\s+)?(\w+(\s+\w+)?(\s+|(\*|\*\*|&)\s+|\s+(\*|\*\*|&)|\s+(\*|\*\*|&)\s+))?(\w+\s*::)?(?!(if|while|for|switch))[\w~]+\s*\([^\)\(]*\)(\s*const\s*)?(\s*(final|override|final\s*override|override\s*final)\s*)?[\n\s]*\{"
>
<functionName>
<funcNameExpr expr="(?!(if|while|for|switch))[\w~]+\s*\(" />
<funcNameExpr expr="(?!(if|while|for|switch))[\w~]+" />
</functionName>
</function>
</classRange>
<function
mainExpr="^[\t\x20]*((static|const|virtual)\s+)?\w+(\s+\w+)?(\s+|(\*|\*\*|&)\s+|\s+(\*|\*\*|&)|\s+(\*|\*\*|&)\s+)(\w+\s*::)?(?!(if|while|for))\w+\s*\([^\)\(]*\)(\s*const\s*)?[\n\s]*\{"
>
<functionName>
<nameExpr expr="(?!(if|while|for))\w+\s*\(" />
<nameExpr expr="(?!(if|while|for))\w+" />
</functionName>
<className>
<nameExpr expr="\w+(?=\s*::)" />
</className>
</function>
</parser>
Notepad++ を再起動すると関数リスト内に関数が表示されているかと思います。
mqhファイル(MQL4の共通処理を集めたファイル)を自作している方は下記設定を行うことで同様に関数リストに表示されるようになります。
言語 > ユーザー定義 > 言語を定義…
言語名をMQL4に変更します。
拡張子の入力欄に mq4 だけ入力されていると思いますが、以下に変更してください。
mq4 mqh
コードフォーマット
インデント等をショートカットキーを押すことでフォーマットできるように設定します。
まずはプラグインの Indent By Fold を導入します。
そしてショートカットの登録を行います。
設定 > ショートカット管理 > プラグインタブ > Reindent File
課題
現時点での改善したいポイントを書いておきます。
ワークスペース上での指定ファイル非表示
現状、ex4ファイルやlogファイルまで表示されてしまっていて、大変邪魔なので表示させないようにしたい。
コメント