MetaTrader4をDDEクライアントにする。

以前の日記 ( MetaTrader4のDDE機能拡張 ) では、MetaTrader4 のインジケータを DDE サーバにすることで、インジケータのシグナルや残高をリアルタイムに Excel に送る方法を紹介しました。
その日記に

Tak 2010/02/03 11:27
MT4側がクライアントになることは可能でしょうか?

とコメントがありましたので、試しに MT4 を DDEクライアントにしてみました。



↑上図は、エクセルの B2 セルの値を MT4 側で文字列として受け取っているところです。
エクセルは ( 最新版はどうか知りませんが..) 起動しているだけで DDE サーバになり、MT4 は Tick更新毎に セルの値を見に行くカタチになります。



↑設定は、エクセルファイルのパス、シート名、セル番号を指定するだけです。日本語や半角スペースを含むと動作しないかもしれません..。
今さっき作ったばかりで動作保証は全く無いのですが、これでよければ以下をお試しください。
http://ux.getuploader.com/fai_fx/download/76/GetDDE.zip
# 余分なDLL を使わないようにしました。13:21


1つ注意して欲しいのは、エクセルの対象セルを編集中は MT4 が値(文字列)を取得できません。
その場合、 error を含む文字列が返るので、error の有無を確認して必ずエラー処理を実装してください。xls ファイルが開かれていなくてもエラーになります。適当な xls ファイルでいろいろ試すと分かると思います。


(正直なところ、わざわざDDE経由にするよりも、Excelからファイル出力して、それを EA が読み取る方が単純で分かりやすい気がします...^^;;;