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 ファイルを保存します。


  • yfinance 相関係数豪ドル/円日足予測ファイル保存 に進む
  • yfinance 相関係数豪ドル/円日足予測 に戻る
  • yfinance 相関係数豪ドル/円4時間足予測ファイル保存 に戻る
  • yfinance 相関係数豪ドル/円4時間足予測ファイル に戻る
  • yfinance 相関係数豪ドル/円4時間足予測 に戻る
  • 70VPS に戻る