株価情報の自動取得とグラフ生成

日次で株価指数S&P 500の構成銘柄リストを確認し、セクター別に様々な指標値の中央値を算出し、その結果をグラフ化したものを「【毎日更新】S&P 500セクター別PERや騰落率のグラフ」にて公開しています。

本記事ではどのようにその仕組を構築しているのかを記載します。

使用機能

Google Apps Script (GAS)

自動更新はGoogleが提供する様々なサービスを使用しています。中でも一番の要となるのがGASと呼ばれるApps Scriptです。このサービスを用いて各種データの収集や出力を行っています。具体的にはS&P 500の構成銘柄リストの取得、計算情報のJSON出力のために使用しています。

簡潔なスクリプトでDriveやSheetなど他サービスと連動させることが可能でした。GASが存在しなければデータ連携の殆どをPHPなど別の方法で検討することとなり、開発時間は大幅に増加したでしょう。

他にも数クリックでスクリプトの実行頻度を設定するなど可能のため、手っ取り早い自動化が可能な点が利点です。

ただGASには、変数のスコープや他システムからのデータ取得結果などで不可解な動作をする場合があり、それら不具合と思われる事象について直接解決できないというもどかしい欠点があります。また無料で提供されていることもあり、動作が非常に低速です。

Google Sheet (スプレッドシート)

取得したデータの保管、および計算はSheetにて行っています。

Sheetでは標準で現在株価やPERなどを取得する機能が実装されており、ティッカーと所属セクターを取得したあとの計算はすべてSheetの機能で完結しています。実装次第ではウェブスクレイピングにより複雑な情報を取得することも可能でしたが、無関係の外部サイトに対して負荷をかける事となるため今回は実装していません。

DataHub

S&P 500(Standard and Poor’s 500)の構成銘柄のティッカーを所属セクターのリストはDataHubより取得しています。GASを用いてリストを取得しています。

Google Drive

外部から取得したデータや出力したデータの一時的な保存場所としてDriveを利用しています。サーバーのローカルに保管しても問題ありませんが、GASによるデータの連携が容易であったことからDriveを採用しています。

Chart.js

グラフはSheetを用いて生成することも可能でしたが、今回はChart.jsを利用しています。詳細な検証は行っていませんが、Sheetのグラフ読み込み速度に不安があったことが理由です。

全体的なざっとした処理の流れ

#使用機能処理内容
1GASS&P 500構成銘柄リストをDriveに保存
2GASDriveに保存されたリストをSheetに反映
3Sheet各種の中央値を算出
4GASSheetの処理結果をJSONとして出力
5GASJSONをローカルへ保存
6Chart.jsローカルのJSONをグラフとして描画