Softgate Limited

株式会社ソフトゲート コーポレートブログ

MT4 のデータフォルダについて

MT4 のアップデート祭りは依然として続いており、現在はビルド 610 がリリースされています。

さて、MT4 ビルド 600 からデータフォルダの場所と構造が変わったことは、普段から MT4 をお使いの方でしたら、既にご存じでしょう。

ここで言うデータフォルダとは、MT4 が EA やヒストリ/バックテストなどのデータファイルを保存するフォルダのことで、以前は MT4 をインストールしたフォルダがそのままデータフォルダになっていました。

f:id:Softgate:20140217193214p:plain

これに対して、ビルド 600 からは Program Files 以下に MT4 をインストールしたときの UAC による影響を避けるため、および複数ユーザが MT4 を独立して利用できるように、

C:\Users\ユーザ名\AppData\Roaming\MetaQuotes\Terminal\420DC4...36F9

のような別の場所をデータフォルダとして利用します。

具体的には、SHGetFolderPath(CSIDL_APPDATA) で取得したパスに、"MetaQuotes\Terminal" および MT4 のインストール場所ごとに異なる "420DC4...35F9" のような文字列をつなげたものが、データフォルダのパスとなります。

MT4 がインストールされた場所によって、末尾の 16 進数の部分は異なるので、具体的なデータフォルダのパスは、MT4 の【ファイル > データフォルダを開く】メニューから確認すると良いでしょう。

f:id:Softgate:20140217193555p:plain

便宜上、この記事においては、MT4 インストールフォルダ以外の場所に作られるデータフォルダを分離データフォルダと呼ぶことにします。

今回の記事ではこうした MT4 のデータフォルダに関して、少し掘り下げてみたいと思います。

データフォルダの位置

ビルド 600 以降であれば、 必ず分離データフォルダが利用されるかと言えば、そうでもありません。

第一チェック

まず、MT4 は

  • MT4 インストールフォルダがリムーバブルディスク上にあるか
  • コマンドラインオプションで /portable が指定されているか

の二点をチェックし、どちらかが成立すれば、従来通り MT4 インストールフォルダをデータフォルダとして利用します。

ただし、この場合も、後述するように、データフォルダの構造自体は新しい構造になる点に注意してください。

つまり、/portable を指定したからと言って、完全に従来通りの環境で MT4 を利用できるわけではありません。

第二チェック

第一チェックでどちらの条件も成立しなかった場合は、第二チェックとしてさらに三つの条件を確認します:

  • ターミナルサービスを実行中である(典型的な例が VPS のリモートデスクトップです)
  • UAC が有効である
  • MT4 インストールフォルダに書き込める権限を持っていない

これらのいずれかの条件が成立してはじめて、MT4 は分離データフォルダを使用します。

ちなみに、XP や Windows 2003 サーバでは UAC が無効になっている(というか そもそも UAC が存在しない)ので、多くの場合は MT4 インストールフォルダがデータフォルダになるわけです。

データフォルダの構造

データフォルダの構造に関しては、そんなに大規模な変更ではないというか、まあ見れば分かると思うので、簡単に説明するに留めます。

まず、従来は、MT4 インストールフォルダに experts というフォルダがあり、その下に indicators, libraries, scripts といったサブフォルダがぶら下がる形になっていました。

f:id:Softgate:20140217193411p:plain

個人的には、EA の EX4 / MQ4 と他の scripts などのサブフォルダが同じレベルに混在する、この従来のデータフォルダ構造が嫌いでした。

これに対して、ビルド 600 以降のデータフォルダでは、MQL4 というフォルダが作られ、Experts フォルダはその下に移動しています。

また、 Indicators, Libraries, Scripts なども Experts と同列の位置に移動しています。

f:id:Softgate:20140217193430p:plain

こうした違いから、以前のデータフォルダの構造を前提として作られた EA や DLL は、ビルド 600 以降動作しなくなっているのでご注意ください。