2012年01月24日(火)
コピートレードのプログラミング(2) [MQL4]
前回は、コピートレードの簡単な仕組みとして、ポジション情報をファイルを経由して渡すという方法を紹介しました。
通常のWindowsのプログラムでは、ファイルを読み書きするフォルダの場所は、割と自由に変えられるのですが、MT4、MT5の場合、読み書きができるフォルダが決まっているという制約がありました。
その問題を解決する方法はいくつかあります。
1.Windows APIを利用する方法
EAで読み書きできるフォルダが決まっているのは、MQL4、MQL5の組込み関数を使う場合です。組込み関数ではなく、WindowsのAPIを直接使うことで、読み書きするファイルの位置を同じフォルダに設定することができます。以下のサイトにその方法が説明されています。
File Operations via WinAPI
ただ、見てもらうとわかるように、結構複雑です。手軽にプログラムするにはちょっと敷居が高いかもしれません。
2.MT4のインストール先を変える方法
コピー元のMT4では、インストールしたフォルダの下のexperts¥files の下であればファイルの読み書きができます。そこで、コピー先のMT4をコピー元のMT4のexperts¥filesの下にインストールするという方法もあります。experts¥filesの下であれば、サブフォルダの階層が深くてもファイルの読み書きは可能です。
この方法を説明してあるのは以下のサイトです。
How to Copy Trading from MetaTrader 5 to MetaTrader 4
このサイトは、本記事の内容と同じコピートレードについての解説です。手っ取り早くやりたい人はこちらを参考にしてください。この方法では、普通にMQL4、MQL5でプログラムできます。一つ難点なのは、サブフォルダの階層が深くなるので、ファイルの位置を正確に記述しなくてはいけないということでしょう。
3.シンボリックリンクを利用する方法
もう一つの方法は、あるファイルを別の場所からでも見えるようにリンクを張るという方法です。Windowsのバージョンによってやり方が変わるので、詳しくは以下のサイトをご参照ください。
ジャンクション機能を使ってフォルダをマウントする
以下に、Windows Vista、Windows 7で使えるシンボリックリンクという方法を紹介します。
これは、MT4のインストール先を変えずに、MQL4のプログラムだけでコピートレードが実現できます。ただ、最初の一回だけですが、コマンドプロンプトからコマンドを実行しないといけません。
ここでは、簡単のため、コピー元のMT4が「C:¥MT41」、コピー先のMT4が「C:¥MT42」にインストールされているものとします。
例えば、MT41のEAで作成されたファイルが「position.txt」とすると、そのファイルの場所をフルパスで表すと、C:¥MT41¥experts¥files¥position.txtとなります。
このファイルをMT42のデータフォルダからも見えるようにするには、まず、コマンドプロンプトを管理者権限で立ち上げます。(コマンドプロンプトはWindowsのスタートメニューのアクセサリのグループに入っています。そこで右クリックするとサブメニューが現れるので、ここで「管理者として実行」を押します)
そして、下図のように「cd」というコマンドで、MT42のデータフォルダに移動します。
次に「mklink」というコマンドでシンボリックリンクを張ります。mklink はリンク名とそのリンクが参照するフルパスのファイル名という二つの引数を取ります。
ここでは、C:¥MT41¥experts¥files¥position.txt というファイルをposition.txt というリンク名で参照できるようにするために、下図のようにコマンドを実行します。
「シンボリックリンクが作成されました」と表示されればOKです。
これで、MT42のデータフォルダにposition.txt というリンクが作成されます。このリンクはファイルのように扱うことができるので、MT42のデータとしてEAから読み書きすることができるのです。
これで、同じposition.txt というファイルがMT41からもMT42からも読み書きできるようになりました。
次回は、どういうデータ形式でポジション情報を渡せばよいかについて考えてみます。
Posted at 17時04分