Win11 WSL2 Ubuntu Python FFT & IFFT
元デ-タをロ-ソク4時間足表示に変更
ここまでで、豪ドル/円 大容量デ-タを FFT 解析して、豪ドル/円4時間足を予測できました。
引き続き、予測図の元デ-タをロ-ソク4時間足表示に変更していきます。
次の内容が参考になります。
さくら VPS Python 豪ドル/円 4時間足予測
--豪ドル/円 CSV ダウンロ-ドデ-タをロ-ソク足表示 ①
--X 軸日付予測4時間足最終日時取得 ②
--予測最終日時取得関数まとめ ③
--豪ドル/円ロ-ソク4時間足と予測値の表示
--豪ドル/円4時間足予測まとめ
まずは、ダウンロ-ドデ-タした豪ドル/円4時間足 CSV デ-タ
manep_4h/mane_chart_go_4h.csv
を展開します。
ロ-ソク足表示に必要なデ-タは
Open = xl_df["始値(売り)"].values
High = xl_df["高値(売り)"].values
Low = xl_df["安値(売り)"].values
Close = xl_df["終値(売り)"].values
Date = xl_df["日付"].values
Idx = xl_df.index
の6列です。
そして、今回ロ-ソク足表示に必要なデ-タは
Idx_100 = Idx[-100:] - Idx[-100]
これは
Win11 WSL2 Ubuntu Python FFT & IFFT--仮の予測値を求める
のページで定義済
Date_100 = Date[-100:]
これは次項で説明
Close_100 = Close1[-100:]
Open_100 = Open[-100:]
High_100 = High[-100:]
Low_100 = Low[-100:]
の6列です。
これで100本のローソク4時間足が Idx_100 の位置に表示されます。
X 軸日付時処理
mane_chart_go_long.csv デ-タの中の日付は
2020/10/20 00:00:00
のようになっており、そのまま X 軸日付表示をさせるには文字列が長すぎます。
よってこれを 10/20 のように短縮します。
詳細は①を読んでいただくとしてファイル内容は下記のようになります。
- 型変換
Pandas で抜き取った Date_100 はリスト型になっています。
これを str 型 に変換します。
変換しても CSV 書式がそのまま残っていますので、
2020/02/15 00:00:00
のように変換されます。
余計な文字列が沢山ありますので、これを削除していきます。
必要なのは、月日の /02/15 です。
左から 0~3 の 4 文字と10文字以降は必要ないので
e4 = str(Date_100[i])[4:10]
とすると、6文字が取得され
e4 には /10/20 が入ります。 - 月日が1桁の時
月日が1桁の時は、/01 のような形をしています。
0 は余計なのでこれを削除します。
Python 組込関数 replace()を使って、一旦 /0 を / に置き換えます。
第一引数に置換元文字列、第二引数に置換先文字列を指定します。
e6 = e4.replace("/0", "/")
e6 には /2/15 が入りました。
もし /10/20 だったら /10/20 が e6 に入ります。 - 左端の / を削除
Python 組込関数 lstrip() で、左端の / を削除します。
e8 = e6.lstrip("/")
e8 には 2/15 が入りました。 - 繰返して X 軸日付処理
xData は X 軸の目盛り日付です。
そして、Python 組込関数 enumerate()を使って Date デ-タがある限り、i = 0 から 順番に for 分で処理を繰り返します。
Date の中に 101個のデ-タが存在するとすれば、i は 0~100 まで変化します。
今回は、中1日ごとに(2日に一回、00:00:00 を見つけたら) X 軸日付を付与します。
中1日ごとに 00:00:00 を探すために、フラグ dayf(最初は dayf = 0)を設定します。
このフラグが 0 なら X 軸日付を付与し、dayf = 1 とします。
フラグが 1 なら付与せず、dayf = 0 とします。 - ラストの X 軸日付時処理
実デ-タが存在し、かつ dayf == 0 の時はラスト(最新)の日付には時刻表示を含めた X 軸日付を付与します。
if(dayf == 0): e4l = tstr[7:14] e6l = e4l.replace("/0", "/") e8l = e6l.lstrip("/") xDate.append(e8l) xD.append(i)
X 軸日付時処理についてここまでをまとめると以下のようになります。
xDate = [] xD = [] dayf = 0 for i, key in enumerate(Date_100): 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)
ここまでで実データがある位置の X 軸日付時処理が完了しました。
引き続き、予測値が存在する位置の X 軸日付時処理をします。
予測最終日時取得
予測最終日時を取得するにはまずは②の資料を読んでください。
ある日時 current_date から4時間ずつ延長する回数
business_days_to_add_h 後の日時
cur_date8 書式例:21/03/30 12~
を求めます。
これにより24時間先までの予測日時6本のそれぞれの日時を知ることができます。
この関数をまとめたものが③にあります。
予測最終日時取得関数を再掲します。
import datetime 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 or 1 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 # 年/月/日 時刻として文字列にする処理 # 例 22/03/30 12~ e11 = current_date.strftime("%y/%m/%d %H") e22 = e11.replace("/0", "/") e22 = e22 + "~" e33 = e22[3:] # 22/ 削除 cur_date8.append(e22) cur_date4.append(e33) business_days_to_add_h -= 1 return cur_date8, cur_date4
ここまで、元デ-タをロ-ソク4時間足表示に変更する方法について説明してきました。
引き続き、予測最終日時取得関数を使用して行きます。