念願の仮想通貨botを運用開始できたので、ここまででやったことをざっとまとめる。
TL;DR
- バックテストでは利益が出るbotを作れた
- それをGCPを使って実運用させられた
- CryptoBot開発をkaggleのような問題設定に落とし込めた
- 今後は強化学習モデルも取り入れていきたい
Botを作ろうと思ったモチベーション
- NISAをやって放置してお金が増えるっていいなと気づいた
- 自分で資産運用Botを作ったらもっと楽に稼げるのでは
- API使えそうな仮想通貨でやってみよう
と、安易に始めた。
そういったモチベーションから始めたので、botのコンセプトは「放置して儲ける」とした。
つまり、大きな価格変化を掴むような作戦ではなく、ちまちま金を増やす高頻度取引をするbotを作ることにした。
無知なので、まずは本を読む
覚えている範囲で、以下の本を読んだ。
- ファイナンス機械学習―金融市場分析を変える機械学習アルゴリズムの理論と実践
- Pythonではじめるアルゴリズムトレーディング
- Pythonで学ぶ強化学習
- 日給300万円のSS級トレーダーが明かす botterのリアル
最後だけ毛色が違うが念のため読んでみた。
特にファイナンス機械学習は、網羅的な知識をインプットできたので読んでおいてよかった。
やったこと
雑に順番に書くとこんな感じ。
- 価格データを定期的に取得する
- ランダムに取引を行うbotを作る
- 取引実績を評価する環境を作る
- 機械学習モデルを導入したbotを作る w/ ChatGPT
- ランダムエージェントとの比較を行う
- ローカルで実際に取引する
- 取引実績を毎日discordに配信
- 動くことを確認したら、クラウドで運用する
- 日々監視して心が落ち着かなくなる←イマココ
実際に最後までやりきるには大体1~2か月くらい必要だった。 でも、CICD整えたり、TraderAgentの抽象クラスの考えたり、いろいろと自動化しながらやれてだいぶ楽しかった。
最終的にはkaggleのような問題設定まで落とし込め多と思っていて、このあとの取引エージェントの改善はシンプルになってきたのでいろいろと試せると思う。
システム構成
システムはGCPで動いている。
DBはお高いので節約のために、GCSで乗り切っており、 Traderが必要とするデータの取得が限界に来るまではこのままでいいかと思っている。
graph TD
A[Subscriber] -->|Get Price, Assets| B[Storage]
C[Train ML Model in local] --> |Upload ML Model| B
B -->|Get Price, Assets, ML Model| D[Trader]
D -->|Trade Order| E[Bitflyer]
D -->|Notify| F[Discord]
諸々思ったこと
- めちゃくちゃ簡易的なMLOpsを味わえた気分になった
- 実際には大規模データを使ったり、ML部分でマネージドサービスを使うことになるのだと想像できる
- 失っても大したことない金額とわかってても資産の上下に心動かされる
- 育てたやつがちゃんと働いたか気になる気持ち
- インフラ面
- こういうちょっとした開発はGCPを使いたい
- 別で作ったGPTを使ったチャットbotもそうだが要らなくなったらプロジェクトごと消せるのが安心する
- Botについて
- 書籍やコンペサイトなど調べて、回帰モデルにしたが、強化学習で取引を決定するイメージを持てた
- 初手で強化学習をするにはおそらくデータ量が足りないうえに、内部的に持っている予測モデルのお気持ちもわからなかったとおもう。
- kaggleとの違い
- お題に期日がない
- モデルの精度のお金が増えることに相関を持たせることが大変だとわかった(できので自分を褒めたい)
- モデルだけでなく周辺システム、クラウドサービスなどを含むも作れるの良い
- 時間のピタゴラスイッチは難しい
- データは1分おきで、Traderは5分おきで、実行に数分かかるから、、などなど。
- 時間の表現は今後統一しよう
- created_at_utc