fc2ブログ

Dynamic Data Exchange(DDE)通信

Dynamic Data Exchange(DDE)通信は、Windows上でソフトウェア同士がデータをやり取りする仕組みです。ある一つのデータを特定するのに、3つのキーワード(住所のようなものだと考えてください)が必要になります。その3つとは、Service、Topic、Itemです(住所に置き換えれば県、市、町のようなものです)。この3つが分かれば、ある1つのデータが取得できることになります。
スポンサーリンク
例えば、ExcelをServerと考えて、Service="Excel"、Topic="Sheet1"、Item="R1C1"などと指定すると、ExcelシートでアクティブになっているブックのSheet1シートのA1セルの値が取得できるわけです。なお、ServiceはApplicationとも呼ばれることがあります。また、株価データの例だと、Service="RSS"、Topic="8411.T"、Item="現在値"と指定すると、みずほFGの現在値が取得できます。

さて、ここで少し話題が変わり、今度は、Clientのデータの受け取り方について説明します。DDE通信を用いて、ServerからClientがデータを受け取る方式には2種類あります。その2種類とは、Cold LinkとHot Linkと呼ばれるものです。

Cold Linkは簡単で、Service、Topic、Itemの3つを指定して、Serverにリクエスト(要求)を出すと、その時点でServerが保持している値がレスポンス(応答)として、一度だけClientに返ります。Cold Linkは、要求-応答系、あるいは、メソッド呼び出しのような感覚でClientがデータを取得します。

一方、Hot Linkは、Service、Topic、Itemの3つを指定するところまではCold Linkと同じですが、ある時点(Start)からClientが中止(Stop)するまで、Serverが保持している値に変更があった場合に、Clientにデータが通知されます。つまり、3回変更があれば、Clientには3回通知されますし、変更がなければ、通知されません。

このCold LinkとHot Linkはどのように使い分ければよいでしょうか。例えば、前日終値はCold LinkとHot Linkのどちらで取得した方がよいでしょうか。前日終値の場合は、Cold Linkで取得した方が良いです。なぜなら、前日終値は、一度だけ取得すれば、用が足りるからです。また、Hot Linkにしても変更がおこなれないため、通知はされません。

では、株価の現在値はどうでしょうか。こちらは、Hot Linkで取得した方がよいでしょう。なぜなら、現在値はザラ場中、次々と値が変わり、そのたびに最新の値が取得できるからです。Cold Linkで1秒に1回、現在値を取得する、という方法も考えられますが、流動性が低く、現在値が数10分に1回しか変更が起こらない場合には、とても非効率です。逆に、頻繁に取引されて1秒に何十回と現在値が変わった場合は、データを取りこぼしてしまいます。リアルタイムデータ取得の観点からは、変更があった時だけ、通知されるという機能は、とても効率の良い仕組みなのです。Cold LinkとHot Linkの使い分けをまとめると、ザラ場中に変更がないデータはCold Link、変更がある場合はHot Linkをそれぞれ使うと考えれば間違いないでしょう。

DDE通信には、他にも機能がありますが、ここでは、株価データのリアルタイム取得が目的ですので、そこに焦点を絞って説明を行いました。あまりピンとこなかったという方は、この後出てくるソースコードを読んでみて、理解を深めてみてください。

検索ワード:Dynamic Data Exchange(DDE)、Cold Link、Hot Link、楽天RSS
スポンサーリンク
<<楽天RSS(Realtime Spread Sheet)の特徴 | ホーム | リアルタイム株価データの取得の仕組み>>
コメント(0)
コメントの投稿
トラックバック(0)