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

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

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

ACCESSのVBAで別テーブルに株価データの履歴を保存する

      2015/01/04

これまで、ACCESSのVBAを使って株価データを取得して分析する事を行ってきました。

株価の日々データについては、銘柄毎、年月日毎に情報が蓄積されるので、過去の情報を参照して分析する事ができます。

しかし、基本データについては、その都度、最新の情報を取得して更新するので、過去の情報を参照する事ができません。

そこで、株価の基本データについて、必要なものだけを蓄積できるようにします。

履歴用テーブルの作成

新規に一つテーブルを作成します。

テーブル名は、「T_株式_基本情報_履歴」としました。
フィールドは以下の通り

  • 年:整数型
  • 月:バイト型
  • 回:バイト型
  • 銘柄コード:テキスト型4桁
  • 1株配当:通貨型
  • 配当利回り:通貨型
  • PER:通貨型
  • PBR:通貨型

主キーは年、月、回、銘柄コードの4つです。

履歴データに全ての情報を蓄積するとデータ量が増えてしまうので、履歴を残す事で意味がありそうな3つの情報のみに限定しました。

株価データ蓄積プログラム

このテーブルにデータを蓄積することにします。
プログラムは以下の通り

Sub ExportBasicInfo(YYYY As Integer, MM As Integer, T As Integer)
'T_株式_基本情報をT_株式_基本情報_履歴に1株配当、PER、PBRのみ出力する。
'YYYY:西暦年
'MM  :月
'T   :回数(15日以降に1、月末以降に2)

    Dim DB As DAO.Database
    Dim RS1 As DAO.Recordset
    Dim RS2 As DAO.Recordset

    If T < 1 Or T > 2 Then Exit Sub
    If MM < 1 Or MM > 12 Then Exit Sub

    Set DB = CurrentDb
    Set RS1 = DB.OpenRecordset("T_株式_基本情報", dbOpenSnapshot)
    Set RS2 = DB.OpenRecordset("T_株式_基本情報_履歴", dbOpenTable)

    RS2.Index = "PrimaryKey"
    RS2.Seek "=", YYYY, MM, T
    If Not RS2.NoMatch Then Exit Sub
    '既に実行済みなら処理を中止する。

    Do Until RS1.EOF
        RS2.AddNew
        RS2![年] = YYYY
        RS2![月] = MM
        RS2![回] = T
        RS2![銘柄コード] = RS1![銘柄コード]
        RS2![配当利回り] = RS1![配当利回り]
        RS2![PER] = RS1![PER]
        RS2![PBR] = RS1![PBR]
        RS2.Update
        RS1.MoveNext
    Loop

End Sub

プログラムの実行タイミング

このプログラムは月に2回実行する事を前提にしています。

PER、PBR、1株配当は、決算が公表されないと更新されません。

頻繁に株価の基本データを履歴として保存しても、あまり意味がないと思うからです。

半月に1回、15日以降に1回目、月末以降に2回目を実行することを予定しています。

過去のデータについて

過去のPERやPBRや1株配当を掲載しているサイトはあまり見た事がありません。

そのため、インターネット上でこれらの情報を取得する事は難しいと思います。

過去3年分ぐらいの情報を蓄積して持っていると分析に使えると思います。

どうしても過去3年分のデータが欲しいという場合は、個別に対応しますので連絡を下さい。

2015年1月4日訂正

1株配当を履歴に保存していても使わないので、配当利回りに変更しました。

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

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

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

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

Message

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