|
カテゴリ:「VB.NETで自動売買」入門
今回は保有銘柄一覧取得の続きです。
前回が途中で終わっているので、今回はなるべく早く投稿した方が良いと思い 3連休中にアップする事にしていました。 <その7>を読んでない方は先にお読み下さい。 これから実装するソースコードは、Webサービスの応答XMLを元に作成した DataSetからHoyuKabuGridというDataGridViewにデータを格納する事でした。 「保有株一覧取得」ボタンをクリックする度にデータを格納していたら 件数がどんどん増えていきます。 もしかしたら前回ボタンを押した時から今回押す時までに保有銘柄を売っていたら 逆にデータが減る可能性もあります。 なので、ボタンがクリックされたらまずDataGridViewのデータをクリアする事から 始めないといけません。こう書きます。 '最初にDataGridViewをクリアする HoyuKabuGrid.Rows.Clear() 「Rows」というプロパティは、DataGridViewの全行の集まり(コレクション)を表します。 それに対するClear()メソッドは、全ての行を削除します。 次はいよいよDataSetからの項目移送です。 設定する項目は証券コード、取得単価、保有数量でした。 取得単価と保有数量はhoyukabuTategyokuItemテーブルに。 一方証券コードはmeigaraテーブルに入っています。 どちらも保有する銘柄の数だけデータが存在し、両テーブルの件数が違うという事は 絶対にありません。なので、どちらかのテーブルの件数を基準にして、何行目を 指しているかを合わせて項目移送して行けば良いです。 基準とするテーブルはどちらのテーブルでも構いません。今回は証券コードが 入っているmeigaraテーブルを元にループする事にします。 全行をループする時には「For~Each」という構文で書くとシンプルなのですが、 ループ内で「今何行目を処理しているか」を取得するには通常のFor文を使って 回す方が良いのでそちらを使います。このように書きます。 '保有銘柄の数だけループする For i As Integer = 0 To ds.Tables("meigara").Rows.Count - 1 Next 1行目の最後まで打ってEnterを押すと「Next」は勝手にコーディングされるので 活用して下さい。それ以外のコードも、入力途中で候補が出ます。 CTRL+スペースでも出せますので、入力速度アップと間違い防止のため、是非 補完機能(インテリセンス)を使われる事をお勧めします。 この文は、iという変数を0から「meigaraテーブルの行数-1」まで回すという意味です。 なぜ-1かというと、.NETの配列の添え字は0から始まるからです。 例えばデータが5行だと「0行目から4行目」という風に表されます。 なので、n行の時0からn-1までループするためにこう書いています。 このループの中で、3つの項目を移送していきます。 HoyuKabuGridに直接移送しても良いのですが、1行が長くなると何をしているか 後で読みにくくなるので、一旦各DataTableの該当行(DataRow)を取得してから 項目移送する事にします。For文の中に2行追加します。 Dim row1 As DataRow = ds.Tables("meigara").Rows(i) Dim row2 As DataRow = ds.Tables("hoyukabuTategyokuItem").Rows(i) 「row1」や「row2」は変数名なので何でも構いません。 DataSet「ds」の「Tables」プロパティはDataTableを表し「Rows」プロパティは そのテーブルの全行を表すんでした。そのi番目というカッコを付ける事によって ある1行を表す事になります。型はDataRowです。 両テーブルとも同じ添え字を使っているので、同じ保有銘柄を指しています。 あとはrow1とrow2の3項目をHoyuKabuGridに移送すれば終わりです。 HoyuKabuGridは空なので、ループを回す毎に行を追加しなければなりません。 行を追加するためにはDataGridViewの「Rows」プロパティにあるAdd()メソッドを 使うのですが、その方法はいくつものバリエーションがあります。 「シグニチャ(シグネチャ)」というのですが、ご存じない方は無視して下さい。 今回は、全く引数の無いAdd()メソッドを使用し、空の新規行を追加した上で その行の項目にデータを移送するという方法を取ります。 まずはHoyuKabuGridへの行の追加です。 HoyuKabuGrid.Rows.Add() そして3項目の移送はこうなります。 HoyuKabuGrid.Rows(i).Cells("shokenCode").Value = row1.Item("shokenCode") HoyuKabuGrid.Rows(i).Cells("tanka").Value = row2.Item("tanka") HoyuKabuGrid.Rows(i).Cells("suryo").Value = row2.Item("suryo") 例えば1行目は、HoyuKabuGridのi行目(今追加した行)の「shokenCode」という セルの値に、row1の列「shokenCode」を移送するという意味です。 残り2つの項目は移送元のDataRowが違うのでrow2になっている事にご注意下さい。 これで保有株一覧を画面に表示する事が出来ます! でも、せっかくですから最後に結果メッセージをダイアログ表示します。 これは何度もやってますので皆さん大丈夫ですね? MessageBox.Show(ds.Tables("hoyukabuTategyokuListResponse").Rows(0).Item("message")) では早速実行し、ログイン後に「保有株一覧取得」をクリックしてみて下さい。 どうですか?保有株の一覧がDataGridViewに表示されましたか? HoyuKabuList_Click()メソッドは最終的に以下のようになりました。 これで私が予定していた「クリック証券のWebサービスで発注する」編は終わりました。 今は次の予定もありません。 「楽天RSSでリアルタイム情報を取得する」とのペアにより、自動売買プログラムを 作る為にどんな事をするのか全く分からなかった方のとっかかりにはなったのでは 無いかと自負しています。 ところがご紹介した内容は本当に基礎の基礎です。 これらの内容を元にご自分でプログラムの勉強をして、本当に自動売買プログラムが 開発出来るスキルを身に付けて欲しいと思います。 ところで、恐らくこのブログをご覧の方の中には、実現方法が分からなかったり 解決出来ないバグが出るなど、色々な事で悩まれている方がいらっしゃるのでは 無いかと推測します。 私が答えられる事であれば、時間の許す限り回答していきたいと思いますので、 遠慮なくブログ上にコメント頂けたらと思います。 また「こんな内容で入門編を連載して欲しい」などの要望もお待ちしております。 私の気力があれば連載させて頂くかも知れません(笑)。 宜しくお願いします。 お気に入りの記事を「いいね!」で応援しよう
Last updated
Jan 12, 2009 02:35:24 AM
コメント(0) | コメントを書く
[「VB.NETで自動売買」入門] カテゴリの最新記事
|