Win11 WSL2 Ubuntu Python FFT & IFFT

元デ-タをロ-ソク足表示に変更

ここまでで、豪ドル/円 大容量デ-タを FFT 解析して、豪ドル/円を予測できました。
引き続き、予測図の元デ-タをロ-ソク足表示に変更していきます。
詳細は
Win11 WSL2 Ubuntu Python RNN--元デ-タと予測値プロット表示・・・①
を読んでいただくとして
ロ-ソク足表示に必要なデ-タは
Idx_100 = Idx[-100:] - Idx[-100]
これは前ページで定義済
Date_100 = Date[-100:]
これは次項で説明
Close_100 = Close1[-100:]
Open_100 = Open[-100:]
High_100 = High[-100:]
Low_100 = Low[-100:]
の6列です。
これで100本のローソク足が Idx_100 の位置に表示されます。

X 軸日付処理

mane_chart_go_long.csv デ-タの中の日付は
2020/10/20 00:00:00
のようになっており、そのまま X 軸日付表示をさせるには文字列が長すぎます。
よってこれを 10/20 のように短縮します。
の詳細は①を読んでいただくとしてファイル内容は下記のようになります。

   
xDate = []
xD = []
for i, key in enumerate(Date_100):
  if(i % 10 == 0):
    e4 = str(key)[4:10]
    e6 = e4.replace("/0", "/")
    e8 = e6.lstrip("/")   
    xDate.append(e8)
    xD.append(i)  

予測最終日取得

予測最終日を取得するには
日付 from_date から 日数 add_days 後の日付 current_date を求める関数
addBusinessDays(from_date, add_days)
を利用すると求めることができます。
addBusinessDays 関数の作成方法については
Python で 豪ドル/円チャ-ト を探求-予測最終日取得
に説明がありますので参考にしてください。
予測最終日取得関数は以下のようになります。

import datetime
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

予測最終日取得関数使用

具体的に予測最終日取得関数を使用します。
mane_chart_go_long.csv デ-タの中の日付のラスト
Date[-1]
から5平日後の予測最終日を求めます。
関数 addBusinessDays(from_date, add_days)
に渡す引数は datetime 型である必要があります。
Date[-1] は文字型ですので、これを datetime 型に変換します。
文字列を datetime に変換するのが strptime() 関数です。
書式は
datetime.datetime.strptime(文字列, 書式指定文字列)
です。
ライブラリを取り込む時に、
import datetime
from datetime import datetime as dt
と書くと
dt.strptime(文字列, 書式指定文字列)
と省略して書くことができます。
Date[-1] は
2020/04/15 10:00:00
のように年月日と時分秒が記述されていますので
tstr = Date[-1]
tdatetime = dt.strptime(tstr, '%Y/%m/%d %H:%M:%S')
とすると日付のラストは datetime 型の日付に変換されます。
後は、予測最終日取得関数を呼び出すだけで予測最終日 lastday を求めることができます。
lastday = addBusinessDays(tdatetime, 5)
答えは
lastday[1] に予測最終日までの5日間が 月/日 の文字列型で入っています。
予測最終日は lastday[1][4] に入っています。
ちなみに lastday[0] には予測最終日までの5日間が 年/月/日 の文字列型で入っています。
xData の X 軸の目盛り日付と
xD の日付表示位置に lastday を付け加えます。
xDate.append(lastday[1][4])
xD.append(i + 5)

元デ-タロ-ソク足表示

元デ-タをロ-ソク足表示する準備が整いました。
Win11 WSL2 Ubuntu Python RNN--WSL2 Python RNN Keras ロ-ソク足本体表示
を参考にして、ファイル化します。 ついでに予測値も一緒に表示します。

ohlc = zip(
Idx_100, Open_100, High_100, Low_100, Close_100)
fig = plt.figure(
  figsize=(8.34, 5.56))
ax = fig.add_subplot(1,1,1)
ax.grid()
# 解析結果予測値表示
plt.plot(t_105, result_105)
# -----
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.savefig(
# '/home/yamada/public_html/manep-img/fft_go_long.png')
# )
plt.show()

予測値の保存

予測値結果を保存します。
2つの配列(予測日と予測値)を pandas concat 関数を使用して横(列)方向へ連結することにします。
まずは、それぞれの配列を DataFrame 型に変換します。
これで、pandas で操作することが可能になりました。
import pandas as pd
print("予測値=最終日+1~+5日")
valhe = np.round(result_105[100:], 3) #3桁まで表示
valhe_pd = pd.DataFrame(valhe)
lastday_pd = pd.DataFrame(lastday[0])
この2つを pandas concat 関数で横(列)方向へ連結します。
横(列)方向指定 axis = 1 を忘れないでください。
df_concat = pd.concat([lastday_pd, valhe_pd], axis = 1)
これを csv ファイルとして保存します。
保存するファイルフォルダ名は絶対パスで指定します。
そして、header=False, index=False
としてヘッダとインデックスは保存なしとします。
df_concat = pd.concat([lastday_pd, valhe_pd], axis = 1)
print(df_concat)
df_concat.to_csv(
'/home/yamada/public_html/manep-img/fft_go_long.csv',
header=False, index=False)

ここまで、FFT 解析による豪ドル/円予測Ⅱについて小出しにその詳細を説明してきました。
引き続き、これを一つのファイルにまとめます。


  • FFT 解析による豪ドル/円予測Ⅱファイルまとめ に進む
  • 豪ドル/円 大容量デ-タ FFT 解析 に戻る
  • FFT 解析による豪ドル/円予測Ⅱ に戻る
  • 70VPS に戻る