会社員KNIGHTの趣味三昧(卓球・盆太鼓・色々!)

会社員KNIGHTの趣味三昧(卓球・盆太鼓・色々!)

PR

Calendar

Category

カテゴリ未分類

(0)

卓球

(1195)

盆太鼓・盆踊り

(407)

トイドローン

(21)

その他

(334)

■■■■■■↓以下は凍結カテゴリー↓■■■■■■

(0)

KATS(自動売買プログラム)

(87)

「VB.NETで自動売買」入門

(24)

本日の取引

(1292)

デイトレ結果(勝ち)

(365)

デイトレ結果(負け)

(591)

夜間取引結果

(15)

今週の取引

(480)

今月の取引

(103)

明日の監視銘柄

(54)

株関連

(55)

草野球

(36)

Keyword Search

▼キーワード検索

Comments

accelwin@ Re[4]:【卓球】シェイクのラケット反転について(11/23) KNIGHTさんへ ご返信ありがとうございます…
KNIGHT@ Re[1]:【卓球】シェイクのラケット反転について(11/23) accelwinさんへ ブログへのコメント、どう…
accelwin@ Re:【卓球】シェイクのラケット反転について(11/23) 61歳でカットマンに挑戦し、2カ月目に突…
KNIGHT@ Re[1]:単身赴任を終え兵庫に戻ります(06/28) Tomohiro Takahashiさんへ コメント有難う…
Tomohiro Takahashi@ Re:単身赴任を終え兵庫に戻ります(06/28) お疲れ様でした。そのうち、私も頑張って…
KNIGHT@ Re[1]:第1回 日中杯 SpinOnline(WSS団体戦)(04/14) fukufuku1789さんへ いえいえ。むしろ私が…
fukufuku1789 @ Re:第1回 日中杯 SpinOnline(WSS団体戦)(04/14) 一緒に試合に出てくださりありがとうござ…
KNIGHT@ Re[1]:第15回 朝霧オープン卓球大会(チームマッチ)(01/21) fukufuku1789さんへ お疲れ様でした。今回…
fukufuku1789 @ Re:第15回 朝霧オープン卓球大会(チームマッチ)(01/21) 惜しい試合が多かったですね。 また卓球し…
KNIGHT@ Re[3]:2023年度台東区オープン年代別後期団体戦(12/10) マニャさんへ コメントどうも有難うござい…
Apr 21, 2008
XML
今日は本当に、Advice()形式の第一回です。

前回、Request()形式で継続的にリアルタイムデータを取得する方法として、Do~Loopなどの
繰り返し処理やタイマーイベントをご紹介しました。取得間隔は例として5秒間隔でした。
一定間隔で値を取得したい場合はこの方法をお勧めします。

ですがそうではない場合もあります。
ある時は1秒間の間に数回株価が変動したり、あるいは別のタイミングでは暫く株価が
動かなかったり。その変化の頻度は一定ではなく波があります。
一定間隔だと細かい変化が全く読み取れなかったり、逆に全く変化が無いのに無駄に取得したりする
可能性が出てきます。それを克服するためにAdvice()形式があります。


自分が要求しないと取得出来ませんし、要求したら前回と全く同じ値でも取得処理が流れます。
それに対しAdvice()形式は「この情報に更新があれば教えて下さいね」と頼んでおく形式です。
値に更新があった時に、イベントハンドラに紐付けられたメソッドが自動的に呼び出されるので
そのメソッド内に「更新時の処理」を記述すれば良いという事になります。
自分で繰り返し処理を回す必要はありません。DDEクライアントに「もう監視は結構ですよ」と言うまで
変更がある度にイベンドハンドラに対するメソッドを呼び出してくれます。
Request()形式が能動的に値を取得するのに対し、Advice()形式は受動的です。

また、Advice()形式には何げに嬉しい特典が付いています。

前場が終わってから暫くすると(11:00過ぎ)、楽天RSSは一度停止します。
これは楽天証券のシステムの動きなのでそれをどうにかする事は出来ません。
楽天RSSが停止中、もしDDEクライアントのRequest()メソッドを呼び出すと例外が発生します。
なので、停止時間帯はRequest()メソッドは呼び出さないように注意する必要があります。


前場が終わった段階でMarketSpeedと楽天RSSを停止し、後場が開始する前に再起動されている

