株価は企業の業績を示す定量的な指標として最もポピュラーなものと言えるでしょう。
株の投資においては、銘柄を選ぶ時株価指標の PER, EPS, PBR, BPS, ROE, ROA, 自己資本比率、流動比率等の数値が参考にされます。
しかし投資ではなく、ある企業における株価以外の何らかの情報と、定量的な数値として単純に株価と突き合わせるという場面では、とりあえず取引日各日の四本値だけを用意しておけば良さそうです。
四本値を取得するライブラリ
JpStock は日本国内の株に対応しており、現在もメンテナンスされていて動作するライブラリです。
JpStock
https://github.com/utahta/jpstock
これはいわゆる Yahoo! ファイナンスのスクレイピングをするライブラリです。
銘柄に対する株価を取得する
銘柄コード (4 桁) を引数に .price メソッドを叩けば取得できます。
require 'jpstock'
stock = JpStock.price(:code => code)
CSV ファイルへ保存する
あとは、たとえば次のように CSV ファイルへ保存すれば良いでしょう。
def write_price(stock)
CSV.open(filename, "a") {|csv|
csv << [
stock.date.strftime("%Y-%m-%d"), # 日付
stock.code, # 銘柄コード
stock.open, # 初値
stock.close, # 終値
stock.high, # 高値
stock.low, # 安値
stock.volume # 出来高
]
}
end
Fluentd へ出力する
最近は Fluentd という素晴らしいログ収集ソフトウェアがあり、これに出力してしまえば RDBMS や KVS や JSON 形式のテキストファイル、あるいは Amazon S3 など自由自在に保存できますから、これを使うと便利でしょう。
def save_to_fluentd(stock)
@fluentd.post('stock.price', {
:created_at => stock.date,
:code => stock.code,
:open => stock.open,
:close => stock.close,
:high => stock.high,
:low => stock.low,
:volume => stock.volume
})
end
過去からの株価履歴を取得する
過去にさかのぼって株価情報を取得する場合は .historical_prices メソッドを使います。これで年単位さかのぼって株価を取得できます。
date = Date.parse(start_date)
stocks = JpStock.historical_prices(
:code => code,
:start_date => date,
:end_date => Date.today # 今日まで
)
株価を可視化する
ためしに株式会社 DTS の 2001 年以降の株価を matplotlib を使って可視化してみます。
このように収集したデータを可視化することができます。
まとめ
株価と業績は連動しますから、このライブラリを利用すれば何らかの外部の要因と、企業の株価との関連性をおおまかに調べるといったことができるわけです。