ソフト名 MT4 DDE Server
概要 MT4のインジケーターからDDE送信を行うDLL
登録名 MT4DDESV.zip
圧縮形式 ZIP
作成者 さいとさんにぃまる
ホームページ 最新版のダウンロードや他のソフトについては当サイトのトップページをご覧ください。
ご意見、ご質問、不具合等については掲示板にて受け付けています。
動作環境 Windows 10、MetaTrader Version:4.00 (MT4)
最終更新日 2018/03/29
バージョン 2.3.0.0
種別 フリーソフト

使用許諾および免責事項

ソフトウェアをご使用される場合、以下の使用許諾および免責事項に対してご了承いただけたものとします。

ソフトウェアの説明

MT4のインジケーターからDDE送信をする時に使用するDLLです。

メソッド「SendString」の引数にサーバー名、トピック名、アイテム名、送信したい文字列を指定して呼び出すだけです。

使い方の例として、1台のパソコンに複数のMT4(複数業者のMT4)がインストールされている場合、各MT4ごとに異なるサーバー名を指定(例えば業者名を指定)して、Excelに各業者のデータを一覧表示することが可能です。(後述の「MT4複数起動時の例」を参照)


導入方法(インストール)

ダウンロードしたZIPファイルを適当なフォルダに展開(解凍)して、その中にあるDLL「MT4DDESV.dll」を「Libraries」フォルダに配置してください。

  1. MT4のメニュー「ファイル」から「データフォルダを開く」をクリック。
  2. 「MQL4」フォルダ内にある「Libraries」フォルダにDLL「MT4DDESV.dll」を配置。

補足:ZIPファイルは当サイトのトップページVectorの作者ページからダウンロードできます。


削除方法(アンインストール)

上記インストール時に配置したDLL「MT4DDESV.dll」を削除してください。
当DLLはレジストリを使用していません。

補足:DLLはMT4を終了させてから削除することをおすすめします。


使い方(当DLL呼び出し側:インジケーターの修正)

まず、インジケーターに以下の宣言を追加します。

//インポートするDLLの宣言 #import "MT4DDESV.dll" void SendString(string AServer,string ATopic,string AItem,string AData); #import

次に、DDE送信したいところでメソッドを呼び出します。
メソッド「SendString」の呼び出し方は
 SendString(サーバー名、トピック名、アイテム名、送信したい文字列);
です。応答値はありません。

//DDE送信時の記述例 SendString("ServerName","TopicName","ItemName",Symbol()+"の売値="+DoubleToStr(Bid,Digits()));

修正したら保存し、インジケーターをチャートに挿入してください。
インジケーターをチャートに挿入する際は「DLLの使用を許可する」にチェックを入れてください。

各名称の命名について

サーバー名、トピック名、アイテム名は半角英数字や全角文字を組み合わせて自由に命名できますが以下の制約があります。

  1. サーバー名は1つのMT4に対して1種類しか指定できません。
    複数のチャート、複数のインジケーターで使用する場合も1種類となります。
    逆に、MT4を複数起動して使用する場合はMT4ごとに異なるサーバー名を指定してください。
    異なるMT4で同じサーバー名を使用した場合、どちらのデータが取得されるか不明です。

    バージョン2.3.0.0以降の仕様変更について
    サーバー名は上書きするように変更しました。
    前のバージョンまでは、サーバー名を変更してインジケーターを保存した場合、当DLLを開放(初期化)するためにMT4を再起動する必要がありましたが、再起動しなくても変更後のサーバー名でDDE通信できるようになりました。
  2. あるトピック名で使用したアイテム名は別のトピック名では指定できません。
    例えば、
    SendString("FX業者A","USDJPY","Bid", DoubleToStr(Bid,Digits()));と
    SendString("FX業者A","GBPJPY","Bid", DoubleToStr(Bid,Digits()));は
    トピック名が異なるので同じアイテム名「Bid」を指定できません。
    SendString("FX業者A","GBPJPY","Bid2", DoubleToStr(Bid,Digits()));
    のように片方のアイテム名を変更してください。

    バージョン2.1.0.0にて上記制約は解除されました。
  3. 半角記号や空白については使用しないほうが良いと思います。
    また、全角文字についても使用できないものがあるかもしれません。
    その場合は無理して使用せず、「使えるものから使う」の気持ちでお願いします。

※上記「2.」の制約はDelphiのコンポーネントのソースを修正することで解除できると思いますが、ソースを入手するには有償版のDelphiが必要で、これが結構お高い…(^_^;)。FXで稼げたら購入して対応しようと思います。(いつになるやら…) →Delphi7のソースを流用して対応しました。


サンプル(2018/03/29更新)

当DLLを組み込んだサンプルファイルを添付しています。参考にしてください。

