yfinance [1] [2] は、Yahoo Inc. が公開している API を利用した、Yahoo Finance の株価などの金融情報にアクセスしてデータを取得するために開発されたオープンソースの Python ライブラリです。
今回は、yfinance パッケージを利用して為替レートの1分足のデータを取得しようとしたときにハマってしまったことをまとめました。いや、正確には(試行錯誤の結果)うまくできたことを備忘録としてまとめました。😅
- Python で yfinance パッケージを利用して、6時間前から現在までの、ドル・円の為替レートの1分足のデータを取得してチャートにします。
下記の OS 環境で動作確認をしています。
![]() |
RHEL 9.4 | x86_64 |
Python | 3.12.1 | |
jupyterlab | 4.2.4 | |
mplfinance | 0.12.10b0 | |
yfinance | 0.2.41 |
以下の作業は JupyterLab 上でおこなっています。
まず、必要なパッケージをインポートします。
import datetime as dt import mplfinance as mpf import yfinance as yf |
タイムゾーン付きの時刻を準備
現在時刻とそこから6時間前の時刻をそれぞれ end と start の変数に代入します。
end = dt.datetime.now(dt.timezone(dt.timedelta(hours = 9 ))) delta = dt.timedelta(hours = 6 ) start = end - delta print ( 'start :' , start) print ( 'end :' , end) |
start : 2024-08-01 09:15:47.918382+09:00 end : 2024-08-01 15:15:47.918382+09:00
なお、dt.timezone(dt.timedelta(hours=9)) で、世界標準時(グリニッジ標準時)との時差を反映させています [3]。日本のタイムゾーンは世界標準時より9時間進んでいます。
株式銘柄のシンボルを指定して、yf.Ticker のインスタンス ticker を生成します。今回のドル・円の為替レートは 'USDJPY=X' で、株式銘柄のシンボルと同じように扱えます。その上で、準備しておいた時間 start と end で、1分足のデータフレームを取得します。
ticker = yf.Ticker( 'USDJPY=X' ) df = ticker.history(start = start, end = end, interval = '1m' ) df |
取得したデータフレームのインデックスに示されている時刻は、タイムゾーンが日本と異なっています。このまま mplfinance パッケージでローソク足チャートをプロットすると、当然ですがタイムゾーンが異なったままの時刻が表示されてしまいます。
mpf.plot(df, type = 'candle' , style = 'binance' , ylabel = 'USD - JPY' , figratio = ( 12 , 4 )) |
タイムゾーンの変換
タイムゾーンが違っていてもタイムスタンプの値は同じですが、これでは扱いずらいので、データフレームのインデックスを tz_convert メソッドで、日本のタイムゾーンに変換します。
df.index = df.index.tz_convert( 'Asia/Tokyo' ) df |
日本のタイムゾーンに変換されたことが確認できます。
あらためてローソク足チャートをプロットします。
mpf.plot(df, type = 'candle' , style = 'binance' , ylabel = 'USD - JPY' , figratio = ( 12 , 4 )) |
ちなみに、mplfinance のプロットを(mplfinance で)画像として出力するには、下記のようにします [4]。
mpf.plot(df, type = 'candle' , style = 'binance' , ylabel = 'USD - JPY' , figratio = ( 12 , 4 ), savefig = dict (fname = 'chart.jpeg' , dpi = 100 )) |
※ なお、為替レートは、日本時間で土曜日朝6時~月曜日朝8時(夏時間)まで、データが更新されません。
参考サイト
- ranaroussi/yfinance: Download market data from Yahoo! Finance's API
- yfinance · PyPI
- Python, datetime, pytzでタイムゾーンを設定・取得・変換・削除 | note.nkmk.me
- mplfinance/examples/savefig.ipynb at master · matplotlib/mplfinance

にほんブログ村
#オープンソース

0 件のコメント:
コメントを投稿