株式会社シスアナコム

情報システムに関することなら、どんなことでも適切に助言いたします!

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

マイクロソフトACCESSで株価分析データベースを作る。

      2015/04/19

「ゼロからの週末プログラマー」に掲載していた記事を改訂して掲載しています。

はじめに

シスアナコムの杉山です。

週末にプログラミングを楽しみながら、ゼロから稼ぐ事を目的としてデータベースを使った株価データの分析を始めます。

誰かの参考になればと思い、できる限り、その過程を公開するつもりです。

マイクロソフトACCESSについて

利用するソフトウェアはマイクロソフトのACCESSというデータベースソフトウェア。

現時点での最新バージョンは2013で、カカクコムなどで調べると、だいたい1万2千円~1万3千円ぐらいで購入できるみたい。

マイクロソフトの公式サイトだと1万6千円ぐらいでした。

ダウンロード版が基本のようで、60日間の無料試用期間があるので、とりあえず使ってみることができます。

私が使っているバージョンは2007。

かなり古いバージョンですが、マイクロソフトACCESSのデータベースとしての基本的な機能は、すでにバージョン2000の段階で完成しています。

パソコン1台で株価データを分析するぐらいの事であれば、最新バージョンでなくても、何も問題はありません。

データベースの新規作成

まずは「空のデータベース」を新規に作成します。

ファイル名もフォルダ名も任意です。

「C:\KABUZERO\KABUZERO.accdb」というファイルを作成しました。

利用するもの、しないもの

マイクロソフトACCESSデータベースには、色々なオブジェクトを作ることができますが、全ての種類を使うわけではありません。

テーブル

データを格納する入れ物。

必ず使います。

クエリー

データを分析するためのもの。

条件を指定して抽出したり、並び替えたり、一括更新したりできます。

これも使います。

フォーム

画面表示用。

使いません。

レポート

印刷用。

使いません。

マクロ

処理の自動化。

使いません。

モジュール=VBA(Visual Basic for Applications)

処理の自動化。

使います。

個別銘柄の基本情報

まずは個別銘柄の基本的な情報を取得することを考えます。

基本的な情報とは以下のような項目です。

  • 銘柄コード
  • 市場
  • 名称
  • 時価総額
  • 発行済株式数
  • 予想配当利回り
  • 予想1株配当
  • 予想PER
  • 実績PBR
  • 単元株数
  • 自己資本比率
  • 株主優待の権利確定日
  • 株主優待の必要株数
  • 株主優待の内容
  • URL

項目はあくまで例です。

将来的に増減しますが、これらの項目があれば、条件を指定して投資対象銘柄を絞り込むことができます。

これらの項目をインターネット上のウェブサイトから自動収集してデータベース化することを目指します。

株価情報の収集先となるウェブサイト

情報を収集するために接続するウェブサイトは、できる限り有名で多くの人が閲覧しているウェブサイトが良いでしょう。

ウェブサイトの稼働率や情報の信頼性が高いからです。

最も有名なのは「ヤフーファイナンス

いろんな情報が提供されているので活用したい所です。

みんなの株式」、「株マップ.com」、「株テク」、「トレイダーズウェブ」というウェブサイトでも、様々な株価情報を見ることができます。

あと、大手ネット証券会社のウェブサイトも情報が充実しています。

ただし、ほとんどの証券会社は、口座を開設して、IDとパスワードを入力しないと詳細な情報を見ることはできません。

しかし、楽天証券は口座を持っていなくても、詳細な情報を見ることができます。

楽天証券は旧インフォシークマネーからの流れがあるからだと思いますが、素晴らしい対応ですね。

まずはヤフーファイナンスに接続して基本情報をデータベース化します。

インターネットに接続してHTMLソースを取得

その前に、マイクロソフトACCESSのオプションからセキュリティーセンターを開いて、信頼できる場所を設定しておきます。

(バージョン2007の場合です)

これでVBAプログラムが実行できるようになります。

まずは「標準モジュール」を作成。

データベースを閉じるときに名前を付けることになりますが、任意の名前を付けて下さい。

参照設定ではADOではなく、DAOを使えるようにします。

何もしなければDAOが使えるはず。

パソコン単体でデータベースを使う場合、ADOよりもDAOの方が早いので。

以下のようなプログラムを作りました。

Function GetHttpDoc(URL As String) As String

    Dim Stream As Object
    Dim Http As Object

On Error GoTo GetHttpDoc_ERR

    Set Http = CreateObject("MSXML2.XMLHTTP")
    Http.Open "GET", URL, False
    Http.Send

    If Http.Status >= 200 And Http.Status < 300 Then
        Set Stream = CreateObject("ADODB.Stream")
        Stream.Open
        Stream.Type = 2 'テキスト
        Stream.Charset = "Shift_JIS"
        Stream.WriteText Http.responseText
        Stream.Position = 0
        GetHttpDoc = Stream.readText(-1)
    Else
        GetHttpDoc = ""
    End If

GetHttpDoc_RESUME:

On Error GoTo 0

    Exit Function

GetHttpDoc_ERR:

    Resume GetHttpDoc_RESUME

End Function

試験的に、イミディエイトウィンドウから以下の命令を実行。

?GetHttpDoc("http://www.sysana.com/")

あれ?

何も出力されない。

なんでだろうと思ったら、弊社のウェブサイトをワードプレスに移行したので、「www.sysana.com」は自動的に「sysana.com」にリダイレクトされます。

リダイレクトされるようなURLを指定すると、エラーになるようです。

こうしたら、問題なく実行されました。

?GetHttpDoc("http://sysana.com/")

イミディエイトウィンドウにhtmlソースがずらずらと表示されます。

まずはヤフーファイナンスに接続してみる

ヤフーファイナンスをブラウザで開いて、何か証券コードを入力して株価を検索してみます。

ちゃんと存在する証券コードであれば、画面にはその企業の株価や詳細な情報が表示されるはずです。

ブラウザのURLが表示されている欄は以下のようになります。

http://stocks.finance.yahoo.co.jp/stocks/detail/?code=銘柄コード.市場コード

市場コードはアルファベット1文字。

東証なら「T」、名証なら「N」、札証なら「S」、福証なら「F」

でも、市場コードを削除して再読み込みしても同じ画面が表示されるので、市場コードは指定しなくても問題ないようです。

複数の市場に上場している企業の場合、それぞれの株価を取得するのに使い分けるようですが、何も指定しなければ主要市場の株価情報が表示されます。

また、銘柄コードの部分を存在しないコードに変更して再読み込みすると、「一致する銘柄は見つかりませんでした」という画面が表示されます。

そこで、ヤフーファイナンス専用のHTMLソース取得プログラムを作成しました。

Function GetHttpDocFromYahooFinance(CD As String) As String
'指定した銘柄コードのYAHOOファイナンスのHTMLソースを返す
'存在しなければ空文字列を返す

    Dim HTMLSRC As String
    
    HTMLSRC = GetHttpDoc("http://stocks.finance.yahoo.co.jp/stocks/detail/?code=" & CD)
    If InStr(HTMLSRC, "一致する銘柄は見つかりませんでした") > 0 Then HTMLSRC = ""
    
    GetHttpDocFromYahooFinance = HTMLSRC

End Function

今回はここまで。

 - ACCESSデータベース, 週末プログラマー

↓ブログランキングに参加しています!


ネット・PC(全般) ブログランキングへ
にほんブログ村 IT技術ブログ ITコンサルティングへ
にほんブログ村

Message

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