さくら VPS Python 豪ドル/円 4時間足予測
ガウスフィット-豪ドル/円 4時間足予測
ここまで
Numpy polyfit 関数 Python 多項式フィッティング
FFT 解析
で豪ドル/円4時間足予測を行なってきました。
引き続き、ガウスフィット解析で豪ドル/円 4時間足予測を行なっていきます。
まずは、FFT 解析 豪ドル/円 4時間足予測における
FFT 解析 豪ドル/円 4時間足予測
FFT 解析 豪ドル/円4時間足予測ファイルまとめ
FFT 解析 豪ドル/円4時間足予測ファイル動作確認
での説明に沿ってファイル作成を進めます。
フィティング方法については、FFT 解析方法からガウスフィット方式にしたがった予測方法に変更します。
ガウスフィット方式については、
Python ガウス基底関数フィッティング概要
線形基底関数モデル厳密解
ガウス基底関数フィッティング準備-2
豪ドル/円チャ-トロ-ソク足表示 gauss/fit
豪ドル/円チャ-トロ-ソク足表示 gauss/fit ファイルまとめ
を読んでください。
ガウスフィット-豪ドル/円4時間足予測 暫定予測値作成
最初に、
豪ドル/円 4時間足 CSV ダウンロ-ドデ-タ グラフ化
を元にファイル作成を進めます。
原型となるファイルは
FFT 解析 豪ドル/円4時間足予測ファイルまとめ
のなかで掲示している
si_fft_filter-go-02-4h.py
です。
まずは暫定予測値を作成します。
確定している終値は
Close = xl_df["終値(売り)"].values
です。
ガウスフィット-豪ドル/円 4時間足予測では何らかの予測値があった方が予測値の正確さが増すような気がします。
そこで、シンプルな予測値をあらかじめ設定することによりこの問題を解決します。
今回採用したのは、N番目の4時間足の終値は、次のN+1番目の4時間足の終値に引き継がれると予測する考えです。
app = Close[-1:]
app1 = np.hstack((app, app, app, app, app, app))
Close1 = np.hstack((Close, app1))
として、この Close1 を解析することによって未来6番目の4時間足を予測します。
np.hstack((a, b)) は ndarray 配列 a と b を結合してくれます。
豪ドル/円4時間足デ-タの正規化
デ-タの正規化をします。
Python ガウス基底関数フィッティングを実行しようとするとどうしてもデ-タの正規化をしないとうまく行きません。
デ-タを前処理してスケ-ルを揃える正規化の処理が必要となります。
デ-タが約 80 前後を細かく変化するためです。
どのように正規化してもかまわないのですが、ここではデ-タの中における最大値と最小値を使って正規化します。
min-max normalization 処理を行ないます。
min(x): x の最小値
max(x): x の最大値
とすると
となります。
外れ値がない場合はとても有効な正規化方法です。
これを定義すると以下のようになります。
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
この定義を使って
Close2,Close1_min,Close1_max = min_max(Close1)
とし、この Close2 を解析することによって未来 24時間をを予測します。
Idx は X 軸でデ-タの数だけあります。
Idx6 は未来4時間足6本分の X 軸です。
Idx = xl_df.index
Idx6 = Idx[-6:] + 6
Idxlg = np.r_[Idx, Idx6]
np.r_ : 配列の結合
関数ではないので引数とかを指定するのではなく[ ]の中に結合したい配列を指定します。
Idxlg は未来値も含めたト-タル数になります。
これで、ガウスフィット-豪ドル/円4時間足予測の準備の第一段階は完了です。
ガウスフィット定義関数追加
ガウス関数定義
線形基底関数モデル
線形基底関数モデル厳密解
の三つの定義ファイルを追加する必要があります。
これらの定義ファイルの解説は
Python ガウス基底関数フィッティング概要
線形基底関数モデル厳密解
にあります。
ガウス関数定義
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Φ3(x) + w4 # なら len(w) = 5 ∴ m = 4 mu = np.linspace(0, xx, m) s = mu[1] - mu[0] y = np.zeros_like(x) 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): x1 = len(x) - 1 mu = np.linspace(0, x1, 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, mu, s, m # np.dot(A, B) と A.dot(B) は同じ
ここまでで、線形基底関数モデル厳密解を求める関数までが定義できましたので このあと、ガウス基底関数計算を実行していきます。