TensorFlowを使った為替(FX)のトレードシステムを作るチュートリアル ~システムのセットアップからトレードまで~
を見て、「MQL4で人工知能のトレードアルゴリズムを作るのはかなり敷居が高いのに、なんだか楽しそうだな」と思って、やってみました。
Google Cloud Platform の無料枠が使えるので、Compute EngineにCentOS 7を起動。
GCPではなんたって「機械学習のAPI」がありますからね。もともとTensorFlowってのは、GoogleがOSS化したものです。
てことは、わざわざdocker内でTensorFlowを立ち上げなくても、「機械学習のAPI」に処理を回せば、同じことができるし、パフォーマンスも桁外れ、ということになるはず。
で、それを君はやれるのか?
というと、完全文系人間の私には、かなりかなり、敷居が高いのです。
(これは後の課題、ということで。だれかやってるでしょうね)
上記チュートリアルをGCP上で動かすこと自体は、少し注意する点はありますが、だいたい以下の点に気をつければ、比較的楽にできるでしょう。
インスタンスは、Standard(3.75GiB Mem)を選ぼう
最初「micro(0.6GiB Mem)」のインスタンスでCentOS7を立ち上げた。dockerのインストールまでは難なくであったが、docker-composeでjijiとTensorFlowを入れるところでハマった。
「pandas ...」のプロセスで、なにやら時間がかかっている様子(パンダってなんすか?。多分Pythonのモジュールか何か)
(のちにメモリ不足でハングしていたことが判明)
かなり、マシンパワーを消費します。
selinuxはいちおうoff
アクセス権の問題でハマった。
#setenforce 0
でselinuxを切り、
#firewall-cmd --add-service=https --zone=public --permanent
でhttpsポートを開けてやること。
docker-compose.yml
上記のチュートリアルでは、ローカル環境での運用を前提にしているので、httpsのポートが10443になっているが、GCP上で動かす場合、
nginx:
container_name: jiji_example__nginx
image: unageanu/jiji-nginx:latest
links:
- jiji
ports:
- "10443:443" #<--ここを"433:433"にすべし
volumes:
- ./cert/server.crt:/etc/nginx/cert/ssl.crt:ro
- ./cert/server.key:/etc/nginx/cert/ssl.key:ro
にしないといけない。(dicker内部のの10433番は、塞がっているのかなあ?)ローカルでもここは通らない。多分FWの設定で何とかなるのかも。
nginxはプロクシだから、うまくポートフォワードしているはずだが、なぜか?
わからない。
起動
$docker-compose up -d で起動し、$docker ps -aで一覧を調べるわけだが、nginxが起動しないことがある。
起動しなかったら、$docker-compose downを叩いて、一旦全部リムーブ。
docker-compose.ymlの内容を見直す。
まとめ
テストを走らせる(collect mode)
- 運用成績
さて学習させる!
- 1時間足で、ほぼ100%の成績(うそだろ)
- サーバーを走らせる
python server.py を叩いて、テストのエージェントに送信
最適化されたアルゴリズムがここで動く!
おろどくべき運用成績
たった2層のNNのはずなのに、驚くべき運用実績!
こりゃ、人間がどれだけ頑張ったって、勝てる道理が無いわ。
Googleの提供する「機械学習API」を利用すれば、マシンパワーを気にせず、1000層でも10000層でもある本格的なDeep Learningのエージェントが作れます!これはMT4では絶対無理なレベルです。
- PFが6.8! 勝率75%! ただし、10年間で61回しか取引してない。もっと取引回数を増やしてみたいな。