3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windowsのシンボリックリンクを使ってMT4とMT5のデータフォルダを共通化する

Posted at

はじめに

[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を作成することができます。

ただし、メタエディタの仕様か、リンクの方から開いて編集したファイルは自動的に保存されないようです。ファイルの編集は本体の方から行った方が確実でしょう。

最後に上記シンボリックリンクをまとめて行うバッチファイルをつけておきます。

mq4link.bat
@echo off
for %%i in (*.mq5) do (mklink %%~ni.mq4 %%i)
3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?