bitcoinのシステムトレードをいろいろしているが、
エンジニアとして楽しいのはOHLC求めてテクニカル指標出して、あたりまでで、実際の売り買いとなるとそんなに結果が出なかったりするので、
またすぐに改良と称して最初の部分から作りなおしてしまっている。
ブログを書き始めた頃のものをversion6とよんでいるが、
マルチマーケット、マルチカレンシー対応、レンジバー対応したものがversion7、
Elasticsearchと機械学習を取り入れたものが現在のversion8となっている。
対応したマーケットは、bitFlyer、Zaif, coincheckだ。BITPointはこれからになる。
version8はまだ開発中で、データがある程度溜まってから
売買を行うモジュールtrader
を実装することにしている。
現在、データ取得はbitFlyerがpubnubを使っていて、Node.js クライアントはまあまあ動いていくれている(Go言語のSDKはダメだった)ので、
データ取得はNode.jsを使っている。Zaif, coincheckはWebSocket で、これもNode.jsから使うのは容易である。
取得したデータは、RedisのPubSubを経由して、Goで書かれたサーバに送られる。
このサーバはRedisをSubscribeして取得した情報を1秒間バッファリングしてからElastisearchにBulk APIで送る。
以前はPostgreSQLを使っていたが、シングルクエリで複数レコードをインサートする術がGoのSQLインターフェースになかったので、
サボっていたところ、CPU使用率がえらいことになっていたのが、これで解消された。
Elasticsearchからデータを引っ張ってきて、機械学習でデータを綺麗にしてからテクニカル指標を計算し、トレンドを返してくれるサーバanalyzer
はPython3で書いた。
というか、機械学習ライブラリをガッツリPythonのものを使ったのでそうせざるを得なかった。
ルーチンはJupyter Notebookを使って実装し、Bottle.py でWeb APIサーバにした。
jupyter.org
bottlepy.org
トレードについてだが、以下の書籍を忠実に実行するのが当初から目標にしている。みんな大好き(?)パンローリングだ。
この書籍はなるほどうまく行きそうなアルゴリズムがズバリ書いてあり、めんどくさいトレードの勉強なしにいきなりシステムトレードができる。
が、大きな落とし穴があり、この書籍で使用しているのは時間足ではなくレンジバーなので、
データ処理がだいぶ特殊なものになる。具体的にはOHLCの求め方だ。
レンジバーについてはいつか書く。
とにかく、この書籍の手法は基本的にレンジバーが必要で、レンジバーが作れないならこの書籍の内容は全く活きない。
トレードに必要なのは最新のテクニカル指標と、マーケットの現在の売値、買値などだが、
ときに過去数時間〜数日間の値動きが見たくなる。
そういう時には、Google Charts が使える。
Candlestick Charts | Charts | Google Developers
非常に綺麗にローソクが書け、さらに線グラフでボリンジャーバンドやSMAなどをオーバーラップできる。
マウスオーバーで値も見られる。
このような感じで、システムトレードの環境を作っている。
今後の課題はまだまだある。
- フォワードテストによるアルゴリズム・パラメータの検証
- スコアの記録
まだ俺達のシステムトレードは始まったばかりだ。