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
です。
ここまでで、日足為替情報取得アップデートファイルが作成できました。
引き続き、このファイル実行して行きます。