【Pyhon】yfinanceでドル円の1日足データを取得してハマった話
最近、Pythonのyfinanceライブラリを使ってドル円(USD/JPY)の為替データをダウンロードし、ローソク足チャートを描画してみました。interval=”1d”(1日足)を指定してデータを取得し、チャートを表示してみたところ…
あれ?何かおかしいです。ローソク足がすべてほぼ同じ位置に揃っており、チャートが1本の線のようになってしまいました。最初はコードにミスがあるのかと思い、何度も見直しましたが問題はありませんでした。データの取得方法に問題があるのかと思い、他のオプションを試してみても同じ結果です。正直、かなり時間を費やしてしまいました。
ちなみに、その時のソースコードはこちら。
import mplfinance as mpf
import yfinance as yf
# ドル円のティッカーシンボル
ticker = "JPY=X"
# データをダウンロード
df = yf.download(ticker, start="2024-08-01", end="2025-01-01", interval="1d")
# 項目行を見直し
# data = data.iloc[1:].reset_index(drop=True)
df.columns = df.columns.droplevel(1) # 'Ticker' レベルを削除
df.columns.name = None
print(df)
df = df.reset_index()
df.set_index('Date', inplace = True)
# チャートのデザイン(スタイル)を設定
my_style = mpf.make_mpf_style(
base_mpf_style='yahoo', # 既存のスタイル('yahoo', 'classic', 'default'などから選択)
marketcolors=mpf.make_marketcolors(
up='red', down='darkblue', edge='inherit', wick='black', volume='inherit'
),
facecolor='white', # 背景色
gridcolor='lightgray', # グリッド線の色
gridstyle='--' # グリッド線のスタイル
)
mpf.plot(df.tail(200),
type='candle',
style=my_style,
mav=(5, 25), # 移動平均線(5日と25日)
figratio=(10,4),
title='JPY=X')
原因はClose=Openだった
データを詳しく確認してみたところ、すべての行でClose(終値)とOpen(始値)の値が一致していることがわかりました。これが原因で、ローソク足が1本の線のように見えていたのです。
なぜこうなったのか?
考察してみた結果、yfinanceが提供している1日足のデータは、実際の終値と始値が正しく反映されていない可能性が高いです。
yfinanceはYahoo FinanceのAPIを通じてデータを取得していますが、為替(FX)のような24時間取引される資産の場合、1日足のデータがうまく処理されていないのかもしれません。
特に為替市場には株式市場のような「取引開始・終了」の時間がないため、1日の終値と翌日の始値が同じになるケースが生じているのではないかと考えられます。
解決策:1時間足(1h)でデータを取得してみた
試しにinterval=”1h”(1時間足)でデータを取得してみたところ、今度は正しいローソク足チャートが描画できました。どうやら、1時間ごとのデータなら始値と終値がきちんと反映されているようです。
import mplfinance as mpf
import yfinance as yf
# ドル円のティッカーシンボル
ticker = "JPY=X"
# データをダウンロード
df = yf.download(ticker, start="2024-08-01", end="2025-01-01", interval="1h") #1d->1h
# 項目行を見直し
df.columns = df.columns.droplevel(1) # 'Ticker' レベルを削除
df.columns.name = None
print(df)
df = df.reset_index()
df['Date'] = df['Datetime'] #1h足の場合はこれが必要
df = df.drop('Datetime', axis=1) #1h足の場合はこれが必要(2)
df.set_index('Date', inplace = True)
# チャートのデザイン(スタイル)を設定
my_style = mpf.make_mpf_style(
base_mpf_style='yahoo', # 既存のスタイル('yahoo', 'classic', 'default'などから選択)
marketcolors=mpf.make_marketcolors(
up='red', down='darkblue', edge='inherit', wick='black', volume='inherit'
),
facecolor='white', # 背景色
gridcolor='lightgray', # グリッド線の色
gridstyle='--' # グリッド線のスタイル
)
mpf.plot(df.tail(200),
type='candle',
style=my_style,
mav=(5, 25), # 移動平均線(5日と25日)
figratio=(10,4),
title='JPY=X')
ご覧の通りローソク足チャートを描くことができました。
残念ながら、yfinanceのinterval=”1d”で信頼できる1日足のチャートを作成するのは難しいようです。もし正確な1日足のデータが必要な場合は、他のAPIやデータソースを利用することを検討した方が良いかもしれません。
スポンサーリンク


