2024-08-01

yfinance で1分足の為替データを取得

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時間前の時刻をそれぞれ endstart の変数に代入します。

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' で、株式銘柄のシンボルと同じように扱えます。その上で、準備しておいた時間 startend で、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時(夏時間)まで、データが更新されません。

参考サイト

  1. ranaroussi/yfinance: Download market data from Yahoo! Finance's API
  2. yfinance · PyPI
  3. Python, datetime, pytzでタイムゾーンを設定・取得・変換・削除 | note.nkmk.me
  4. mplfinance/examples/savefig.ipynb at master · matplotlib/mplfinance

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

0 件のコメント: