さくら VPS Python 豪ドル/円 4時間足予測

ガウスフィット-豪ドル/円4時間足予測ファイルまとめ

ここまで、ガウスフィット-豪ドル/円4時間足予測ファイルについていろいろと説明してきました。
まとめると以下のようになります。
FFT 解析 豪ドル/円4時間足予測ファイルまとめ
のなかで掲示している
si_fft_filter-go-02-4h.py
からの変更点については赤字で表示しています。


  #!/usr/bin/python3
  # -*- 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
 
  # 追加1
  # ガウス関数定義
  def gauss(x, mu, s):
  return np.exp(-(x - mu)**2 / (2 * s**2))

  # 線形基底関数モデル ----------------
  def gauss_func(w, x):
    m = len(w) - 1
    xx = len(x) - 1
  # y(x,w) = w0Φo(x) + w1Φ1(x) + w2Φ2(x) + w3
  # なら len(w) = 4 ∴ m = 3
    mu = np.linspace(0, xx, m)
    s = mu[1] - mu[0]
  # sは隣り合ったガウス関数の中心間の距離
  # 設計者が決定
    y = np.zeros_like(x) # x と同じサイズで要素が 0 の行列 y を作成
    for j in range(m):
      y = y + w[j] * gauss(x, mu[j], s)
    y = y + w[m]
    return y

  # 線形基底関数モデル 厳密解 -----------------
  def fit_gauss_func(x, t, m):
    xx = len(x) - 1
    mu = np.linspace(0, xx, m)
    # print(mu)
    s = mu[1] - mu[0]
    # print(s)
    n = x.shape[0]
    psi = np.ones((n, m+1))
    for j in range(m):
      psi[:, j] = gauss(x, mu[j], s)
    psi_T = np.transpose(psi)
    
    b = np.linalg.inv(psi_T.dot(psi))
    c = b.dot(psi_T)
    w = c.dot(t)
    return w

  # np.dot(A, B) と A.dot(B) は同じ

  def min_max(xx, axis = None): # 配列の軸方向は考えない
    min = xx.min(axis=axis,keepdims=True) # 次元は減らさない
    max = xx.max(axis=axis,keepdims=True)
    result = (xx-min)/(max-min)
    return result, min ,max

  # 追加1 end  
 
  xl_df = pd.read_csv(
   "/home/yamada/public_html/manep_4h/mane_chart_go_4h.csv",
   encoding="cp932")

  Close = xl_df["終値(売り)"].values
  app = Close[-1:]
  app1 = np.hstack((app, app, app, app, app, app))
  Close1 = np.hstack((Close, app1))
 
  # 追加2
  Close2,Close1_min,Close1_max = min_max(Close1)
  # Close2=正規化値
  # 最安値(Close1_min)
  # 最高値(Close1_max)
  # 追加2 end
 
  Idx = xl_df.index
  # Idx は 0 スタ-ト
  Idx6 = Idx[-6:] + 6
  Idxlg = np.r_[Idx, Idx6]
  
  # 削除1
  '''
  cent = np.average(Close1)
  Close2 = Close1 - cent
  f = np.fft.fft(Close2) # フーリエ変換(FFT)
  fc = 10          # cut off freq.
  f[fc:] = 0       # low pass filter
  f_ifft = np.fft.ifft(f*2)
  f_real = f_ifft.real   # 実数部のみにする

  f_ifft_sht = f_real + cent
  p_pand = np.round(f_ifft_sht[-6:],3)
  f_ifft_sht_pd = pd.DataFrame(p_pand)
  '''
  # 削除1 end
  
  # 追加3
  M = 12
  W = fit_gauss_func(Idxlg, Close2, M)
  # print(W)
  y = gauss_func(W, Idxlg)
  val_ch = y * (Close1_max - Close1_min) + Close1_min
  valhe = np.round(val_ch[-6:], 3)#3桁まで表示
  valhe_pd = pd.DataFrame(valhe)
  # 追加3 end
  
  Open = xl_df["始値(売り)"].values
  High = xl_df["高値(売り)"].values
  Low = xl_df["安値(売り)"].values
  Date = xl_df["日付"].values
  Idx = xl_df.index

  tstr = Date[-1]
  tdatetime = datetime.datetime.strptime(tstr, '%Y/%m/%d %H:%M:%S')
  # 文字列をdatetimeに変換するのがstrptime()関数
  # datetime.datetime.strptime(文字列, 書式指定文字列)
  lastday = addBusinessDays_4h(tdatetime, 6)
  # pandas concat 関数で横(列)方向へ連結 axis=1 を忘れるな
  lastday_pd = pd.DataFrame(lastday[0])
   
  # 削除2[変更1]
  '''
  p_pand_pd = pd.DataFrame(p_pand)
  df_concat = pd.concat([lastday_pd, f_ifft_sht_pd], axis = 1)
  df_concat.to_csv(
   '/home/yamada/public_html/manep-img/mane_chart_go-fil_4h.csv',
   header=False, index=False)
  ''' 
  # 追加4[変更1]
   df_concat = pd.concat([lastday_pd, valhe_pd], axis = 1)
   # print(df_concat)
   df_concat.to_csv(
    '/home/yamada/public_html/manep-img/mane_chart_go-gau_4h.csv',
    header=False, index=False)
  # 変更1 end
 
  xDate = []
  xD = []
  dayf = 0

  for i, key in enumerate(Date):
    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

  if(dayf == 0):
    e4l = tstr[7:14]
    e6l = e4l.replace("/0", "/")
    e8l = e6l.lstrip("/")
    xDate.append(e8l)
    xD.append(i)

  ohlc = zip(
   Idx, Open, High, Low, Close)
  fig = plt.figure(
   figsize=(8.34, 5.56))

  ax = fig.add_subplot(1,1,1)
  ax.grid()
 
  # 削除3[変更2]
  '''
  plt.plot(
   Idx, f_ifft_sht[:-6],
   Idx6, f_ifft_sht[-6:],'bo')
  ''' 
  # 追加5[変更2]
  plt.plot(
   Idx, val_ch[:-6],
   Idx6, val_ch[-6:], 'bo')  
  # 変更2 end
 
  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')
 
  # 削除4[変更3]
  '''
  plt.savefig(
   '/home/yamada/public_html/manep-img/mane_chart_go-fil_4h.png')
  ''' 
  # 追加6[変更3]
  plt.savefig(
   '/home/yamada/public_html/manep-img/mane_chart_go-gau_4h.png')
  # 変更3 end
   

ここまでで、ガウスフィット-豪ドル/円4時間足予測ファイルが整理できました。
引き続きこのファイルの作成をしていきます。


  • ガウスフィット-豪ドル/円4時間足予測ファイル作成 に進む
  • 豪ドル/円4時間足予測ガウス基底関数計算 に戻る
  • ガウスフィット-豪ドル/円4時間足予測 に戻る
  • 70VPS に戻る