Win11 WSL2 Ubuntu Python FFT & IFFT
FFT 解析による豪ドル/円予測Ⅱ
過去 FFT 解析による豪ドル/円予測については、
Python FFT & IFFT 概要
~
FFT 解析-豪ドル/円 予測チャ-ト表示
の中でいろいろ説明してきました。
ただ正確に予測してくれるかと言われると、精度に欠けるのが現状です。
その要因の一つに、データの取り込み区間と信号の周期が一致しないと言う問題があります。
例えば予測波形が連続正弦波だったとします。
当然、波の最後の部分は1周期が完了する前に終わってしまいます。
要するに不連続が発生し高調波が発生します。
当然そのスペクトラムも連続正弦波とは異なり
これが予測誤差となってしまいます。
このように、有限の時間範囲でデータを切り取ってしまうために生じる不確かさが発生します。
FFT を利用する場合、信号の周期と取り込み区間を同期できるとは限りません。
むしろ同期できない方がずっと多いので、この問題は深刻です。
この問題を解決するため「窓関数」処理を施す場合もあるようですが、予測をする場合には、最新データが消失するなどデメリットもあるようです。
FFT 解析による豪ドル/円予測の改善
FFT 解析による豪ドル/円予測の改善方法の概要について説明します。
- 豪ドル/円データの大容量化
過去 FFT 解析豪ドル/円予測で使用した豪ドル/円の動きを格納した CSV ファイルはたった 100本のデータしかないため精度に欠けていました。
今回はこのデータを50倍(5000本)に増やし精度を上げたいと思います。
- 豪ドル/円データの正規化
豪ドル/円大容量データ(約5000個)を使って、平均(mean)及び標準偏差(std)を求め、 各値を標準偏差値に変換します。
このデータは、FFT 解析に使用します。 - 仮の予測値の作成
大容量データの最新値(約100個)を使って、多項式フィッティングで仮の予測値を求めます。
古いデータは使用しないので古い過去の状況は考慮されません。
大容量データ(約5000個)も一緒にして FFT 解析した時に、過去の動きが考慮されます。 - 豪ドル/円データの再正規化
正規化されている合体予測データを平均値(mean)及び標準偏差値(std)から元の豪ドル/円値に変換し、これをグラフ化します。
大容量データの読み込み
豪ドル/円予測で使用するデータを準備します。
大容量の豪ドル/円日足データが必要です。
マネーパートナーズのサイトに入るとダウンロードできるのですが会員登録が必要です。
はじめての方へ
に行って登録してみて下さい。
ちょっと古いものになりますが、下記から大容量データ
mane_chart_go_long.csv
をダウンロードすることができるようにしました。
これを manep-w フォルダを作成し、
Linux/Ubuntu-22.04/home/yamada/public_html/manep-w/mane_chart_go_long.csv
として保存してください。
この中からデータ数と終値(売り)を抜き出します。
xl_df = pd.read_csv(
"/home/yamada/public_html/manep-w/mane_chart_go_long.csv", encoding="cp932")
Idx = xl_df.index
Close = xl_df["終値(売り)"].values
大容量データの標準化
大容量データを標準化します。
どんな複雑な波形も同じ形を繰り返す周期性を持った波であれば、複数の単純な正弦波(Sin 波)の組合せで表現することが出来ます。
Sin 波は -1~+1 の間の値を取りますのでデータを標準化して -1~+1 の間に落とし込むと扱いが楽になります。
Close の最初から最後までのデータを使用しますので
raw_data = Close.copy()
まずこの値(約5000個)を使って、平均(mean)及び標準偏差(std)を求めます。
mean = np.mean(raw_data)
print("Mean", mean)
raw_data -= mean
std = np.std(raw_data)
print("Std ",std)
各値を標準偏差値に変換
raw_data /= std
print("各標準偏差値")
print(raw_data)
この raw_data が大容量データを標準化した結果になります。
仮の予測値の作成のためのデータ
仮の予測値のためのデータを作成します。
使用するデータ raw_data100l は標準化された大容量データの最新部分の100個とします。
raw_data00 = raw_data.copy()
raw_data100l = raw_data00[-100:]
仮の予測値を求める
大容量データの最新値(約100個)を使って、多項式フィッティングで仮の予測値を求めます。
多項式フィッティングについては
Numpy polyfit 関数で豪ドル/円を予測
を参考にしてください。
多項式関数の次数を今回は 4 としました。
この値をいくつにするかは異論もあると思いますが、独断で決定しています。
Idx0 = Idx.copy()
Idx_100 = Idx0[-100:] - Idx0[-100]
z = np.polyfit(Idx_100, raw_data100l, 4)
フィッティング結果(予測値)は、np.poly1d() 関数で求めることができます。
p = np.poly1d(z)
次ぎに未来の x 軸値(Idx10)10日間を作成します。
Idx_100[-10:]とすると
ラストから10個の整数値を切り取ることができます。
それに + 10日
Idx10 = Idx_100[-10:] + 10
すると
Idx10 は ラストから +10 の10個の整数値となります。
p(Idx10) が
最終日+1~+10日の予測値になります。
ここまでで、豪ドル/円 大容量デ-タ FFT 解析の前段階の準備が完了しました。
引き続き、大容量デ-タを FFT 解析して、豪ドル/円を予測して行きます。