株データの取得とsql文

  • 検討
    tbl_company および tbl_company_orgで会社数を数えると、1800超ある。これの毎日の終値を格納するための仕組みを考える。

    • 検討案1
      最初に考えたテーブルのフォーマットは以下の通り、

      openDate cc1301 cc9999
      2000-01-04 XXX XXX
      YYYY-MM-DD

      カラムを会社のコードに対応させ、その日の終値をそのまま下方向に伸ばしていく。これには問題があり、mysqlにはカラム数の制限により、1000個以上のカラムを一つのテーブルに展開できない。

    • 検討案2
      そこでテーブルの分割を行うことになるが、どのように分割するかを考える。当初は証券コードは千の位で各種業種を分けていたが、最近では市場自体への入退場もあり入り乱れてしまっている。そこで業種ごとにはならないが、一律に1000番台でテーブルを区切るようにする。

      openDate cc1301 cc1xxx
      2000-01-04 XXX XXX
      YYYY-MM-DD

      証券コードが1000番台なら、tbl_close_price_1000 とし、同様に2000番台ならtbl_close_price_2000として作成する。

  • カラムの作成
    テーブル分割してもカラムの数が多いので、カラムを生成するスクリプトを実装する。

    スクリプト中のstartColの値を変更することにより、証券コードに対応したカラムを生成する。これを1000〜9000番台で行うことにより、市場が開いている日に各証券コードに対応した終値を格納できるテーブルの骨組みが出来上がる。

  • sql文の作成
    MySqlやPostgresSqlなどのRDBMSはsql文と呼ばれる問い合わせ言語を用いて、データベースとやりとりする。今までのプログラミング例を見ればわかるが、文字列としてsql文を生成して、それをmysql本体に投げていた。sql文は可読性が高いので、そのままプリントアウトすることによって実際の動きを確認できる。つまり、実際にデータベースに命令を投入する前にその文を確認することが出来るので、デバッグに役立つ。

  • 株データの取得(現在、調整中)
    上記までで作成したtbl_close_price_XXXXに株価をインサートしていく。このテーブルは基本的には毎日更新される。また、株価もこのテーブルから今後は参照される。

    • startDate
    • endDate
    • startStockCode
    • stopStockCode
    • sql_strの初期化文字列に含まれるテーブル名

    を取得したい日付とそれぞれの証券コードのテーブルに合わせて変更し実行する。

  • 経年変化
    終値の値は2000-01-01から取得することが可能であるが、tbl_companyに記載されているが、当時はなかった証券コードも散見される。このため、その時点で見つからなかった証券コードは終値として、−1を返すように実装した。

Leave a Reply

Your email address will not be published. Required fields are marked *