コンピュータ投資基礎ノウハウ、エクセルVBA「マーケットライブデータ取得」
エクセルから楽天マーケットスピードを起動し、セルにリアルタイム価格を表示する方法。
一番下のエクセルアイコン(コードサンプル)でダウンロードしたエクセルブックを開くとワークシート一枚のみの構成のブックなので下図のような表示が開きます。
これは楽天証券のマーケットスピードという株価表示アプリケーションと、そのデータをエクセルに直接表示させるためのRSS(リアルタイム スプレッドシート)というインターフェイスをエクセルから起動するためのプログラムです。
セルB4に楽天証券に登録したパスワードを入力すると楽天のシステムを起動し、10行の四本値セルにリアルタイム価格が表示されます。
楽天RSSはエクセルで株価などを元にした売買プログラム作成やチャート作成、価格表などの閲覧表作成などが行えるツールです。
一時話題になったジェイコム男さんなどもこのツールで複数の株価をエクセル上に一度にリアルタイム表示し、独特の直感で銘柄選びをしていたそうです。
楽天証券の他にもRSSを提供している証券会社はありますが、無料で使えるのは楽天証券だけなのでここでは楽天証券で説明しています。
なお、楽天マーケットスピードおよび楽天証券の紹介については楽天証券から了解がいただけなかったため、ここでは詳しく紹介・説明できませんが、各自インストールなどの詳細については楽天証券のサイトで簡単に確認することができると思いますのでそちらで確かめてください。
さて、自動売買を行うにはこうしたRSSなどのツールを自動的に開く必要があります。
そこでそのために必要なプログラム例を下段のコードサンプルに収めてあります。
これはいわゆるVBS(VBスクリプト)で書かれたものをVBAで実行するという形式であるために、コードについての説明は割愛しますが、多くの場合こうしたものはエクセルの外部にコードを書いたシートを置いてエクセルからそれを起動すると言う方法をとっているので、そうしたものをネットで見つけてコードの学習に役立ててもらうことができますが、ここではエクセルを開くとその開かれたエクセルから自動的にRSSを開いてデータをセルに表示させると言う方法を説明します。
そのために多く見られる他のサイトの方法のようにVBSを外部に置かずにVBEに直接書き込んでいます。
RSSを動かすためにはまずマーケットスピード自体を立ち上げて、幾つかのボタンをクリックし、IDとパスワードを入力して実行した上でRSSを開くと言う手順が必要です。
マーケットスピードのボタンを操作するにはウィンドウズAPIを使ってそれぞれのボタンやボックスの座標に対して処理を行うという方法がありますが、煩雑になるためにここでは、マーケットスピードの仕様を活かしてできるだけ簡単な方法でこれらを実施します。
そのためにまずID入力の省略と言う方法を説明します。
マーケットスピードの上部メニューから「環境設定」を選び、立ち上がったボックスの「システムタブ」をクリックすると、設定上部に「起動時ログインID」という項目があります。
ここに予めIDを保存しておくことで、ログインボックスのID入力が省略され、ログインボックスが立ち上がった時にパスワードのインプットがアクティブになります。
IDの準備が出きたらログインボックスを簡単に開くための準備です。
プログラムから座標をクリックしてログインボックスをたちあげるのは難しいのですが、マーケットスピードでは画面操作手順をファンクションキーに割り当ててこれから操作する機能があります。
「環境設定から」今度は「ショートカットキー」を選ぶことで任意のショートカットキーを設定できます。
座標からコントロールするより、VBSからショートカットキーを指定するほうが簡単で確実です。
マーケットスピードでは「総合サマリ」を選ぶと自動的にログインボックスが立ち上がってログインを求めてきます。
ここではこの機能を利用して、ログインボックスをショートカットキーで開きます。
総合サマリのショートカットキーはどこに登録してもよいのですが、ここではネットでよく見かける「F3」や「alt+F3」で説明します。
また同時に「総合サマリ」からもとの「お知らせ画面」に戻すサンプルもコードに有りますので、サンプルに合わせてひとまず「F3」と「alt+F3」に「総合サマリ」、「F5」や「alt+F5」に登録しておいてください
マーケットスピードの準備ができたら冒頭の指定B4セルにパスワードを入力して、「楽天RSS接続」ボタンをクリックすることで稼働すると思います。
左の窓のモジュール3を選択するとマーケットスピードを起動するコードが開きます。
マーケットスピードや楽天RSSを開く部分はVBSのコードをVBAから動かしています。
ポイントは「WshShell.Send(%{F3})」がショートカットキーのクリックですが「%{F3}」の部分がALT+ファンクション3番という意味です。
少し上の方の「{F5}」はファンクション5番(ALTなし)をクリックしていますがこの部分は参考用のサンプルです。
コードの最初に「'」をつけるとその行は実行されないのでコメントなどを記述できますが、ここではいくつかの確認用のダミーコードを隠してあります。
ダミーコード「WshShell.CurrentDirectory=RSS_Path」の部分はマーケットスピードが開いた状態でそのパスを取得するための自作関数(モジュール1にあります)を呼び出すものですが、RSSの起動状態などの確認に用いることのできるサンプルコードです。
マーケットスピードの起動後にセルにRSS関数(セルに価格データを直接表示させるための数式)を入力し、マーケットスピードを終了するときにこのRSS関数を削除しています(モジュール2のコードを参照してください)。
これはこのRSS関数が埋め込まれたままRSSやマーケットスピードが起動してない状態でエクセルが開くといちいちリンクが繋がっていないという警告がでるのですが、その警告ボックスによってVBAの動作が停止するのを避けるためです。
エクセルを閉じるときにはすべてのRSS関数が残っていない状態になるようにプログラミングする必要があります。
なおRSS関数やRSSのエクセルへのアドインなどについては、楽天証券の関連ページを閲覧してください。
ここでは楽天証券側の規制でリンクが貼れないため楽天証券のトップページから必要なページを探して下さい。
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) |
ただいま、休日メンテナンス中です。
※一部に不具合が起こることがあります。