Average Pooling を使うようにした
以前、小さい変化を無視しないようにするために Max Pooling を使わない と書きましたが、実際にやってみると精度が出る時は出るんですが、あまり安定しなくなりました。そんなときにどこかのブログで Average Pooling を使っているのを見て、そういえば Average Pooling なら Max Pooling に比べて小さな変化も無視されなくなるなと思い、Average Pooling を使うようにしてみました。これで精度は割と安定するようになりました。
LeakyReLU を Optimizer に使ってみた
Keras のデフォルトの alpha = 0.3 だと全然ダメでしたが、0.1 や 0.05 にすると ELU より若干良くなりました。しかし、LeakyReLU にすると Keras の model.save で保存できなくなったので ELU に戻しました。別スレッドで動かしていたせいか、例外とかエラー表示とかなかったのですが、多分 https://github.com/fchollet/keras/issues/6532 この問題ではないかと思います。
しきい値を 10 pips に変更した
最低 2 pips 以上変動する場合に 買い/売り
になるように設定していたしきい値を 10 pips に変更しました。5 分先を予測していた名残で 1 時間先の予測に変更してからも 2 pips をしきい値にしていましたが、2 pips で学習したモデルを使って実際に売買をシミュレーションしてみたところ全然利益が出せませんでした。結果から見るに、予測結果が利小損大になっていることがわかるので、損小利大になるように学習させなければ上手く利益が出せないと思われます。本当の意味での損小利大を学習させようとすると強化学習が必要だと思いますが1、今回は擬似的に損小利大となるように正解ラベルを調整する方向にしました。
現在 1 時間先を予測する設定にしていますが、1 時間で 2 pips の変動は少なすぎるため、最低 10 pips 以上変動する場合にのみ 買い/売り
となるように正解ラベルを調整しました。これで売買シミュレーションの際に 10 pips 以下のストップロスを入れるようにすれば、損小利大が達成できそうです。
今後の方針
ここらへんで利益出せるモデルができない場合、教師あり学習のアイデアがもう無いので強化学習に行くしかない感じです。強化学習は前に A3C を試しましたが、報酬の設定が難しく、何もしないのが最善手と学習してしまいました。これに対するアイデアも一応ありますが、上手く行くかはやってみないとわからないところです。
教師あり学習において、損小利大を表せる正解ラベルが思いつきませんでした。 ↩︎