はじめに
[1]『メタトレーダー4&5共通ライブラリによるEA開発入門』
では、MT5で作成したEA(例:sample.mq5)をMT4のデータフォルダにコピーして、拡張子をsample.mq4のように変換すれば、MT4用のEAがコンパイルできるとあります。
今回、コピーしてリネームするのも面倒なので、MT4とMT5のデータフォルダを共通化して、MT5のEAとMT4のEAが同時にできるようにしてみます。
Windowsのシンボリックリンクを使う
LinuxなどUNIX系のOSでは当たり前なのですが、ファイルの本体は一つだけど、別の名前で参照できるシンボリックリンクという機能があります。WindowsでもVISTA以降で対応しているので、今では普通に使える機能となっています。
以下に手順を示します。
PowerShellを管理者として開く
エクスプローラで、シンボリックリンクを作成したいフォルダを開いて、[ファイル]メニューから「Windows Power Shellを管理者として開く」を選択します。すると、コマンドを入力できる画面が現れます。
コマンドプロンプトを開く
シンボリックリンクを作成するコマンド「mklink」は、PowerShellからは実行できず、従来のコマンドプロンプトから実行します。そこで、「cmd」を実行してコマンドプロンプトを開きます。
PS C:\Users>cmd
Microsoft Windows [Version 10.0.18362.535]
(c) 2019 Microsoft Corporation. All rights reserved.
C:\Users>
mklinkの使い方
ここで、単にmklinkと入力すると、以下のようにmklinkの使い方が表示されます。
C:\Users>mklink
シンボリック リンクを作成します。
MKLINK [[/D] | [/H] | [/J]] リンク ターゲット
/D ディレクトリのシンボリック リンクを作成します。既定では、
ファイルのシンボリック リンクが作成されます。
/H シンボリック リンクではなく、ハード リンクを作成します。
/J ディレクトリ ジャンクションを作成します。
リンク 新しいシンボリック リンク名を指定します。
ターゲット 新しいリンクが参照するパス (相対または絶対)
を指定します。
今回の記事では、ファイルのシンボリックリンクと、フォルダのシンボリックリンクを使います。例えば、sample.mq5をsample.mq4として参照できるようなシンボリックリンクを作成する場合、
C:\Users>mklink sample.mq4 sample.mq5
とします。フォルダの場合、C:\Users\Experts というフォルダをExpertsとして参照できるようなシンボリックフォルダを作成する場合、
C:\Users>mklink /D Experts C:\Users\Experts
とします。
MT4とMT5のデータフォルダを共通化する
では、mklinkを使ってMT4とMT5のデータフォルダを共通化してみます。
MT4、MT5では、[ファイル]-[データフォルダを開く]を選択すると、それぞれのデータフォルダがエクスプローラで開きます。
ここで、MT4だと「MQL4」、MT5だと「MQL5」の下にユーザーが作成するプログラムが格納されています。このフォルダごと共通化するのが簡単なのですが、「Include」のフォルダなどで、同じファイル名で異なる内容のものが含まれるので、ここでは、「Experts」のサブフォルダだけを共通化してみます。
##共通のExpertsフォルダを作成する
MT4、MT5の両方から参照するExpertsフォルダを適当な場所に作成します。(ここでは、例として「C:\Users\Experts」とします。)
そして、「MQL4\Experts」と、「MQL5\Experts」のファイル、フォルダをこのフォルダにコピーします。
MQL4のファイルの拡張子は、mq4、ex4、MQL5のファイルの拡張子は、mq5、ex5なので、被ることはないと思いますが、mqhファイルなど同じファイル名のものがあった場合は、内容が同じがどうか確認してからコピーしてください。
##共通のExpertsフォルダにシンボリックリンクを張る
MT4の場合、データフォルダから「MQL4」を開いたところ、MT5の場合、データフォルダから「MQL5」を開いたところで、前述のコマンドプロンプトを開いてください。
それぞれのフォルダにExpertsというフォルダがあると思いますが、シンボリックリンクを作成する前に以下のようにフォルダ名を変えてバックアップしておきます。
C:\Users>ren Experts Experts.org
そして、先ほど説明したように、「C:\Users\Experts」へのシンボリックリンクを作成します。
C:\Users>mklink /D Experts C:\Users\Experts
これでMT4とMT5のExpertsフォルダが共通化できました。フォルダ中にはmq4、mq5のファイルが混在していますが、MT4ではmq4ファイルしか、MT5ではmq5ファイルしか見えないので、使い勝手はたいして変わらないと思います。(ただし、メタエディタでは両方のファイルが見えます。)
#mq5ファイルとmq4ファイルを共通化する
以下は、参考資料[1]の共通ライブラリを使ってmq5をmq4にリネームするだけでMT4のEAが作成できる場合の話です。
ファイルのリネームは、もとのmq5ファイルを更新すると毎回行わなくてはいけませんが、シンボリックリンクを使うと、その必要すらなくなります。
方法は簡単で、前述のmklinkの使い方の通り、シンボリックリンクを作成したいフォルダでコマンドプロンプトを開き、
C:\Users>mklink sample.mq4 sample.mq5
と実行するだけです。これで、MT4、MT5どちらからも同じファイルを開いてEAを作成することができます。
ただし、メタエディタの仕様か、リンクの方から開いて編集したファイルは自動的に保存されないようです。ファイルの編集は本体の方から行った方が確実でしょう。
最後に上記シンボリックリンクをまとめて行うバッチファイルをつけておきます。
@echo off
for %%i in (*.mq5) do (mklink %%~ni.mq4 %%i)