システムトレード構築編

システムトレーダーのスキルセット -3-

前々回、機械学習でシステムトレードで構築するのに、下記のスキルセットが必要だと書きました。

  • システムトレードソフト
  • システムトレードの評価方法
  • 裁量トレードの一般知識
  • プログラミング
  • DB(データベース)
  • ITインフラ
  • Git
  • 機械学習
  • 統計学

今回は、プログラミングDB(データベース)についてになります。

プログラミング

必要度
熟練度

簡単なプログラミングがわかれば、なんとかなる

はい、来ました。プログラミングです。システムトレードといえばプログラミングというぐらい重要で避けては通れないスキルになります。熟練度もそれなりのものが必要になります。IT業界歴1年目の新人プログラマーぐらだいと、ちょっと力不足かもしれません。とはいえ、それほど高度な技術が必要になるわけではありません。それにプログラミングもシステムトレードを構築しながら身につけていくスキルの類いになります。

とはいえ、全くできなかったらとっかかりがないので、ある程度できるようになる必要があります。レベルで言ったら、プログラミングの基礎本を1~2冊読み込んで、その本に載っているような簡単なアプリが作れるなら十分です。後は実際にシステムトレードを作りながら足りないことは覚えていくというスタイルでいいでしょう。

言語はPython

言語はPython一択です。証券会社のAPIによっては、Python未対応でJavaを使うしかないというケースがありますが、Javaを覚えるのは必要になってからでかまいません。JavaはPythonより学習コストが高いので、避けられるならそれに超したことはありません。

Pythonである理由は、機械学習のライブラリが豊富で、データ分析に適している言語だからです。私がシステムトレードを作り始めたころは、Pythonの機械学習のライブラリが、というかPythonそのものが流行っていなくて、Javaのみで構築していました。しかしPythonが人気になりライブラリが出そろって来るにつれ、システムのバージョンアップやリプレースを繰り返していくうちに、現在のシステムではPython90%、Java10%ぐらいの構成比率になっています。

プログラミングを全くやったことがない、という人には下記の本をオススメします。Pythonというよりは、プログラミングそのものの本になります。バージョン管理やデータ構造についても記述があり、未経験者が学ぶべき内容を程よい粒度でわかりやす書かれているので、始めの1冊に適しています。作者は未経験から独学でプログラミングを学び、ソフトウェアエンジニアになった人です。その経験からくることも書かれていますので、非常に参考になります。

Pythonはオブジェクト指向と関数型、どちらにでも対応できる言語です。関数型は学習コストが高いので、まずはオブジェクト指向の書き方を学ぶべきです。オブジェクト指向といってもJava程がっつりやる必要はありません。最初はクラスと継承だけわかればいいと思います。設計に関する知識、デザインパターンも最初は知らなくても大丈夫ですが、シングルトンぐらいはわかっていた方が、役に立つことがあると思います。

開発環境

あと開発環境は Pycharm か IntelliJ をオススメします。たまにテキストエディタでPythonを書くエンジニアがいます。(新人エンジニアやシェルだけ書いてきたインフラエンジニアとかに多い印象) 簡単なスクリプト程度ならそれでもいいでしょうが、システムトレードをスクラッチで作るとなると、プログラミングをごりごりやる必要があります。エディタでなくIDEを使って下さい。

DB(データベース)

必要度
熟練度

なくてもなんとかなるが、DBはなるべく使うべき

DB(データベース)は、価格データの保存や、機械学習のmodelパラメータやbacktestのパラメータを格納したりに使用します。

これは必要度を★5にしようかとも思いましたが、プログラミングほど必要かと言われるとそうでもないので★3としました。実際、DBを使わなくてもシステムトレードはできます。MT4などのシステムトレードソフトでもデータベースは使われていません。

DBを使わない場合は、CSVファイルやJSON等を駆使して、必要なデータをテキストで読み込むという方法になります。ただ、この方法は管理がすごく大変です。ある程度の規模になれば収集がつかなくなります。backtest諸々の管理や自動化をする場合は、さすがにDBがないと厳しいので、DBのスキルは必須に近いと言えます。

なるべく早いうちからDBを使うことをオススメします。私もDBなしでシステムトレードを作ったことはありません。

製品選定

DBを使う場合、まずは技術選定として RDB か NoSQL にするかを決める必要があります。これは、とりえあえずRDBで始めればいいです。RDBで物足りなくなったら、NoSQLへのリプレースや追加を検討しましょう。私はシステムトレードを始めて5年以上たちますが、NoSQLが必要になったケースは未だないです。

製品はRDBなら何でもいいと思いますが、 MySQL PostgreSQL のどちらかが鉄板です。この2つが無料で使用でき、メジャーなので参考資料もたくさんあります。RDS等のクラウドサービスでもいいですが、結構お金がかかります。まずはローカルにRDBを立てて、そこで構築したほうがいいと思います。

ORM(ORマッパー)

初心者向けのDBプログラミング解説には、ソースの中に生SQLを書いたりしているものがありますが、あまり真似しない方がいいです。コードが煩雑になり、すぐに限界がきます。 ORM を使いましょう。Pythonだと、DjangoかSQLAlchemyのどちらかがいいと思います。DjangoはWebフレームワークで、その中の一機能としてORMがあります。SQLAlchemyは、純粋にORMのみのライブラリです。

システムトレードはWebアプリではないので、SQLAlchemyの方が作りやすいと思います。WebフレームワークのORMだけ使うというのは、あまり聞いたことないです。ただ、RubyとかでWebフレームワークになれていて、システムトレードもWebアプリで作りたい場合は、 Django の方がいいでしょう。


まとめ

今回は、システムトレードに必要なスキルセットとして、プログラミングとDBについてでした。
PythonでORMを使ってRDBのデータ操作ができるようになりましょう!

COMMENT

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