コンピュータ投資基礎ノウハウ、エクセルVBA「ヒストリカルデータ取得」
外部のファイルの時系列価格データをネットからエクセルに読込む方法。
エクセルにネットで配信されているcsvデータなどを取り込むことでネット上から検証用やロジック作成用の過去データを取得することができます。
例えば売買ロジックに過去数十日間の移動平均などを用いる場合には、楽天RSSなどによるリアルタイムデータだけでは十分ではありません。
そのためのデータを取得するという方法がありますが、データ配信などを行っているサイトの自動取得についての了解はなかなか得られないと思います。
このサイトでも過去にここで紹介するような方法による自動取得を計画したことがありましたが、自動売買に使うデータはそのデータの不具合が元で売買の損失が出た時にかならず、事前に十分説明していても苦情やトラブルが有るということを耳にしているために現在のところは検証用としてのみの配信に留めています。
ネットという環境で売買用のデータを提供する場合にはかなりの配信システムの信頼性が必要ということで、このサイトも含めて自分で配信元を見つけた上で、あくまでも自己責任で取得ということになります。
ここでは便宜上、世の中で広く用いられているヤフーファイナンスのヒストリカルデータの取得と言う方法に限定して紹介します。
エクセルにはWEBクエリと言う予め用意されたネットからデータを取得するツールが有ります。
また、VBAでもインターネットエクスプローラを介してウェブ情報にアクセスしたり、そこから所定の情報を取得することのできる方法があります。
ここでは簡単な備え付けのWEBクエリを使ってヤフーファイナンスから為替の価格情報を取得しています。
長期のデータを確実に取得するためにヤフーファイナンスの時系列を月単位で指定して、その月を遡って行くと言う方法で長期データを取得する例を記述しています。
サンプルファイルのそれぞれのコードに注釈を説明していますが、月を捲って必要なデータをエクセルに並べた上で、データでない部分をすべて消去し、エクセルの「並べ替え」機能を使って整形しています。
「並べ替え」では指定した順番にデータが並べ替えられるため不必要なデータを消去されたあとの空白行がすべてデータの最後に回されて、中身のあるデータだけが詰まって並びます。
また、データ並べ替えの際に昇順・降順の指定もできるために、これらを使ってデータは必要な形式に並びます。
シート上部の「データDL」ボタンをクリックすることで動作を確認できます。
また、VBEを開いてコードを注釈から確認することができます。
注意点はVBAからIEを経由してデータを取得するのと異なって、クエリではデータを取得したエリアがデータの元のサイトなどとリンクを張った状態になるので、不都合回避のためにこれを必ず解除する必要があります。
コード中の
qt.Parent.Names(qt.Name).Delete
qt.Delete
の部分で、解除していますが、思わぬミスコードによるエラーなどを回避するためには取得したデータを別のシートに写した上で元のエリアを全削除するなどの方法でクリアできます。
ここは、予期せぬエラーの原因となる場合があるため注意が必要です。
DL倶楽部の「自動売買用VBAチップ ファイル一覧」などのリンクページから各種研究用・分析用のエクセルファイルをダウンロードできます。
日経平均 | 31524.22(+376.21) |
TOPIX | 2182.70(+33.41) |
JASDAQ | 164.28(-0.47) |
ダウ平均 | 33061.57(+153.30) |
S&P500 | 4221.02(+41.19) |
NASDAQ | 13100.98(+165.69) |
ドル/円 | 144.642(+0.172) |
FTSE100 | 7550.29(+60.02) |
ハンセン | 18949.94(+733.03) |
深夜にメンテナンスをしています。
※少しの間、一部に不具合が続くことがあります。