システムトレード構築編

システムトレードの構成パーツ

実際に機械学習でシステムトレードを構築しようしたとき、「さあ、作るぞ!!!」と気合いを入れても、構築経験がない場合は、「で、何から作ればいいのよ??」という状態になることが、ほとんどだと思います。

システム構築をする際は、まず機能ベースで構成パーツを考えます。本記事ではシステムトレードの構成パーツについて考察してみたいと思います。

機能からみる構成パーツ

MT4やイザナミなどのシステムトレードソフトの使用経験があるなら、システムトレードソフトに必要な構成パーツは想定できると思います。オリジナルのシステムトレードを構築する場合も、構成パーツはシステムトレードソフトと同じです。プラスアルファで、機械学習の要素を入れる感じです。

システムトレードの構成パーツの大項目は、バックテスト本番運用の2つですが、これだとザックリしすぎなので、ブレイクダウンしてみました。

  • バックテスト
    • 過去の価格データ(ヒストリカルデータ)の読み込み
    • 機械学習のモデル構築
    • 機械学習のパラメータ(ハイパーパラメータ)の最適化
    • ストラテジー構築
    • ストラテジーのパラメータの最適化
  • 本番運用
    • 価格取得
    • バックテストで構築したものと同じストラテジーの稼働
    • 発注
    • 運用補助

だいたいこんな感じだと思います。この中で、MT4に含まれていないものは、下記になります。

  • 機械学習のモデル構築
  • 機械学習のパラメータ(ハイパーパラメータ)の最適化
  • 運用補助

上2つの、機械学習のモデル構築とパラメータ調整は、機械学習を使いたいので当然入ってくる要素です。

運用補助というのは名前の通りで、実運用の際にあれば便利な機能です。一例を挙げると、システムの緊急停止機能、複数ストラテジー混在時の同時保有枚数制限や両建ての管理などです。この辺の必要な機能は、各自で変わってくると思いますので、実際に運用を始めて必要になったら、追加していくスタイルでいいと思います。

構成パーツを実装に落とし込む

これでシステムトレードに必要な構成パーツは、わかりました。これをプログラミングに落とし込む場合、プロジェクトをどうやって分割するかを考える必要があります。

プログラミングを始めたばかりの方は、自分が作りたい機能を1つのプロジェクトで全て作っていると思います。しかしある程度の規模になると、複数プロジェクトを統合してサービスを作ることになります。1プロジェクトでサービスを作ることをモノリシックというのに対し、複数プロジェクトで作ることをマイクロサービスといいます。モノリシックとマイクロサービスは、それだけで専門書になるほど奥が深いものですが、とりあえずは違いがわかる程度の理解で十分だと思います。

マイクロサービスは、機能拡張がしやすいとかヒューマンリソースを柔軟に調整できるなどいろいろメリットがありますが、主に複数人数でプロジェクトを回すときに恩恵を受けやすいです。ただ、各サービス間の連携を考慮したり、パフォーマンスの問題が出やすいなど、モノリシックに比べて難易度は高いです。

システムトレードは一人で作ることになると思いますので、最初はモノリシック、1リポジトリで作ってしまっていいと思います。

私も最初はモノリシックで作成していました。(当時はマイクロサービスという概念を知りませんでした。) それを、機能追加・修正していくうちに、複数リポジトリのDBは1つを共有という、モノリシックなのかマイクロサービスなのか、よくわからない状態になっています。

もし、最初からマイクロサービスできっちりと作り込みたい場合は、サービスの分割規模を考える必要があります。上記の項目単位でプロジェクトを作って統合するのは、さすがにマイクロサービスの粒度として細かすぎるので、適切な粒度にまとめます。

価格取得と発注クライアント部分を切り出して、後はコアプロジェクトに全のせぐらいでいいと思います。

  • 価格取得
  • コア(バックテスト&本番シグナル)
  • 発注クライアント

もしくは、ストラテジー部分や機械学習部分をスケールしやすいように、より細かくすると

  • 価格取得
  • 機械学習(モデル構築やモデルAPIなど)
  • ストラテジー
  • バックテスト
  • 本番シグナル
  • 発注クライアント

など、でしょうか。これぐらいの粒度だと、金融商品の追加や、機械学習のライブラリ追加なども柔軟にできそうです。


以上になります。

今回はシステムトレードの実装規模とその方法についての話でした。

実装方法は、トレードアイデアによって変わってくることもありますので、他の方のいろんな事例も知りたいですねー。

COMMENT

メールアドレスが公開されることはありません。