背景・目的
量子コンピュータ(疑似量子コンピュータを含む)技術の発展により,益々High Frequency Trading(HFT)が盛り上がってくると思われます.一方で,個人投資家はとてつもないリソースを使うことは困難です.そのため,手軽に(できればお金をかけずに)得られる情報から金脈を発見する必要があります.
例えば,pandas-datareaderを用いることで米国版Yahoo FinanceやStooqから株価データ,Federal Reserve Economic Data(FRED)などから経済的なデータを取得可能です.このように無料のツールでもある程度の情報取得は可能ですが,ひとつのツールで全て完結!ともいかないのが厄介なところです.
前置きは手短にして・・・
今回は,特にpandas-datareaderで米国版Yahoo FinanceとFREDから株価と経済的なデータを取得する際に問題となるyf.pdr_override()について簡単に対応方法をまとめました.
問題点と対応策
問題点
yf.pdr_override()を使うと米国版Yahoo Finance以外のデータをpandas-datareaderでダウンロードできなくなります.
pandas-datareaderでは,チュートリアルに従ってYahoo Financeからデータを取得しようとするとエラーが出ます(やまもと, 2023).その対応策としてyf.pdr_override()を追加するのですが,これを入れることでYahoo Finance以外のデータを取得できない状態になります.
import pandas_datareader.data as web
import yfinance as yf
from dateutil.relativedelta import relativedelta
from datetime import date as dt
yf.pdr_override()
df_fred = web.DataReader('DGS2', 'fred', ago)
# 結果
1 Failed download:
['DGS2']: Exception('%ticker%: No timezone found, symbol may be delisted')
例えば,FREDのデータを取得しようとすると,このようにエラーメッセージが表示されます.
対応策
対応策としては,株価データ取得にはyf.downloadを使用し,他のデータ取得時にはweb.DataReaderを使用します.
※このように使い分けなくてもpandas-datareaderでは,Stooqからも株価データは取得可能なのですが,StooqではAdjclose(調整後終値)の値がなく自身で計算する手間がかかります(Tatsu Sekine, 2022).
import pandas_datareader.data as web
import yfinance as yf
from dateutil.relativedelta import relativedelta
from datetime import date as dt
today = dt.today()
ago = today - relativedelta(years=1)
df_stock = yf.download('7203.T', ago)
df_fred = web.DataReader('DGS2', 'fred', ago)
# 結果 : df_stock
Date Open High Low Close Adj Close Volume
2023-04-17 1823.0 1841.5 1822.5 1834.0 1813.978149 18967700
2023-04-18 1844.0 1846.0 1827.5 1833.5 1813.483643 23312400
2023-04-19 1833.0 1836.0 1816.5 1823.0 1803.098267 16859000
2023-04-20 1810.0 1818.0 1796.0 1813.5 1793.702026 21975500
2023-04-21 1790.0 1808.5 1784.0 1802.0 1782.327515 21559900
... ... ... ... ... ... ...
2024-04-10 3750.0 3760.0 3722.0 3740.0 3740.000000 17062700
2024-04-11 3722.0 3795.0 3721.0 3781.0 3781.000000 23458700
2024-04-12 3813.0 3815.0 3755.0 3767.0 3767.000000 21094100
2024-04-15 3721.0 3767.0 3685.0 3767.0 3767.000000 21091500
2024-04-16 3742.0 3753.0 3630.0 3649.0 3649.000000 29226300
# 結果:df_fred
DATE DGS2
2023-04-17 4.18
2023-04-18 4.19
2023-04-19 4.24
2023-04-20 4.14
2023-04-21 4.17
... ...
2024-04-08 4.78
2024-04-09 4.74
2024-04-10 4.97
2024-04-11 4.93
2024-04-12 4.88
まとめ
今回は,米国版Yahoo FinanceとFREDから株価と経済的なデータを取得する際に問題となるyf.pdr_override()について簡単にまとめました.結論は,『米国版Yahoo Financeのデータはyf.downloadで,FREDのデータはpandas-datareaderで取得するのが良い』です.もし,他の良い手法などありましたらご教示いただけますと幸いです.
参考文献やサイトなど
- pandas-datareader(Ver. 0.10.0). 2021. https://pandas-datareader.readthedocs.io/en/latest/, accessed on 16 Apr. 2024.
- Tatsu Sekine. 2022. pythonで株価を取得するstooq版. https://qiita.com/tatsu_sekine/items/e252ea9436a47cda071a, accessed on 16 Apr. 2024.
- やまもと. 2023. pandas-datareaderでyahooファイナンスのデータを取得する方法. https://knowledge-bridge.info/technology/statistics/3654/, accessed on 16 Apr. 2024.
- 上脇優人. 2024. S&P500とは?(用語解説とデータ取得方法). https://finsoken.com/a-0001/, accessed on 16 Apr. 2024.