Win11 WSL2 Ubuntu Python yfinance Ⅱ
yfinance 相関係数豪ドル/円日足予測ファイル
ここまでで、dsc-6.py からの変更点について説明しました。
引き続き、これらの変更点を加味して
yfinance 相関係数豪ドル/円日足予測ファイル
yfin_audjp_sou_d.py
をまとめます。
ファイル内容は以下のようになります。
# ① #!/home/yamada/miniconda3/bin/python3 #coding: utf-8 import numpy as np import pandas as pd import matplotlib.pyplot as plt import datetime from datetime import datetime as dt from sklearn import preprocessing from mplfinance.original_flavor import candlestick_ohlc def addBusinessDays(from_date, add_days): cur_date8 = [] # 21/03/30 cur_date4 = [] # 3/30 business_days_to_add = add_days current_date = from_date while business_days_to_add > 0: current_date += datetime.timedelta(days=1) weekday = current_date.weekday() if weekday >= 5: # sunday = 6 continue #土日は以下はスキップ # 年/月/日として文字列にする #例 21/03/30 e11 = current_date.strftime("%y/%m/%d") e22 = e11.replace("/0", "/") e33 = e22[3:] # 21/ 削除 cur_date8.append(e22) cur_date4.append(e33) business_days_to_add -= 1 return cur_date8, cur_date4 # ② df = pd.read_csv("/home/yamada/public_html/manep/yfin_audjp_d.csv") Open = df["open"].values High = df["high"].values Low = df["low"].values Close = df["close"].values Date = df["Datetime"].values Idx = df.index tstr = Date[-1][:19] # +00:00 削除 print("最新" + tstr) tdatetime = dt.strptime(tstr, '%Y-%m-%d %H:%M:%S') # 文字列をdatetimeに変換するのがstrptime()関数 # datetime.datetime.strptime(文字列, 書式指定文字列) lastday = addBusinessDays(tdatetime, 5) print(lastday) print(Idx) print("Close = ") print(Close) print("Idx[-1]=", Idx[-1]) #4998 print("Idx[-25]=", Idx[-25]) #4974 # print("Idx[-26:-1]=", Idx[-26:-1]) print("Idx[-25:]=", Idx[-25:]) #4974~4998 print("最新かつ予測含む25個のIdx_25 ", Idx[-25:] - Idx[-1]) #-24~0 Idx_25 = Idx[-25:] - Idx[-1] + 98 + 5 # 表示実置は0~98の99個、98シフト、予測位置+5 print("Idx_25[0]", Idx_25[0]) print("Idx_25[-1]",Idx_25[-1]) print("Idx_25 の内容") print(Idx_25) n_25 = 25 sl_cl_t = [] for n in range(Idx[-24]): sl_cl_t = np.append(sl_cl_t, Close[n:n+n_25]).reshape(n+1,n_25) print("sl_cl_t") print(sl_cl_t) print(sl_cl_t.shape) sl_cl_20 = sl_cl_t[:,:20] print("sl_cl_20") print(sl_cl_20) # kijyu = sl_cl_t[-1][5:] kijyu = sl_cl_t[-1, 5:] print("基準値") print(kijyu) cor = np.corrcoef(kijyu, sl_cl_20) print("cor") print(cor) cor1 = cor[1:, 0] cor_max = np.amax(cor1) print('相関max=', cor_max) c_max_id = np.argmax(cor1) print('相関max_ID=', c_max_id) # print(sl_cl_20[c_max_id]) print("相関する25個のデータ") print(sl_cl_t[c_max_id]) # print("基準") # print(kijyu) # plt.plot(sl_cl_t[c_max_id]) # 相関する25個 # plt.plot(kijyu) # ラスト20個 # plt.show() # インスタンスの作成 sscaler = preprocessing.StandardScaler() x = sl_cl_t[c_max_id].reshape(-1,1) print("元データsl_cl_t[c_max_id]を1×25 次元に変換") print(x) y = sscaler.fit_transform(x) print("sl_cl_t[c_max_id]標準偏差値") print(y) # 基準 sl_cl_t[-1]の標準偏差 s と平均値 m # 基準 kijyu の標準偏差 s と平均値 m # s = np.std(sl_cl_t[-1]) s = np.std(kijyu) print("標準偏差 s = ", s) m = np.mean(kijyu) print("平均値 m = ", m) w = y * s + m print("予測値 w") print(w) # plt.plot(w) # 相関する25個 # plt.plot(kijyu) # ラスト20個 # plt.show() # ③ Date_99 = Date[-99:] print("Date_99") print(Date_99) xDate = [] xD = [] for i, key in enumerate(Date_99): if(i % 10 == 0): e4 = str(key)[4:10] e6 = e4.replace("-0", "/") e7 = e6.replace("-", "/") e8 = e7.lstrip("/") xDate.append(e8) xD.append(i) xDate.append(lastday[1][4]) xD.append(i + 5) #5日間の予測日の追加 print(xDate) print(xD) Idx_99 = Idx[-99:] - Idx[-99] print(Idx_99) Open_99 = Open[-99:] High_99 = High[-99:] Low_99 = Low[-99:] Close_99 = Close[-99:] ohlc = zip( Idx_99, Open_99, High_99, Low_99, Close_99) fig = plt.figure( figsize=(8.34, 5.56)) ax = fig.add_subplot(1,1,1) ax.grid() candlestick_ohlc( ax, ohlc, width=0.5, alpha = 1, colorup='r', colordown='g') plt.xticks(xD, xDate) plt.title('AUS$ / JPY Correlation Days Chart')# ④ plt.xlabel('Date') plt.ylabel('Yen') plt.plot(Idx_25, w) # plt.show() plt.savefig( '/home/yamada/public_html/manep-img/yfin_sou_d.png') # w_5 = pd.DataFrame(w[-5:]) w_5 = np.round(w[-5:], 3) # 3桁まで表示 # print(w_5) cor_max100 = np.round(cor_max * 100, 3) w_5 = np.append(w_5, cor_max100) # print(w_5) w_5 = pd.DataFrame(w_5) print(w_5) lastday_me = np.append(lastday[0], '信頼度(%)') lastday_pd = pd.DataFrame(lastday_me) print(lastday_pd) df_concat = pd.concat([lastday_pd, w_5], axis = 1) print(df_concat) # ⑤ df_concat.to_csv( '/home/yamada/public_html/manep-img/yfin_sou_d.csv', header=False, index=False) # yamada@yama:~$ conda activate # (base) yamada@yama:~$ python3 public_html/yfin_audjp_sou_d.py
これで相関係数豪ドル/円日足予測ファイルができました。
引き続き、この yfin_audjp_sou_d.py ファイルを保存します。