発端
yfinanceで株価データを取得してシステムトレードをしていましたが、2025/2/19にいきなり株価データが取得できなくなりました。
IP制限でもかけられたかな?と思いましたが、X(旧twitter)でも同様の書き込みが見受けられたので調査を開始してみました。
エラーの状況
日経平均のデータを取得しようとすると、以下エラーになってしまう。
start:2025-02-19
end:2025-02-20
[*********************100%%**********************] 1 of 1 completed
1 Failed download:
['%5EN225']: JSONDecodeError('Expecting value: line 1 column 1 (char 0)')
データのダウンロードが失敗しているように見える。
yfinanceをアップデートすると解消したという書き込みを見つけたので更新状況を確認してみます。
pipの情報を見ると、今日0.2.54がリリースされていました。
yfinance 0.2.54
Githubの変更履歴を見ると「Hotfix user-agent #2277」という記載がありました。
user-agentで弾かれていたのかな?
とりあえずyfinanceをアップデートしてみる。
Change Log
ダウンロードは成功するがデータが上手く取得できない
データは取得できるようになりましたが、株価データの抽出が上手くいかない状態になりました。
取得したデータを見るとこんな感じ。
あれ?Tickerなんて行あったかな?
Price Close High Low Open Volume
Ticker %5EN225 %5EN225 %5EN225 %5EN225 %5EN225
Date
2025-02-19 39164.609375 39298.050781 38994.699219 39230.621094 0
今まではネットに転がっているように以下のような感じで株価データを抽出していました。
始値を取得しようとすると、なぜか3行取得されてしまう。
これはおかしい・・・・
web_data.loc[str('2025-02-19'),'Open']
--------------------------------------------
Ticker
%5EN225 39230.621094
Name: 2025-02-19 00:00:00, dtype: float64
原因としてTickerが増えた影響かな??と思いColumn情報を見てみます。
カラム名が変わっていました。
Columns: [(Close, %5EN225), (High, %5EN225), (Low, %5EN225), (Open, %5EN225), (Volume, %5EN225)]
ということで、カラム名を表示された内容に変えてみます。
web_data.loc[str('2025-02-19'),('Open', '%5EN225')]
--------------------------------------------
39230.62109375
始値が取得できるようになりました。
私の環境では「yfinanceのアップデート」「カラム名の変更」の2つを行う必要がありました。