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