前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
今回は「アルゴリズム取引」を読んだので、その内容とBot開発に活かせそうな部分を記録します。
特に「高頻度bot」の開発において参考になる点が多かったです。
参考にしている資料の一つ。Botの開発・運用についてかなり具体的な部分まで踏み込んで解説している良著です。
自動売買bot作成を少しでもかじったことがあれば、かなりスラスラ読めると思います。 pic.twitter.com/UMmsCpmSlq— よだか(夜鷹/yodaka) (@yodakablog) April 17, 2024
内容まとめ
「アルゴリズム取引」とは、コンピュータプログラムに基づいて証券などの自動取引を行う手法のことです。
本書は様々な形態が存在するアルゴリズム取引の中でも、特にHFT(高頻度取引)について深掘りされています。
そのため、高頻度botの開発と非常に相性が良い本であると感じました。
本書には
アルゴリズム取引の現場において問題を数学的に捉え、科学的な戦略に落とし込むアプローチ
を学ぶためのエッセンスが詰まっています。
本書から読み取った高頻度Bot開発に活かせるポイントには主に以下のものがあります。
- アルゴリズム取引(ビジネス)の階層構造
- 金融市場の情報(板情報など)の処理とその解釈
- 板情報に基づく市場価格形成のメカニズム
- アルファ探索の方法と取引戦略立案
- Bot構築・運用・管理の重要ポイント
仮想通貨Botの開発に活かせそうなポイントに絞って内容を紹介します。
アルゴリズム取引(ビジネス)の階層構造
- アルファの特定
アルファとは、他人が持っていない何らかの利益の源泉となる情報のこと。取引市場における何らかの優位性を確定させる。例えば、Botの取引速度で競合を上回ることができる市場の選定・発見や、競合が手にしていない情報に先んじてアクセスすること、獲得した情報を処理する過程が高速であったりすることなど。 - 戦略の策定
アルファに基づいて、有効な戦略を策定する。取引市場における戦略を仮説に基づいて立案する能力とその環境で本当に有効に機能するのかどうかを検証するスキルが求められる。 - アルゴリズムの実装
策定した戦略をプログラムに落とし込む。ここではエンジニアリングやコーディングのスキルが求められる。アルゴリズムを実装することに関して最適化したコードを書く技術が必須。 - オペレーション
Botの稼働を適切に管理する。アルゴリズム取引においては、徹底的に数学に基づいてオペレーションのサイクルを回すことが重要。感覚や感情に頼らず、実際の市場と数式によって再現される状況にフィットするものを選んだり、それらの微細な差異にも徹底的にこだわり抜いて検証したりする慎重さが求められる。
金融市場の情報(板情報など)の処理とその解釈
板情報から得られるのは、過去の取引データと板に並んでいる注文(それらがどのように処理されようとしているかという過程と後続に控えている様々な価格・サイズの取引注文)の集積データ。
板情報を解析することで、市場参加者(人間なのかBotなのか)を区別したり、参加者の数や競合の戦略などを分析することができる。
データの解釈を行うのは人間なので、最終的な判断に関わる人間特有の思考エラーが発生する可能性を極力減らす仕組みづくりが重要ですね。
板情報に基づく市場価格形成のメカニズムと市場参加者
市場参加者は「受動的トレーダー」と「能動的トレーダー」の2種類に分けられる。
- 受動的トレーダー:成り行き注文で証券を取引する。利益の源泉は市場の変化に対する素早い適応力(約定スキル)。
- 能動的トレーダー:指し値注文を使って取引する。利益の源泉は価格変動の予測と市場に介入するタイミングを予測する能力。
異なるタイプの市場参加者がそれぞれに合理的な意思決定を行うと市場の各要素がどのような振る舞いを見せるのかを数学的に論じるためには「離散時間モデル」を用いることが有効。
各トレーダーの振る舞い、危険回避、価格インパクト、取引コスト、インサイダー情報を持っているトレーダーの存在や指し値注文を使ったマーケットメイキング戦略、最適流動化問題など、前提として考えるべき重要な要素が数多くあります。
前提条件を定義することで、数式に基づいた仮説・検証が可能になります。
アルファ探索の方法と取引戦略立案
超短期のアルファを探す方法には
- 板情報から探す
- 極めて拡散が速いテキスト情報から探す
の2種類がある。
個人開発においては「板情報理論モデルを用いたシミュレーション方法」が特に参考になりました。
従来のシミュレーション方法では、過去データに対して、直接アルファ・モデルをキャリブレート(モデルの出力値の分布範囲などを調整してパフォーマンスを改善する)していました。しかし、この方法では過去データが膨大であるため、シミュレーションに膨大な時間がかかってしまいます。
そこで「板情報理論モデル」を用いて、シミュレーションに必要なパラメタ数を減らして処理コストの削減(計算量の低下や時間の削減)で良い近似値を得ようするアプローチが提案されています。
この方法は良いモデルの設計が前提ですが、そこをクリアしてしまえばパラメタ数が多いアルファ・モデルも十分な種類のパラメタ値で試すことができるようになります。
拡散が早いテキスト情報の集積もアルファだなぁって改めて思う。
けれども、集積する過程で余分な情報が入り過ぎたり、私がそれらをうまくいなす適性が低かったりするからどうにも好きになれない。
好きになれないことは頑張ってもある程度までしか上達しないし、やっていて楽しくないから続かない。— よだか(夜鷹/yodaka) (@yodakablog) April 18, 2024
例えば、インプレッション数が一定以上の仮想通貨インフルエンサーのアカウントを複数フォローして、それらの発信する情報を集積しながら高速で取引をするBotを作ってみると面白い結果が得られるかもしれませんね。
Bot構築・運用・管理の重要ポイント
最後に、本書から学んだBot構築・運用・管理の重要ポイントをまとめておきます。
競合の想定
市場における競合はbotであることも忘れてはいけない。板情報から読み取ることができる競合Botの取引戦略も織り込んで、自分自身の取引戦略を考えることは当然やっておくべきこと。
ライバルのアルゴリズムトレードを想定していないBotは勝てない。
機械学習を使う際の注意点
アルゴリズム取引は、徹頭徹尾科学的でなくてはいけない。しかし、機械学習を使ったモデル・フリーな手法は必ずしも科学的とは言えない。
機械学習の利点は、モデル・フリーであることなので、特定の確率分布を前提としていない。そのため、欠点としてテスト期間のレジメがトレーニング期間のそれとは異なる可能性がある。
計測できないリスクがある場合は、安易にモデルを稼働させるべきではない。また、そのモデルがきちんとした統計理論に基づいているかという点を意識しなければいけない。
システムダウン後の復帰とログファイルの保持
システムの一部または全体がダウンする可能性がある。システムダウン直前の状態に速やかに復帰する堅牢性が重要。リカバリを可能にするためには、ログファイルを複数のデータベースに保存しておくと良い。
2重テストと正気テスト
プログラムが誤った判断に基づいて取引を行うと損失発生の原因になる。データの取得や計算方法など判断の基準となる機能は2種類以上のデータを使ってその稼働を徹底的に確認するべき。(2重テスト)
また、システム内の各プロセスも常に正常に動いているか監視しなければならない。(正気テスト)正常に作動し続けるだけでなく、予期せぬ機能停止がないかどうかや不測の事態が起こった時に稼働を止めることができるかどうかも重要。
この部分は、アルゴリズム取引において人間が関わる部分なので絶対に省いてはいけない。
Botが止まらないことは確かに大事だが、有事の際にちゃんと止まるようにしておくことも同じくらい大事だということを改めて実感した。
— よだか(夜鷹/yodaka) (@yodakablog) April 17, 2024
使用言語
各目的に応じた適切な言語を用いて開発をすることが重要。
本書では、取引Botの開発においては、取引の処理における高速性が重要であるため、ほぼC++一択であるとされています。
また、分析ツールとして使う言語であれば取引Botほどの高速性は求められないため、Pyhon,Ruby,Perlなどの汎用インタープリタ言語やS-PLUS,R,Matlabなどの統計分析言語を用いることに加え、python+Pandasなどの組み合わせについても紹介されています。
まとめ
本書には、高頻度Bot開発のエッセンスが詰め込まれています。
今回まとめた内容は本書のごく一部です。
特に仮想通貨Bot開発に応用できそうな部分をピックアップしたので、これから一つずつ検証しながら仮想通貨bot開発に有効な箇所をさらに突き詰めていきます。
今後も、この調子で研究・開発を進めていきます。