Python Colaboratory Ⅲ
豪ドル/円 4時間ロ-ソク足表示
ここまでで RNN 豪ドル/円4時間足予測ができるようになりました。
引き続き、その結果を4時間ロ-ソク足で表示ができるようにしていきます。
drive/MyDrive/Colab Notebooks/my_data
にある
colab_mane_chart_go_4h.csv
デ-タをロ-ソク足表示していきます。
import numpy as np import pandas as pd xl_df = pd.read_csv( "drive/MyDrive/Colab Notebooks/my_data/colab_mane_chart_go_4h.csv", encoding="cp932")
ロ-ソク足表示に必要なデ-タは
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列です。
X 軸日付処理
colab_mane_chart_go_4h.csv デ-タの中の日付は
2020/10/20 00:00:00
のようになっており、そのまま X 軸日付表示をさせるには文字列が長すぎます。
よってこれを 10/20 のように短縮します。
抜き出す日付は、時刻が 00:00:00 となっている日付すなわち
例) 2022/02/15 00:00:00
の年月日時です。
- 型変換
Pandas で抜き取った Date は リスト型になっています。
これを str 型 に変換します。
変換しても CSV 書式がそのまま残っていますので、
2020/02/15 00:00:00
のように変換されます。
余計な文字列が沢山ありますので、これを削除していきます。
必要なのは、月日の /02/15 です。
左から 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 には /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 軸日付を付与します。
もし dayf == 1 の時、時刻表示を含めて付与すると二つの日付が重なってしまいます。tstr = Date[-1] if(dayf == 0): e4l = tstr[7:14] e6l = e4l.replace("/0", "/") e8l = e6l.lstrip("/") xDate.append(e8l) xD.append(i)
X 軸日付処理についてここまでをまとめると以下のようになります。 [まとめ - X 軸日付処理]
xDate = [] xD = [] dayf = 0 for i, key in enumerate(Date): 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)
ロ-ソク4時間足表示スクリプト
ロ-ソク4時間足の表示スクリプトは 豪ドル/円ロ-ソク4時間足と予測値の表示 のなかで詳しく説明されているので、これをもってきます。
import sys sys.path.append( '/content/drive/MyDrive/Colab Notebooks/my-modules' ) import matplotlib.pyplot as plt from mplfinance.original_flavor import candlestick_ohlc ohlc = zip( Idx, Open, High, Low, Close) fig = plt.figure( figsize=(8.34, 5.56)) ax = fig.add_subplot(1,1,1) ax.grid() # ここに予測値を入れる取り敢えず Idx6 = Idx[-6:] + 6 app = Close[-1:] app1 = np.hstack((app, app, app, app, app, app)) plt.plot( Idx6, app1, 'bo') # として表示する 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.show plt.savefig( 'colab_mane_chart_go_keras_4h.png')
ここまでで RNN 豪ドル/円4時間ロ-ソク足表示ができるようになりました。
引き続き、このスクリプトをまとめます。