約定履歴を用いた高解像度C++バックテスター (暗号通貨用)
1. 概要
高頻度取引Botを開発する上でバックテスターは欠かせません。このバックテスターはC++で作られているので、約定履歴1件1件を処理する高解像度なバックテストでも1日分のデータを0.5〜1.0秒で処理することが可能です。
サンプルとして以下のnoteで無料公開したロジックのバックテストコードが記述されたものなります。ご自身のロジックをバックテストする場合、ロジック部分を書き換えてビルドする必要がございますのである程度上級者向けのものになります。mac用のビルド済みファイルと、ある日の約定履歴がダウンロードできますので、以下のロジックのバックテストはビルドしないですぐに実行することができます。
2. 特徴
■ スピード
冒頭で説明した通り、1日分のデータを0.5〜1.0秒で処理することが可能です。
■ パラメータを容易に切り替えられる
C++で作られておりますが、呼び出し部分はpythonを利用しているのでパラメータを容易に切り替えることができます。
処理が高速なため、最適化プログラミングと組み合わせればロジックの運用中に直近のデータでバックテストを行いないながらリアルタイムに最適化することも不可能ではありません。
■ 使用するデータの高速読み込み
約定履歴を1つのCSVファイルとして読み込んでしまうと、データの読み込みに時間がかかってしまいます。dataフォルダに複数のCSVファイルを入れておけば並列で一括読み込みし、約定時間でソートします。
■ バックテスト結果を損益グラフとして表示
バックテストの結果をグラフに出力することで結果を可視化することが可能です。グラフ出力処理はpythonを使用しておりますので、データ量の多いバックテストはグラフの出力に多少時間がかかってしまいます。
■ 遅延の再現
約定履歴のデータを記録する際、リアルタイムな遅延を数値化して一緒に保存しておくことで、その時その時の遅延を適用し、ある程度正確な遅延を再現したバックテストを行うことが可能になります。
3. バックテスト結果のサンプル
ある日のバックテストをこなったときのサンプルデータになります。
■ バックテスト結果
■ バックテスト結果のグラフ
4. 必要なデータ
このバックテスターを利用するには、ご自身で収集した約定履歴が必要になります。以下のデータを保存していただければスムーズに利用することができます。(生の約定履歴に加えて、ベスト価格とベストサイズ、数値化した遅延)
こちらのフレームワークにデータ収集機能が搭載されております。
side
price
size
exec_date
buy_child_order_acceptance_id
sell_child_order_acceptance_id
best_ask_price
best_bid_price
best_ask_size
best_bid_size
realtime_api_latency
5. 環境構築
python3.6以上がインストールされた環境構築が必要になります。以下のコマンドで必要なパッケージをインストールしてください。
# 必要なパッケージのインストールを行うコマンド
$ cd simulation
$ pip3 install -r requirements.txt
6. 起動方法とビルド方法
■ 起動方法
ロジックフォルダに移動し、起動用のファイルを使ってバックテストをおこないます。今回はdisparityロジックを使用します。
$ cd simulation/strategies/disparity
$ python3 run.py
■ ビルド方法
ルートフォルダに移動し、以下のコマンドでロジック名をオプションとして指定することでビルドすることができます。今回はdisparityロジックをビルドします。
$ cd simulation
$ ./compile.sh disparity
7. 注意事項
・バックテストのロジック部分はC++で記述する必要がございます。ある程度のプログラミング知識ないと利用は難しいかもしれません。
・グラフの出力は少し時間がかかります。
・macで開発しており、windowsでの動作確認は行っておりません。
・環境によってはビルドスクリプトを書き換えないといけない可能性があるかもしれません。
・バックテスターの利用方法に関するサポートは致しません。
・ビルド環境など、環境構築に関するサポートは致しません。ご自身のロジックをバックテストしたい方はビルドを行う必要があります。
・本ソフトウェアに関して発生するいかなる問題又は損失に対し、⼀切の責任を負わないものとします。
ここから先は
¥ 10,000
この記事が気に入ったらサポートをしてみませんか?