ないように制御する必要があります。
・・・もちろん、Connect()メソッドなどの他のメソッドに対してもレスポンスが返る事は無いので
例外が発生しますよ。

Advice()形式は情報に変更があった時に通知してもらうのですが、楽天RSSが停止中も
DDEクライアントのインスタンスが死ぬ訳ではありません。ただ「通知が来ない」だけで、



・・・前置きはこれぐらいにして、Advice()形式のサンプルプログラム作成を始めましょう。

「その5」で言った通り、プロジェクトや画面はRequest()形式で作成したものを使用しますので
まだ準備されていない方は宜しくお願いします。

まず最初に「現在値の監視を開始してね」という意味で 「取得」ボタンの隣に「監視」ボタンを
追加します
。ツールボックスからボタンをドラッグ&ドロップし、 プロパティの「Text(表示名)」と
「Name(オブジェクト)」の値を両方「監視」にします
(分からない方は「その1」からご覧下さい)。
そして、 監視ボタンをダブルクリックしてソースにメソッドを追加しましょう
このようになっていますか?

WS000029.JPG

上に見えているのはRequest()編で作ったメソッドの最後の部分です。
ここから、ソースコードをコピーします(笑)。
本当は同じソース中に同じようなコードが複数ある事は望ましくありません。
修正する時に2箇所を直さないといけませんし、修正忘れなどのミスでバグが混入する可能性も
高くなるからです。本来なら共通処理としてPrivateメソッドに切り出して、それぞれのメソッドが
その共通メソッドを呼ぶようにするなどする方が良いでしょう。
 ※読んでて意味の分からない方は、勉強されるか、無理なら読み飛ばして下さい


それはとにかく置いておいて、今回はコピーします。
コピーするのは最初から、銘柄名称を取得して画面に設定する所までです

WS000030.JPG

ここまでコピーすると「監視」ボタンを押しても「取得」ボタンと同様、銘柄コードと市場コードに
対する銘柄名称をRequest()形式で取得して画面に表示してくれます。
あとは現在値をAdvice()形式で取得すれば終わりです!!w

さて今回のメインです。
DDEクライアントにはStartAdvice()というメソッドがあります 。第一引数で指定したアイテム名の監視を
開始するメソッドです。インテリセンスを使って入力してみて下さい。

client.StartAdvise("現在値", 1, True, 60000)

第二引数と第三引数はRequest()メソッド同様、気にしないで下さい。
第四引数はタイムアウトまでの待ち時間です。

このメソッドを呼び出すと、現在値に変化がある度にイベントが発生します。
イベントとは「取得ボタンがクリックされた時」で解説したような「取得.Click」の事です。
今回の場合は、DDEクライアントのAdviceイベントが発生しますので、このイベントを受けて実行する
メソッドを用意する必要があります。
でも、取得_Click()メソッドの宣言の最後に記述されているように 「Handles 取得.Click」 などと
最初から記述しておく事は出来ません。
なぜならDDEクライアントのオブジェクトは実行された時に初めて生成されるもので、ボタンのような
静的なオブジェクトではなく動的なオブジェクトです。
なので、 オブジェクトを生成した後、自分で動的にイベントとメソッドとを紐付けてあげないと
いけないのです


・・・と、もう少し書こうと思っていたのですが、MarketSpeed7.1のダウロードが始まって
評価等が出来ないので今日はここまでにしたいと思います。。。





お気に入りの記事を「いいね!」で応援しよう

Last updated  Apr 21, 2008 10:28:47 PM
コメント(2) | コメントを書く


■コメント

お名前
タイトル
メッセージ
画像認証
上の画像で表示されている数字を入力して下さい。


利用規約 に同意してコメントを
※コメントに関するよくある質問は、 こちら をご確認ください。


素晴らしい!  
ttt さん
VBAしかかじったことのないので、とても参考になります。

(May 10, 2008 05:41:25 PM)

どうも有難うございます。  
ac_knight  さん
tttさん
>VBAしかかじったことのないので、とても参考になります。
-----
まだ連載途中の内容ですが評価して頂いて嬉しいです。
続きを書かないといけないとは思っているのですが最近ちょっと滞って
しまってました。Advice()編の続きを完成しないといけないですね(^-^;
tttさんにコメントを頂いて、また「書こう」という気持ちになりました。
有難うございます。
(May 11, 2008 07:29:59 AM)

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: