さくら VPS 相関係数予測

さくら VPS 相関係数豪ドル/円4時間足予測ファイルⅢ

ここまでで、相関係数豪ドル/円4時間足予測ファイルⅢ の内容説明が完了しました。
4時間足大容量データを最新にする処理を付け加えた
予測ファイルⅢ dsc_4h-4.py
をまとめます。
以下にファイル内容を示します。
修正した部分は赤字にしています。
print 文はコメント化しています。


# dsc_4h-3.py より
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
from mplfinance.original_flavor import candlestick_ohlc

def addBusinessDays_4h(current_date, business_days_to_add_h):
# current_date : 処理する初日の日時 例) 2022-02-03 00:00:00
# business_days_to_add_h : 4時間ずつ延長する回数 
  cur_date8 = [] # 21/03/30 12~
  cur_date4 = [] # 3/30
  man_f = 1   # 月曜フラグ 0=count / 1=nocount
  doyo_f = 0  # 土曜フラグ 0 or 1
  current_date0 = current_date
  weekday0 = current_date0.weekday()
  if(weekday0 == 0): #月
    man_f = 0
    
  while business_days_to_add_h > 0:
    current_date += datetime.timedelta(hours=4)
    weekday = current_date.weekday()
    hour_doyo = current_date.hour
    if weekday == 6: # sunday = 6
      continue
    if((weekday == 5) and (hour_doyo == 8)): #土
      doyo_f = 1
    if((weekday == 5) and (doyo_f == 1)): #土
      continue
      
    if((weekday == 0) and (man_f == 1)): #月
      man_f = 0 
      continue
  # 日はスキップ
  # 月は一回のみスキップ
  # 年/月/日 時刻として文字列にする
  # 例 21/03/30 12~  e22, cur_date8   
    e11 = current_date.strftime("%y/%m/%d %H")
    e22 = e11.replace("/0", "/")
    e22 = e22 + "~"
    e33 = e22[3:] # 21/ 削除
    cur_date8.append(e22)
    cur_date4.append(e33)
    business_days_to_add_h -= 1
  return cur_date8, cur_date4
  
# 4時間足大容量データ最新化処理追加
# 古い大容量データ取込み
xl_df1 = pd.read_csv("public_html/manep-w/mane_chart_go_long_4h.csv", encoding="cp932")
# print(xl_df1)
# 新小容量データ取込み
xl_df2 = pd.read_csv("public_html/manep_4h/mane_chart_go_4h.csv", encoding="cp932")
# print(xl_df2)
# データを結合する
xl_df12 = pd.concat([xl_df1, xl_df2])
# データの一覧
# print(xl_df12)
# 重複データ削除
xl_df = xl_df12.drop_duplicates(keep='first', ignore_index=True)
# print(xl_df)
# CSVファイルに書込・保存
# ヘッダーもインデックスも含めて出力。
xl_df.to_csv('public_html/manep-w/mane_chart_go_long_4h.csv', quoting=1, index=False, encoding='cp932')
# xl_df = pd.read_csv(
#  "/home/yamada/public_html/manep-w/mane_chart_go_long_4h.csv",
#  encoding="cp932")

Close = xl_df["終値(売り)"].values
Open = xl_df["始値(売り)"].values
High = xl_df["高値(売り)"].values
Low = xl_df["安値(売り)"].values
Date = xl_df["日付"].values
Idx = xl_df.index
Idx_30 = Idx[-30:] - Idx[-1] + 98 + 6

Idx_99 = Idx[-99:] - Idx[-99]
Open_99 = Open[-99:]
High_99 = High[-99:]
Low_99 = Low[-99:]
Close_99 = Close[-99:]
Date_99 = Date[-99:]

tstr = Date[-1]
tdatetime = datetime.datetime.strptime(tstr, '%Y/%m/%d %H:%M:%S')
lastday = addBusinessDays_4h(tdatetime, 6)

xDate = []
xD = []
dayf = 0
for i, key in enumerate(Date_99):
  day00 = str(key)[11:19]
  if((dayf == 1) and (day00 == '00:00:00')):
    dayf = 0
  else:
    if((dayf == 0) and (day00 == '00:00:00')):
      e4 = str(key)[4:10]
      e6 = e4.replace("/0", "/")
      e8 = e6.lstrip("/")
      xDate.append(e8)
      xD.append(i)
      dayf = 1
# ラストの X 軸日付処理
# 実デ-タが存在し、かつ dayf == 0 の時は
# ラストの日付には時刻を含めた X 軸日付を付与
if(dayf == 0):
  e4l = tstr[7:14]
  e6l = e4l.replace("/0", "/")
  e8l = e6l.lstrip("/")
  xDate.append(e8l)
  xD.append(i)

# dsc_4h-2.py より
from sklearn import preprocessing

n_30 = 30
sl_cl_t = []
for n in range(Idx[-29]):
  sl_cl_t = np.append(sl_cl_t, Close[n:n+n_30]).reshape(n+1,n_30)

# print("sl_cl_t")
# print(sl_cl_t)
# print(sl_cl_t.shape)

sl_cl_24 = sl_cl_t[:,:24]
# print("sl_cl_24")
# print(sl_cl_24)
kijyu = sl_cl_t[-1, 6:]

# print("基準値")
# print(kijyu)

cor = np.corrcoef(kijyu, sl_cl_24)

# 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("相関する30個のデータ")
# print(sl_cl_t[c_max_id])
# print("基準")
# print(kijyu)

# インスタンスの作成
sscaler = preprocessing.StandardScaler()
x = sl_cl_t[c_max_id].reshape(-1,1)

# print(" 元データsl_cl_t[c_max_id]を1×30 次元に変換")

# print(x)
y = sscaler.fit_transform(x)
# print("sl_cl_t[c_max_id]標準偏差値") 
# print(y)

# 基準 kijyu の標準偏差 s と平均値 m
s = np.std(kijyu)
# print("標準偏差 s = ", s)

m = np.mean(kijyu)
# print("平均値 m = ", m)

w = y * s + m
# print("予測値 w")
# print(w)

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 chart')
plt.xlabel('Date')
plt.ylabel('Yen')
plt.plot(Idx_30,w) # 相関する30個
# plt.show()
plt.savefig(
  '/home/yamada/public_html/manep-img/mane_chart_go_4h.png')

# データ保存
w_6 = np.round(w[-6:], 3) # 3桁まで表示
# print(w_6)
cor_max100 = np.round(cor_max * 100, 3)
w_6 = np.append(w_6, cor_max100)
# print(w_6)
w_6 = pd.DataFrame(w_6)
# print(w_6)
lastday_me = np.append(lastday[0], '信頼度(%)')  
lastday_pd = pd.DataFrame(lastday_me)
# print(lastday_pd)
df_concat = pd.concat([lastday_pd, w_6], axis = 1)
# print(df_concat)

df_concat.to_csv(
 '/home/yamada/public_html/manep-img/mane_chart_dsc_4h.csv',
 header=False, index=False)

# yamada@yama:~$ python3 public_html/dsc_4h-4.py

ここまでで、さくら VPS 相関係数豪ドル/円4時間足予測ファイルⅢが作成できました。
引き続き、このファイルの動作確認をしていきます。


  • さくら VPS 相関係数豪ドル/円4時間足予測ファイルⅢ確認 に進む
  • さくら VPS 相関係数豪ドル/円予測データ準備ファイル動作確認 に戻る
  • 70VPS に戻る