中頻度取引botの作成④
機械学習を用いて板情報のプロットからn秒後の価格の騰落を予想する
下記の記事で分類した価格のプロットを機械学習にかけて、板情報のプロットからn秒後の価格の騰落を予測出来るか検討する。
機械学習については、下記の資料を参考にした ディープラーニングで近藤春菜、角野卓三、マイケルムーアを判別する(Kerasで画像分類)
import keras from keras.utils import np_utils from keras.models import Sequential from keras.layers.convolutional import Conv2D, MaxPooling2D from keras.layers.core import Dense, Dropout, Activation, Flatten import numpy as np from sklearn.model_selection import train_test_split from PIL import Image import glob folder = ['up','down'] image_size_X = 432 image_size_X = 288 # 画像の読み込み、リサイズ、ndarrayへの格納 X = [] Y = [] for index, name in enumerate(folder): dir = 'keras_image/' + name files = glob.glob(dir + '/*.png') for i, file in enumerate(files): image = Image.open(file) image = image.convert('RGB') image = image.resize((image_size_X, image_size_Y)) data = np.asarray(image) X.append(data) Y.append(index) X = np.array(X) Y = np.array(Y) # RGBデータの正規化 X = X.astype('float32') X = X / 255.0 # 正解ラベルの形式を変換 Y = np_utils.to_categorical(Y, 3) # 訓練データとテストデータの分配(2割をテストデータへ) X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.20) # CNNのパラメータ設定 model = Sequential() model.add(Conv2D(32, (3, 3), padding='same',input_shape=X_train.shape[1:])) # レイヤー1 model.add(Activation('relu')) model.add(Conv2D(32, (3, 3))) # レイヤー2 model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Conv2D(64, (3, 3), padding='same')) # レイヤー3 model.add(Activation('relu')) model.add(Conv2D(64, (3, 3))) # レイヤー4 model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) # レイヤー5 model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(3)) # レイヤー6 model.add(Activation('softmax')) # コンパイル model.compile(loss='categorical_crossentropy',optimizer='SGD',metrics=['accuracy']) #訓練 model.fit(X_train, Y_train,batch_size=32, epochs=100) #評価 & 評価結果出力 score = model.evaluate(X_test, Y_test) print('loss=',score[0]) print('accuracy=',score[1])
https://github.com/PP-lib/Bot_materials/blob/master/Keras_practice.ipynb
結果
Epoch 98/100 388/388 [==============================] - 8s 21ms/step - loss: 0.2662 - acc: 0.9253 Epoch 99/100 388/388 [==============================] - 8s 21ms/step - loss: 0.1183 - acc: 0.9691 Epoch 100/100 388/388 [==============================] - 8s 21ms/step - loss: 0.1044 - acc: 0.9665 98/98 [==============================] - 1s 11ms/step loss= 2.002868954016238 accuracy= 0.5
認識率が50%という事で全く予想できていないという結果だった。
考察
今回は1秒間の板情報から1秒後の価格を予想した。
結果としては次回は、板情報の期間と認識率の依存性について検討する。