python で前営業日の株価や為替レートを取得するスニペットを共有します。pythonの外部ライブラリ yfinance を使います
01. 環境設定
pip install yfinance ないし類似のコマンドで yfinance というライブラリを導入すれば終わりです。依存関係である numpy や pandas といった統計ライブラリが同時に入ります。
yfinance はYahoo!Finance をクロールして情報を取得するので、ユーザ登録やAPIキーなどユーザ固有の準備は不要です。法的な問題が気になるなら yfinance のプロジェクトページを見てください
02. 概要
yfinance.Ticker ないし yfinance.Tickers の初期化子にティッカーを渡して得られたオブジェクトのメソッド history を使うと、指定した範囲の株価データがDataFrame のオブジェクトとして得られます。Close(終値)の列を抜き出して最新のデータのみを取り出せばできあがりです
03. 株価取得のスニペット
import yfinance as yf
def stock_prices(tickers):
C = yf.Tickers(tickers).history(period="1d").Close
return { t: C[t][0] for t in tickers }
print (stock_prices(["MSFT", "JNJ", "V", "MA"]))
#{'MSFT': 359.489990234375, 'JNJ': 159.05999755859375, 'V': 240.77000427246094, 'MA': 398.1600036621094}
-
yfinance.Tickersを使うと複数の株式のデータをまとめてとってこれます- 裏側ではひとつずつリクエストするので多量のティッカーを突っ込まないように
- 負荷を下げるため
historyの引数で期間を指定します。 - 辞書形式にしたほうがわかりやすいので実装を参考にしてみてください
- 日本の株価の場合、ティッカーには「.T」をつけます例えば日産のティッカーは「7201.T」となります
- 日本株のTickerと米国株のTickerを混ぜないほうが良いでしょう。スクリプトの実行時刻によってどちらかの国のティッカーに終値が入っていないケースが頻発します。祝日も日本と米国で違うためNaNが入りやすくなります。ティッカーの国籍が一致していれば、上記のスクリプトであればいつ実行しても値を取得できるはずです。
04. 為替レート取得のスニペット
import yfinance as yf
def fx_rates (ticker):
return yf.Ticker(ticker).history(period="1d").Close[0]
print (fx_rates("USDJPY=X"))
# output: 138.60000610351562
- 基本は株価と同じ扱いでいいのですが、Tickers に為替レートのティッカー(例: USDJPY=X) を混ぜ込むと処理が面倒なので株価と外為は別の処理として定義したほうがよいです(興味ある人はやってみてください。一応まとめてやれますがコードベースでややこしくなるので非推奨です)。
- "USDJPY=X" がドル円, "EURUSD=X" がユーロドルのティッカーです。法則がわかると思うので色々試してみてください。