MT4他業者の価格を表示させる。/共有メモリの活用。

FxPro が GBPJPY を何円で取引しているのか?を FXDD の MT4 上で知ることは…当然出来ない訳ですが、それを無理やりプログラム上で知るにはどうすればよいのか?…という話です。


それが何の役に立つのか?は不明で、業者間裁定が成り立つかどうかは分かりませんし、いくつかの業者の価格を参照することで、システム的な異常を検出できるかどうかも分かりません。ただ、ツールとして実現しておけば、いつか活用できる日がくるかな??と思っただけです。


実現手段としては、
(1) FxPro の MT4 が特定の場所にファイルとして価格を書き出す。
(2) FXDD の MT4 がそのファイルを読み込む。
というのが簡単そうです。
MQL4 標準の関数では、experts\files フォルダ以下にしか書き込めないので、ジャンクションでフォルダを共有することで実現できますし、WindowsAPI を直接使えば任意の場所のファイルが読み書きできます。(参考:http://articles.mql4.com/720)



でも、どうせファイルでやり取りするなら、それをメモリ上で済ませてしまった方が楽なので、試しに共有メモリでやってみました。

↑それぞれの MT4 の Tick が更新されるタイミングでしか価格は反映されませんが、一応、FxPro の価格が FXDD の MT4 上で取得できています。サンプルはこちらからダウンロードできます。


共有メモリを実現する MemMap.dll の使い方は、まず関数の宣言をしておいて、

#import "MemMap.dll"
string SetMemString(string tag,string msg);
string GetMemString(string tag);
#import


書き込み側は、

SetMemString("ファイル名","文字列データ");

読込み側は、

string data = GetMemString("ファイル名");

するだけです。メモリ上に作られたファイルのようなものは、それを作成した MemMap.dll がアンロード(DLL_PROCESS_DETACH)される時点で自動消去されるので、ファイル共有するよりも管理がずっと楽だと思います。