株情報を取得するAPIどれが良いのか
株価情報などをAPIで取得したいニーズはすごいあると思う。株式会社東京証券取引所が今年1月(2021年)に東証APIサービスの提供を始めたみたい。日本株のデータ取得に関しては、本家本元、取引所の東証が提供するAPIなのでデータの正確性では他のAPIベンダーが追随することはできないだろう。でも有料。使いたいのは無料API。
ということで、外国株も含めて株価情報を取得できる無料で使える(オープンソースで公開されている)APIの紹介です。
pandas_datareader
pip できる
元々pandasの一部だった。(いろんなデータベースへのアクセスにも使える)
import pandas_datareader.data as web
import datetime as datetime
import matplotlib.pyplot as plt
import pandas as pd
#取得期間を指定
start = datetime.datetime(2021,1,1)
end = datetime.datetime(2021,6,30)
#欲しい銘柄のティッカーを指定
stockList = ["AAPL","AMZN","FB","MSFT","GOOGL"]
df = web.DataReader(stockList, 'yahoo', start=start, end=end)
df.to_csv("raw-data.csv")
Rederenceで
Functions from pandas_datareader.data and pandas_datareader.wb extract data from various Internet sources into a pandas DataFrame. Currently the following sources are supported: ......
とあるように
web.DataReader( param1, param2, param3, param4)
で、param2でどこのデータベースから取得するかを選択する。
pandas_datareaderは元々pandasモジュールの一部だったのが分離したものらしい。(ある時pandasバージョンから対応しなくなった)
よくあるデータベースのアドレスとAPI-Keyを割り当てるデータ取得法とは異なり、pandas_datareaderではキーワードを与えるだけでデータベースを取得できる。だが、このキーワードで取得できるデータベースはpandas_datareaderリファレンスに載っている対応データベースに限られる。(結構多い)
ただ、帰ってくるデータ表式はバラバラだったり、株価情報の取得が目的ならそんな多くのデータベースに対応している必要はない。ちなみに、pandas_dadareader には
Requirement
- pandas>=0.23
- lxml
- requests>=2.19.0
なので、データベースにアクセスしてデータを取得するのには結局、requestsが使われているっぽい。
んで、pandas_datareaderの開発者が主要なデータベースからそれぞれに適したデータ表式をpandasで個別に設定しているっぽい。
株価情報の取得なら params2が 'yahoo' で良い。米国株と日本株の取得ができる。
web.DataReader('^DJI', 'yahoo', start, end) #米国株ならparams1をTicker_Symbolに
web.DataReader('6758.T', 'yahoo', start, end) #日本株ならparams1をTicker_numebr.T or Ticker_numebr.JPに
params1はリストにも対応。一度に複数の株価情報を取得できる。
yahoo_finance_api2
ほぼ、pandas_datareaderのyahoo financeだけ版。ただ、こちらは
my_share = share.Share('MSFT')
symbol_data = None
try:
symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY, 10, share.FREQUENCY_TYPE_MINUTE, 5)
except YahooFinanceError as e:
print(e.message)
sys.exit(1)
のように、取得する銘柄はもちろんだが、
- 時間軸(分、時間、日、週、月など)
- 最新のものから取得する期間(分、時間、日、週、月で指定可能)
が指定できる。ただ、最新のものからデータを取ってくる期間は銘柄により異なるようで数十年のものもあれば、数年のものもあり。(最古データは上場年月日と必ずしも一致しない)
pandas_datareaderのように取得開始~終了の期間を指定できるわけではない。ただこれから、保有株に対する何らかの分析、Alexaスキルを作って朝に報告してくれるようなモニタリング用途であれば十分。
おわりと他にもあるよAPI
ここでは、 pandas_datareaderとyahoo_finance_api2を紹介したが、実はyahoo_financeからデータを取得できるよう、この他にも幾つかプロジェクトがあるみたい。
Pypiで yahoo financeとか検索してみると沢山見つかる。結局は、Descriptionを見て
自分の優先したい
- データ表式
- パラメータ
などの条件に合ったモジュールを使えば良い。
ps
朝起きたら、SF映画のブリーフィングみたいに、Alexaに自分の保有銘柄のレポート伝えてもらうの面白そう。