コンピュータ投資基礎ノウハウ、エクセルVBA「発注画面の操作」
発注画面がホームページとして公開されている場合、その発注画面をエクセルから自動操作する方法。
一番下のエクセルアイコン(コードサンプル)でダウンロードしたエクセルブックを開くと下図のような表示が開きます。
セルB1からセルB3は注文画面にアクセスするためのIDとパスワードを入力して、さらにセルB5以下のB列で発注条件を選択して、「IE操作」ボタンをクリックすることで証券会社の注文ページに情報を入力できます。
セルE1の指定でサンプリコードのどこまで実施するかを選べるようにしてありますので、ここでサンプルコードの任意の地点までを実行してその状態を確かめることができます。
最終はミスを避けるために「発注」のひとつ前の確認までとしています。
この確認画面に取引PASSを入力して送信することで、注文が実施されます。
岡三オンライン証券のRSSでは発注までが準備されていますが、楽天RSSはリアルタイムデータの取得に限定されているためにこうしたプログラムからの発注操作が必要になります。
これは証券会社(ここでは楽天証券)のホームページ(便宜上軽く開く携帯ページ)をプログラムから開いてそれをプログラムから操作(入力や実行など)して手作業と同じ手順で注文します。
直接証券会社のプログラムに介入するわけではないので実施速度はコンピュータでの方法としては極めて遅いのですが、手作業に比べると相当早いという印象を持たれると思います。
ホームページにはフォームと言う入力送信の仕組みがあります。
よくある会員登録やホームページからのメッセージやメール送信はこのフォームのデータをサーバー上のプログラムに渡して、そこから必要な処理を行うわけですが、証券会社の発注画面もこのような仕組みのものが多いのでこれを操作して発注処理ができるわけです。
<Form></Form>タグで囲まれた部分の<input>タグの情報は名称とデータという形でサーバーに渡されますが、このデータの部分を入力する方法は広くネット上で紹介されています。
方法もいくつかありますが、ここではそのうちの代表的な方法を記述しています。
楽天証券のケータイ用の発注画面を開いてID&パスワードを入力して画面を送り、ログインした状態の注文画面を開いて必要な情報を記述して送信するという作業をVBAから行っています。
これはスクレイピングと呼ばれる方法ですが、マーケットスピードの項で述べたようにスクレイピングにはウインドウズAPIを使って座標を指定して入力してゆくと言う方法もありますが、ここではホームページのソース画面を直接操作する(たぶん一般的と思われる)ポストスクレイピングと言う方法をとっています。
モジュール1には一旦開いたIE(インターネット・エクスプローラ)を閉じるための命令文と(「IEを閉じる」ボタン)、スクレイピング操作コードを簡略にするための自作関数が書いてあります。
モジュール2には参考用に、開いたホームページを読み取る命令文を記述しています。
これは「IE内容を取得表示」と言うボタンで呼び出せます。
モジュール3には本編の発注操作のサンプルを記述しています。
サンプル記述の発注命令文の
'IEの画面の大きさを指定し、IEを開く
With objIE
.Width = 300 '大きさ
.Height = 800
.Left = 700 '表示位置
.Top = 0
.Visible = True
.navigate https://mobile.rakuten-sec.co.jp/
End With
の部分がIEを開く命令文なのですが、このうちの、
「.Visible = True」を「.Visible = False」に変えると
IEの画面を隠したままですべての命令を実行できます。
この方法は証券会社から保証されている方法ではありません。
証券会社側の都合で本の少し注文ページのソースの内容や形式を変更しただけで、まったく注文できなくなったり思わぬご発注が起きる可能性もあります。
また東証大証統合時のように、電子文化の進歩にともなって取引所自体の発注仕様が改変されることも今後ありえます。
このためこのページのサンプルからの動作もある日突然おかしなうごきになったり、場合によってはケータイ発注画面自体が時代の要請で消滅することもありえます。
そのような時には新仕様にあわせてその都度プログラムを組み直さなければなりません。
プログラミングによる自動売買にはこうしたイタチごっこは常につきものです。
そうした理由からもできるだけいろんな方法を学習しておくことが必要です。
DL倶楽部の「自動売買用VBAチップ ファイル一覧」などのリンクページから各種研究用・分析用のエクセルファイルをダウンロードできます。
日経平均 | 31857.62(-14.90) |
TOPIX | 2323.39(-22.12) |
JASDAQ | 164.28(-0.47) |
ダウ平均 | 33507.50(-158.84) |
S&P500 | 4288.05(-11.65) |
NASDAQ | 13219.32(+18.04) |
ドル/円 | 144.642(+0.172) |
FTSE100 | 7608.08(+6.23) |
ハンセン | 17809.66(+436.63) |
ただいま、休日メンテナンス中です。
※一部に不具合が起こることがあります。