Win11 WSL2 Ubuntu Python yfinance
日足為替情報取得アップデート
ここまでで、日足為替情報取得ファイルの実行確認できました。
引き続き、日足為替情報取得アップデートファイルを作成します。
これまでは、730日分の4時間足データを取得することからファイルを作成してきました。
しかし、毎回古い730日分の4時間足データを取得するのは無駄があります。
最新の10日分ぐらいの4時間足データを取得し、古いデータをアップデートすることにより、
効率化します。
日足為替情報取得 yfin_audjp_test3.py ファイルを改造します。
4時間足為替情報取得アップデートへの変更
日足為替情報取得 yfin_audjp_test3.py ファイルから変更して行きます。
- 取得期間変更
4時間足データの取得期間を730日から10日にし、ダウンロード時間を短縮します。
df = yf.download(pair, period='10d', interval='4h', auto_adjust=True) - 4時間足過去データの読出
yfin_audjp_test3.py で4時間足過去データを
/home/yamada/public_html/manep/yfin_audjp_4h.csv
に保存しました。
これを読みだします。dfd_4h = pd.read_csv('/home/yamada/public_html/manep/yfin_audjp_4h.csv', index_col='Datetime')
Datetime の値をデータフレームのインデックスラベルとして使いたいので index_col 引数を指定します。
index_col = 'Datetime' - 4時間足過去データの最後
4時間足過去データの最後のデータは4時間足が確定する前の未確定のデータなのでこれを削除します。
dfd_4h = dfd_4h.drop(dfd_4h.index[-1])
index[-1] は最後の行を指しています。
- 4時間足過去データと最新データの結合
4時間足過去データ dfd_4h と最新データ df を結合します。
dfd_4h1 = pd.concat([dfd_4h, df]) - 重複した行の削除準備
4時間足データ値は有効数字が16桁もあります。
有効数字を5桁ぐらいにしてから比較しないと上手く一致を検出できません。
python 組込関数 round() を使います。
round() は、ほぼ四捨五入です。
引数には小数点何桁で丸めるかを指定します。
dfd_4h1 = dfd_4h1.round(4) - 完全重複した行の削除
drop_duplicates( ) を使用して重複した行を削除します。
dfd_4h2 = dfd_4h1.drop_duplicates(keep='last')
open,high,low,close がすべて同じ値の行は最新(keep='last')を残します。
古い行は廃棄します。 - 重複行削除データを保存
出来上がった4時間足データを yfin_audjp_4h.csv として保存します。
dfd_h2.to_csv('/home/yamada/public_html/manep/yfin_audjp_d.csv')
日足為替情報取得アップデートへの変更
引き続き、日足為替情報取得アップデートファイルを作成します。
yfin_audjp_test3.py ファイルを元に変更して行きます。
yfin_audjp_test3.py ファイルでできた日足データ dfd の最初は
不十分な4時間足データ(6本に満たないデータ)から算出された可能性があり
削除する必要があります。
位置インデックスを指定して先頭行を削除します。
dfd = dfd.iloc[1:]
yfin_audjp_test3.py で日足過去データを
/home/yamada/public_html/manep/yfin_audjp_d.csv
に保存しました。
これを読みだします。
dfd_d = pd.read_csv('/home/yamada/public_html/manep/yfin_audjp_d.csv', index_col='Datetime')
Datetime の値をデータフレームのインデックスラベルとして使いたいので index_col 引数を指定します。
index_col = 'Datetime'
日足過去データの最後のデータは日足が確定する前の未確定のデータなのでこれを削除します。
dfd_d = dfd_d.drop(dfd_d.index[-1])
index[-1] は最後の行を指しています。
日足過去データ dfd_d と最新データ df を結合します。
dfd_d1 = pd.concat([dfd_d, dfd])
日足データ値は有効数字が16桁もあります。
有効数字を5桁ぐらいにしてから比較しないと上手く一致を検出できません。
python 組込関数 round() を使います。
round() は、ほぼ四捨五入です。
引数には小数点何桁で丸めるかを指定します。
dfd_d1 = dfd_d1.round(4)
drop_duplicates( ) を使用して重複した行を削除します。
dfd_d2 = dfd_d1.drop_duplicates(keep='last')
open,high,low,close がすべて同じ値の行は最新(keep='last')を残します。
古い行は廃棄します。
出来上がった日足データを yfin_audjp_d.csv として保存します。
dfd_d2.to_csv('/home/yamada/public_html/manep/yfin_audjp_d.csv')
日足為替情報取得アップデートファイルまとめ
変更内容をまとめるとファイル内容は以下のようになります。
#!/home/yamada/miniconda3/bin/python3 #coding: utf-8 import yfinance as yf import pandas as pd import datetime from pandas.tseries.offsets import Hour pair='AUDJPY=X' print("日本標準時(JST)現在時刻") print(datetime.datetime.now()) df15 = yf.download(pair, period='1d', interval='15m', auto_adjust=True) print(df15.tail()) df = yf.download(pair, period='10d', interval='4h', auto_adjust=True) # df = yf.download(pair, period='730d', interval='4h', auto_adjust=True) # 4時間足の時 max 730d まで print(df.head()) print(df.tail()) print(df.info()) print('Volume 削除') df.drop(labels=['Volume'], axis=1, inplace=True) print(df.tail()) print("列 Close と 列 Open を入替") df = df[['Open', 'High', 'Low', 'Close']] print(df.tail()) print("カラムラベルの変更") df.columns = ['open', 'high', 'low', 'close'] print(df.tail()) df0 = df.copy() print("df0") print(df0.tail()) # df.to_csv('/home/yamada/public_html/manep/yfin_audjp_4h.csv') # 世界時(UTC)からの時差(+9時間)調整 df.index = df.index + Hour(9) print('9H shift') print(df.tail(5)) print("4時間足 過去データ読出") dfd_4h = pd.read_csv( '/home/yamada/public_html/manep/yfin_audjp_4h.csv', index_col='Datetime') print(dfd_4h.tail(5)) # ラストデータ削除 dfd_4h = dfd_4h.drop(dfd_4h.index[-1]) print("過去データ+新データ") dfd_4h1 = pd.concat([dfd_4h, df]) print(dfd_4h1.tail(5)) dfd_4h1=dfd_4h1.round(4) dfd_4h2 = dfd_4h1.drop_duplicates(keep='last') print("すべての列値が同じものは最新を残す") print(dfd_4h2.tail(5)) print("4時間足 マージデータ yfin_audjp_4h.csv に書込") dfd_4h2.to_csv('/home/yamada/public_html/manep/yfin_audjp_4h.csv') print("4時間足処理終わり・・・・・・・・") # 元データ df0 からの時差(+1時間)調整 df0.index = df0.index + Hour(1) print('1H shift') print(df.tail(20)) print("4時間足を日足に変換") dfd = df0.resample('D').agg({ 'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last'}) print(dfd.tail(10)) print("すべての値が欠損値NaN行削除") dfd = dfd.dropna(how='all') print(dfd.tail(10)) print("できた日足の最初") print(dfd.head()) # できた日足の最初は不十分な4時間足データ(6本に満たないデータ) # から算出された可能性あり削除する print("先頭行を削除") dfd = dfd.iloc[1:] print(dfd.head()) print("過去データ読出") dfd_d = pd.read_csv( '/home/yamada/public_html/manep/yfin_audjp_d.csv', index_col='Datetime') print(dfd_d.tail(10)) # ラストデータ削除 dfd_d = dfd_d.drop(dfd_d.index[-1]) print("過去データ + 新データ") dfd_d1 = pd.concat([dfd_d, dfd]) print(dfd_d1.tail(20)) dfd_d1 = dfd_d1.round(4) dfd_d1 = dfd_d1.drop_duplicates(keep='last') print("重複削除") print(dfd_d1.tail(20)) print("日足データを yfin_audjp_d.csv に書込") dfd_d1.to_csv('/home/yamada/public_html/manep/yfin_audjp_d.csv')
上記のファイル内容の
#!/home/yamada/miniconda3/bin/python3
~・・・~
最後
までをすべてをコピ-し、Python ファイルを作成します。
自分の PC Windows で TeraPad 等を使用して作成できたら
\\wsl.localhost\Ubuntu-22.04\home\yamada\public_html
に保存します。
ファイル名は
yfin_audjp_4h.py
とします。
文字コ-ドは、UTF-8N
BOM なし
改行コ-ドは、LF
です。
ここまでで、日足為替情報取得アップデートファイルが作成できました。
引き続き、このファイル実行して行きます。