320_DDE_Sample.mq4
以下の口座情報をDDE送信するサンプルです。
・口座残高(AccountBalance)
・必要証拠金(AccountMargin)
・余剰証拠金(AccountFreeMargin)
・有効証拠金(AccountEquity)
320_DDE_Sample_CN.mq4
クリックした位置の価格で通知するインジケーター「320_ClickNotice」を流用してDDE送信を追加したサンプルです。ついでにディスプレイのスリープ解除機能も有効にしています。
320_DDE_Sample_ZN.mq4
ZigZagの山や谷ができたときに通知するインジケーター「320_ZigZagNotice」を流用してDDE送信を追加したサンプルです。ついでにディスプレイのスリープ解除機能も有効にしています。

使い方(DDE送信された文字列を受信する側)

MT4の標準のDDEの使い方として、例えばExcelでドル円の売値を取得したい場合、
 =MT4|BID!USDJPY
のように記述しますが、当DLLを使用する場合はSendString関数の引数に合わせて
 =ServerNameTopicNameItemName
のように記述することで「送信したい文字列」の値を取得できます。

サーバー名、トピック名、アイテム名はSendString関数のパラメーターで指定した文字列を記述しますので、例えばインジケーターに
 SendString("FX業者A", "アカウント", "口座残高", DoubleToString(AccountBalance(),0));
と記述している場合は、Excelには
 =FX業者A|アカウント!口座残高
と記述することになります。

バージョン2.3.0.0以降より
トピック名とアイテム名にも「数字だけ」または「先頭が数字」の名称を使用できるようにしました。
ただし、その場合、Excelではシングルクォーテーション「'」で括る必要があるようです。
例:サーバー名が「01Server」、トピック名が「00123456」、アイテム名が「1A2B」の場合
 ='01Server'|'00123456'!'1A2B'

補足:縦棒「|」と感嘆符「!」は見やすくするために全角で記述してますが、実際は半角文字です。


MT4複数起動時の例:各FX業者の口座残高を一覧表示および合算する

各FX業者のMT4を起動し、それぞれのMT4で実行するインジケーターに異なるサーバー名を指定して各FX業者の口座残高を一覧表示および合算する例です。

FX業者Aのインジケーターには
 SendString("FX業者A", "アカウント", "口座残高", DoubleToString(AccountBalance(),0));
FX業者Bのインジケーターには
 SendString("FX業者B", "アカウント", "口座残高", DoubleToString(AccountBalance(),0));
と記述します。

ExcelのセルA1に
 =FX業者A|アカウント!口座残高
ExcelのセルA2に
 =FX業者B|アカウント!口座残高
ExcelのセルA3に
 =SUM(A1:A2)
と記述します。

これで、ExcelのセルA1にはFX業者Aの口座残高が、セルA2にはFX業者Bの口座残高が、セルA3には口座残高の合算値が表示されます。


ソースについて

最低限必要なソースのみ添付されています。リソースファイル(.res)などは添付されていません。
※バージョン2.1.0.0にて追記
このバージョンで流用した「Delphi7」のコンポーネントソースは配布不可なので代わりに改造箇所説明ファイル「DdeMan.pasの改造箇所について.txt」を添付しています。
そのため、「Embarcadero Delphi 10.1 Berlin (無償版)」を使用している場合、添付の最新ソースのみではコンパイルできなくなりました。
また、有償版の場合でも対象ソースの内容が異なると思われるので、説明どおりに改造しても正常にコンパイルできるかわかりません。(「★制約解除には必須」と記述した箇所を反映させればOKかも?)
とりあえず、当面は旧版(バージョン2.0.0.0)のソースも添付しておきます。


更新履歴

日付 バージョン 内容
2017/04/19 1.0.0.0 初リリース
2017/07/19 2.0.0.0 1.パラメーターに、サーバー名、トピック名、アイテム名を追加しました。
2.MT4が強制終了する不具合を修正しました。
3.その他、ソース内のコメントなどを修正しました。
上記修正に伴い、本ページの記述を修正しました。
なお、バージョンアップに伴いバージョン「1.0.0.0」との互換性はありません。
2017/10/07 2.1.0.0 1.異なるトピック名で同じアイテム名が使用できない制約を解除しました。
上記修正に伴い、本ページの記述を修正しました。
2017/10/18 2.1.0.0 Vector様への登録に向けて、ソースへのコメント追加&再コンパイルしたのでアップロードし直しました。
※ロジック修正は無いのでバージョンに変更なし。
2017/12/05 2.2.0.0 1.DDE通信が正しく行われない不具合に対応しました。
※Delphi 7のソースに対する修正なので、修正内容は「DdeMan.pasの改造箇所について.txt」を参照してください。
2018/01/11 2.3.0.0 1.トピック名とアイテム名にも「数字だけ」または「先頭が数字」の名称を使用できるように対応しました。
2.サーバー名は上書きするように変更しました。
※Delphi 7のソースも修正しています。修正内容は「DdeMan.pasの改造箇所について.txt」を参照してください。
2018/03/29 2.3.0.0 添付しているサンプルを変更し、各サンプルの説明を追記しました。
※ロジック修正は無いのでバージョンに変更なし。