ゼロからの週末プログラマー

週末にプログラミングを楽しみながら稼げるのか試してみます!

この投稿は1年以上前に公開されました。
現在では状況や内容が変わっている可能性があります。
ご注意下さい。

ヤフーファイナンスから株式の日々の時系列情報を取得する

      2015/02/01

今週末は再びマイクロソフトACCESSを使った株情報データベースの作成を行いました。

Unityも面白いのですが、同じ事をずっとやっていると飽きてしまうので。

前回までに、株式の基本的な情報をヤフーファイナンスから取得する事をやりました。

今週は株式の日々の時系列情報を取得する事に挑戦します。

日々の時系列情報とは

株価の日々の動きを表すための情報で、ヤフーファイナンスで特定の銘柄情報を表示させたとき、「時系列」というタブをクリックすると表示される情報のことです。

マイクロソフトACCESSの準備として、以下のようなテーブルを用意しておきます。

  • 銘柄コード(銘柄コード+年月日で主キー)
  • 年月日
  • 始値(通貨型)
  • 高値(通貨型)
  • 安値(通貨型)
  • 終値(通貨型)
  • 出来高(通貨型)

テーブル名は「T_株式_日々情報」としました。

ヤフーファイナンスでは「調整後終値」という項目も存在します。

これは株式分割が実施された場合に、過去の株価を調整するために使用されるものです。

日々の時系列データのHTMLを取得する

どんな銘柄でも良いので、ヤフーファイナンスの情報を表示させてから、時系列タブをクリックします。

画面の下方に年月日を指定して表示できるところがあります。

何年何月でも良いので、1日~月末までの一月分を「デイリー」で指定して表示させると、画面に一月分の日々の時系列データが表示されます。

この画面を取り込んで、一月単位で処理することにします。

URL欄を見ると以下のように表示されています。

http://info.finance.yahoo.co.jp/history/?code=銘柄コード&sy=&sm=&sd=1&ey=&em=&ed=月末日&tm=d&=

銘柄コード、年、月を指定してHTMLを取得することができそうです。

HTMLを取得するプログラムは以下の通り。
月末日は、DateSerial(年,月+1,0)で取得できます。

日本市場の休場日を把握する

次に日本市場が休場日かどうかを把握する方法を考えます。

ヤフーファイナンスの日々の時系列情報は、取引が全くない場合でも、日本市場の休場日と同じようにデータが作成されません。

取引がなくてデータが存在しないのか、それとも、日本市場が休場日なのかを判断してレコードを作成するかどうか決めます。

そのためのプログラムは以下の通り。

Function IsMarket(YMD As Date) As Boolean
'株式市場が開いている日かどうかチェックする。

    Dim DB As DAO.Database
    Dim RS As DAO.Recordset

    Dim W As Integer
    Dim B As Boolean

    B = False

    W = Weekday(YMD)
    If W > 1 And W < 7 Then
    '平日?
        Set DB = CurrentDb
        Set RS = DB.OpenRecordset("T_休場日", dbOpenTable)
        RS.Index = "PrimaryKey"
        RS.Seek "=", YMD
        If RS.NoMatch Then B = True
    End If

    IsMarket = B

End Function

T_休場日という「年月日」のみのフィールドを持つテーブルを作って、年月日を主キーにします。

とても面倒ですが、月曜~金曜なのに日本市場が休場日という年月日を登録して下さい。

マイクロソフトACCESSの容量上限について

マイクロソフトACCESSデータベースの容量には上限があって、ファイルサイズが2GBまで。

そのため、株式の日々情報をどこまで蓄積できるかは、この上限が基準になります。

もちろん、古い情報を別のデータベースにはき出せば問題は解決できますが、その分、使い勝手は悪くなります。

どれぐらいの情報を蓄積すればよいかの判断は人によって分かれると思いますが、今回は3年分ぐらい蓄積する予定。

そのため、T_休場日には、過去3年分ぐらいの祝日を登録します。

指定した銘柄の特定の年月1ヶ月間の時系列情報を取得する

株式の基本的な情報を取得したときと同様に、HTMLから日々の時系列情報を取得するプログラムを作成しました。
調整後終値を使って、始値、高値、安値、終値、出来高を調整しています。

注意事項(必読)

後は、全銘柄の日々の時系列情報を取得するプログラムを書いて実行すればいいのですが、その前に注意事項があります。

前回の基本情報を取得するときも書きましたが、頻繁に株価情報を取得するプログラムを実行するとヤフーファイナンスに負荷をかけてしまいます

連続で株価情報を取得するプログラムを実行することは止めて下さい。

場合によっては、ヤフーファイナンスに接続できなくなります

しばらく時間が経過すると元に戻ると思いますが、そうなっても私は一切責任を取れません。

ご了承下さい。

経験上、午前に1回、午後に1回ぐらいなら大丈夫だと思います。

保証はできません。

全銘柄の特定の年月の時系列情報を取得する

全銘柄を取得するためのプログラムは以下の通り。

基本情報が取得済みであることが条件です。

実行環境にもよると思いますが、全銘柄の一月分の日々の時系列情報を取得するには30分ぐらいかかると思います。

今週はここまで。

2015年2月1日追記

このページに掲載しているプログラムは改訂版を作成したので削除しました。

改訂版のプログラムはこちらを参照して下さい。

2014年8月21日追記

HTMLから日々の時系列情報を取得するプログラムにバグがありましたので修正しました。

すみません。

 - ACCESSデータベース, ブログ

↓ブログランキングに参加中!ご協力をお願いします!

にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村

プログラマー ブログランキングへ

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です