【Python】yfinanceでドル円の1時間足データを日足データに加工したのでメモ
以前、yfinanceからダウンロードした日足データが正しく反映されないことを書きました。
1時間足データなら正しくダウロードできるので、そのデータから日足データに計算するプログラムを作ったので記録に残しておきます。日足データにしたあとにローソク足チャートを表示させています。
import yfinance as yf
import pandas as pd
import mplfinance as mpf
# ドル円のティッカーシンボル
ticker = "JPY=X"
# 1hデータをダウンロード
df = yf.download(ticker, start="2024-01-01", end="2025-01-01", interval="1h")
df.columns = df.columns.droplevel(1) # 'Ticker' レベルを削除
df.columns.name = None
df = df.reset_index()
df = df.drop('Adj Close', axis=1) # Adj Close列を削除
df = df.drop('Volume', axis=1) # Volume列を削除
# 空のDataFrameを作る(1日足用)
df2 = pd.DataFrame(columns=["Date", "Close", "High", "Low", "Open"])
st=0 #
n=0
for i in range(0, len(df)-1):
dt_crrnt = df.loc[i, 'Datetime'].date() #dt=時間データを除外した日付
dt_next = df.loc[i+1, 'Datetime'].date() #次の行の日付
# もし次の行が次の日だったら1日データとしてまとめる
if dt_crrnt!=dt_next:
dt = df.loc[st, 'Datetime']
op = df.loc[st, 'Open']
cl = df.loc[i, 'Close']
hi = df.loc[st:i, 'High'].max()
lo = df.loc[st:i, 'Low'].min()
df2.loc[n] = [dt, cl, hi, lo, op] #DataFrameに追加
st=i+1
n+=1
# Date列をインデックスに割り当てる
df2.set_index('Date', inplace = True)
print(df2)
# グラフのスタイル設定
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='--' # グリッド線のスタイル
)
# 末尾100行分をローソク足チャート表示
mpf.plot(df2.tail(100),
type='candle',
style=my_style,
mav=(5, 25), # 移動平均線(5日と25日)
figratio=(8,5),
title='USDJPY')
スポンサーリンク
