非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【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')
 

 

 

 

スポンサーリンク

 - Python