Python で 豪ドル/円チャ-ト を探求
Numpy polyfit 関数で豪ドル/円を予測
ここまでで
Numpy polyfit 関数 Python 多項式フィッティング
を実行する準備ができましたので、これを用いて豪ドル/円を予測します。
z = np.polyfit(Idx, Close, 9)
p = np.poly1d(z)
print("予測値=最終日+1~+5日")
print(np.round(p(Idx5),3))
たったこれだけです。
フィッティング関数 np.polyfit()
z = np.polyfit(Idx, Close, 9)
を設定します。
第1引数には x 軸値の配列
第2引数には y 軸値の配列
第3引数には 多項式関数の次数
を設定します。
今回次数は 9 としました。
なぜ、多項式関数の次数が 9 なのか難しい質問ですね。
数年の経験値から 100個ぐらいのデ-タの場合は4~9次ぐらいが良いようです。
急激な変化があったときは、4次ぐらいでもそれなりの結果がでます。
あまり変化のないときは7~9次ぐらいをお薦めします。
固定値にするなら5次をお薦めします。
フィッティング結果(予測値)は、np.poly1d() 関数で求めることができます。
p = np.poly1d(z)
このままだと小数点以下が長く見にくい値ですので、Numpy round 関数を使ってこれを小数点以下3桁の数値に整形して見やすくします。
np.round(p(Idx5),3) で小数点以下3桁で丸めています。
第2引数の 3 は小数点以下の桁数指定です。
print 文2行の結果は
予測値=最終日+1~+5日
[83.111 83.144 83.288 83.598 84.141]
のように表示されます。
豪ドル/円 CSV ダウンロ-ドデ-タをロ-ソク足表示
ダウンロ-ドした mane_chart_go.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列です。
なお Close と Idx は多項式フィッティングの為にすでに読込み済みです。
X 軸日付処理
mane_chart_go.csv デ-タの中の日付は
2020/10/20 00:00:00
のようになっており、そのまま X 軸日付表示をさせるには文字列が長すぎます。
よってこれを 10/20 のように短縮します。
- 型変換
Pandas で抜き取った Date は リスト型になっています。
これを str 型 に変換します。
変換しても CSV 書式がそのまま残っていますので、
2020/10/20 00:00:00
のように変換されます。
余計な文字列が沢山ありますので、これを削除していきます。
必要なのは、月日の /10/20 です。
左から 0~3 の 4 文字と10文字以降は必要ないので
e4 = str(Date[i])[4:10]
とすると、6文字が取得され
e4 には /10/20 が入ります。 - 月日が1桁の時
月日が1桁の時は、/01 のような形をしています。
0 は余計なのでこれを削除します。
Python 組込関数 replace()を使って、一旦 /0 を / に置き換えます。
第一引数に置換元文字列、第二引数に置換先文字列を指定します。
e6 = e4.replace("/0", "/")
e6 には /10/20 が入りました。 もし /01/20 だったら /1/20 が e6 に入ります。 - 左端の / を削除
Python 組込関数 lstrip() で、左端の / を削除します。
e8 = e6.lstrip("/")
e8 には 1/20 が入りました。 - 繰返して X 軸日付処理
xData は X 軸の目盛り日付です。
そして、Python 組込関数 enumerate()を使って Date デ-タがある限り、i = 0 から 順番に for 分で処理を繰り返します。
Date の中に 101個のデ-タが存在するとすれば、i は 0~100 まで変化します。
今回は 10日ごとに X 軸日付を付けたいので、
if(i % 10 == 0):
として 10日ごとに日付を作成します。
また、xD は日付表示位置となります。
まとめると以下のようになります。
xDate = [] xD = [] for i, key in enumerate(Datea): if(i % 10 == 0): e4 = str(key)[4:10] e6 = e4.replace("/0", "/") e8 = e6.lstrip("/") xDate.append(e8) xD.append(i)
ここまでで
豪ドル/円 CSV ダウンロ-ドデ-タをロ-ソク足表示の X 軸日付処理が終了しました。
引き続き、グラフ X 軸日付予測最終日を取得します。