
pythonとyfinanceで株価取得をする方法
先日yahoo finance api側の仕様変更のため、yahoo_finance_api2が使用できなくなったため、代わりにyfinanceでの株価の取得を行いました。
yahoo_finance_api2自体も仕様変更に対応したため、現在は使用可能です。
ただ、yahoo_finance_api2よりもyfinanceの使い勝手の方が良かったためyfinanceで株価取得する方法を載せていきたいと思います。
■yfinanceのメリット
・複数のティッカーのデータをまとめて取得できる
・財務情報の取得ができる
■実行環境について
pythonの実行はGoogle Colaboratoryが便利です。
Googleアカウントでログインすれば無料で使用可能です。
■株価を取得する方法
インストール
pip install yfinance
株価の取得
import yfinance as yf
data = yf.download('SPY AAPL', period='7d', interval = "1d")
たった2行のコードで、SPDR S&P 500 ETFとAppleの株価(日足)を取得することが出来ます。
出力結果
[*********************100%***********************] 2 of 2 completed
Adj Close ... Volume
AAPL SPY ... AAPL SPY
Date ...
2021-07-14 149.149994 436.239990 ... 127050800 64130400
2021-07-15 148.479996 434.750000 ... 106820300 55126400
2021-07-16 146.389999 431.339996 ... 93100300 75784700
2021-07-19 142.449997 424.970001 ... 121434600 147987000
2021-07-20 146.149994 431.059998 ... 96238600 99501600
2021-07-21 145.399994 434.549988 ... 74915000 64623000
2021-07-22 146.800003 435.459991 ... 77246300 47820500
項目は以下の通り。
'Open':始値
'High':高値
'Low':安値
'Close':終値
’Adj Close’:配当落調整済み終値
'Volume':出来高
大本のyahoo finance apiを利用したデータは基本的にUTC(協定世界時)で取得されます。
ただ、yfinanceで1日未満のデータを取得すると、米国株が現地時間-4、日本株が現地時間+9と表示されるので、すでに現地時間で調整されているみたいですね。
■他の銘柄のデータを取得する
上記コードの'SPY AAPL'を'MSFT'等、他のティッカーに変更することで株価を取得できます。
リスト、もしくは空白で区切ることで複数のティッカーを一度に取得出来ます。
日本株を取得したい場合は、証券コードの後に「.T」を追加すれば取得できます。
例)トヨタ:'7203.T'
インデックスについては、下記で取得が可能です。
日経225:'^N225'
ダウ:'^DJI'
SP500:'^GSPC'
ナスダック総合指数:'^IXIC'
基本的にYahoo financeでの指数のシンボルを使用すれば取得できるみたいですね。
■取得期間を変更する
period="7d"の7dを
「1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max」のいずれかに設定することで好きな期間の取得が出来ます。
1d:1日
1mo:1ヶ月
1y:1年
ytd:当会計年度
max:すべてのデータ
■取得する足の長さを変更する
interval = "1d"の1dを「1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo」のいずれかに設定することで好きな時間足の取得が出来ます。
1m:1分足
1h:1時間足
1d:日足
1mo:月足
こちらの記事に日足のデータは正確だったが月足でのデータが始値以外はずれていたという記述があるので、日足以外のデータを使用する場合は検証してから使用することをおすすめします。
■銘柄ごとにまとめたデータにする
デフォルト状態では、始値終値などの項目ごとにデータをまとめてあります。
グラフを書く場合には便利なのですが、各銘柄ごとにデータを分析したい場合には向きません。
銘柄ごとにデータをまとめる場合は、下記のようにカンマ区切りでgroup_byオプションを追加してください。
data = yf.download('SPY AAPL', period='7d', interval = "1d", group_by = 'ticker')
出力結果
[*********************100%***********************] 2 of 2 completed
AAPL ... SPY
Open High ... Adj Close Volume
Date ...
2021-07-14 148.100006 149.570007 ... 436.239990 64130400
2021-07-15 149.240005 150.000000 ... 434.750000 55126400
2021-07-16 148.460007 149.759995 ... 431.339996 75784700
2021-07-19 143.750000 144.070007 ... 424.970001 147987000
2021-07-20 143.460007 147.100006 ... 431.059998 99501600
2021-07-21 145.529999 146.130005 ... 434.549988 64623000
2021-07-22 145.940002 148.199997 ... 435.459991 47820500
■その他のオプション
その他のオプションは以下の通りです。
#すべてのOHLCを自動的に調整する
#(オプション、デフォルトはFalse)
auto_adjust = True
#プレ/アフターマーケット(時間外取引)のデータをダウンロードする
#(オプション、デフォルトはFalse)
prepost = True
#periodの代わりに開始日を指定することも出来る
start="2017-01-01"
#終了日の指定
#デフォルトはプログラムの実行日
end="2017-04-30"
#プロキシURLスキームはダウンロード時に使用しますか?
#(オプション、デフォルトはなし)
proxy = None
複数銘柄取得した場合にマルチインデックスという形式でデータが取得されますが、操作が難しいので1つだけ例を挙げておきます。
■group_byオプションなしで取得したデータからSPYのデータだけ抽出
import yfinance as yf
data = yf.download('SPY AAPL', period='7d', interval = "1d")
idx = pd.IndexSlice
data2 = data.loc[:,idx[:,'SPY']].droplevel(level=1, axis=1)
print(data2)
Adj Close Close ... Open Volume
Date ...
2021-07-14 436.239990 436.239990 ... 437.399994 64130400
2021-07-15 434.750000 434.750000 ... 434.809998 55126400
2021-07-16 431.339996 431.339996 ... 436.010010 75784700
2021-07-19 424.970001 424.970001 ... 426.190002 147987000
2021-07-20 431.059998 431.059998 ... 425.679993 99501600
2021-07-21 434.549988 434.549988 ... 432.339996 64623000
2021-07-22 435.459991 435.459991 ... 434.739990 47820500
■財務情報を取得する方法
yfinanceでは株価情報だけでなく財務情報を取得することもできます。
簡単にコードを載せておきます。
財務情報は通期では4期分、4半期は1年分のデータが取得できるようです。
import yfinance as yf
msft = yf.Ticker("MSFT")
#株式情報を取得する
msft.info
#過去の市場データを取得する
hist = msft.history(period = "max")
#アクション(配当、分割)を表示
msft.actions
#配当を表示
msft.dividends
#分割を表示
msft.splits
#財務情報を表示
msft.financials
msft.quarterly_financials
#主要な所有者を表示
msft.major_holders
#機関保有者を表示
msft.institutional_holders
#バランスシートを表示
msft.balance_sheet
msft.quarterly_balance_sheet
#キャッシュフローを表示
msft.cashflow
msft.quarterly_cashflow
#収益を表示
msft.earnings
msft.quarterly_earnings
#持続可能性を示す
msft.sustainability
#アナリストの推奨事項を表示
msft.recommendations
#次のイベント(収益など)を表示
msft.calendar
#ISINコードを表示-*実験的*
#ISIN =国際証券識別番号
msft.isin
#オプションの有効期限を表示
msft.options
#特定の有効期限のオプションチェーンを取得
opt = msft.option_chain( 'YYYY-MM-DD')
#データは次の方法で入手できます:opt.calls、opt.puts
通期・四半期の利益や財務データ、キャッシュフローから機関保有者まで取得できるってすごいですね…(・ω・;)
■まとめ
様々な情報を取得できて便利なライブラリだと思ったのですが、日本語で解説しているサイトが見つからなかったので、yfinanceでの株価取得方法を簡単に書いてみました。
プログラミングでの株価分析に興味がある方のお役に立てればと思います。