見出し画像

Yet Another BackTester for BFS-X mm-logic

こんにちわ。イナトレです。

本書は、もうひとつの BFS-X mm-logic 用ののバックテスターという意味で Yet Another BackTester for BFS-X mm-logic と名付けた BFS-X mmbot 専用のバックテスターの記事になります。

本業に忙殺されて bitFlyer からしばらく離れる日々が続いていましたが、本業が一旦落ち着いたこともあり bitFlyer に戻ってまいりました。bot は人気のフレームワーク BFS-X を使って運用しています。

本業忙殺により少し前に bF から一時撤退するときに運用していた mm logic が根本的にメンテナンスしないと戦えない状況になっていました。このたび復帰にあたり新ロジックを開発する必要がありましたが、考察が捗るように板情報も使える mmbot モード専用のバックテスターを開発するところからはじめました。せっかく作るなら販売も見据えて開発することにして、本書にて公開の運びとなっております。

とはいえ、自分の bF ロジック開発が捗ることを最優先にするポリシーで開発を進めていますので、自分が絶対に使わないであろう一部の特殊注文は未実装だったり全てのロジックに対応したものではありません。また、BFS-X 専用なので、当然ながら BFS-X が使える方限定になりますので、予めご承知おきください。

■ アップデート履歴

2020.11.27 データ収集プログラムが起動できない不具合を修正


■ 特徴(ポジティブ面)

寝てる間に激しく BFS-X がバージョンアップを繰り替えてしていますので、すべての仕様を把握した実装はできていませんが、基本的には ver690 をベースに自分が実運用する mmbot ロジックとバックテストの結果を比較しながら開発を進めました。特徴は以下のとおりです。

● 板情報(board)を高精度に使うことができる
● initialize, executions, board_updated, realtime_logic, loss_cut_check に対応。ただし board_updated の実行には時間をかなり要する
● マルチコア対応(コア数が多いほど組み合わせ処理は早く完了)
● 省メモリ設計(16GB以上推奨、8GBでも動作するスペック)
● 自分が使うかもしれない特殊注文 SIMPLE には対応(したつもり)
● 極力実弾に近づくようデータの持ち方には一工夫
● mmbot ロジック専用のため、その他のモードは動作不可
● time.time(), sleep() を置き換えるため何も考慮せずバックテスト可能
● seconds_to_expire, after_event の注文引数に対応
● 専用のデータ収集用ロジックが付属

■ 但し書き(ネガティブ面)

● 極力実弾に近づくよう工夫はしましたが、やはり高頻度取引が故に取引所の状況や自分自身の注文が与えるインパクトやロジックの特性など様々な要因により、バックテストと実弾の結果の乖離は発生し得ます。

● 板情報を必要としないロジックの場合は BFS-X 謹製の mmbot backtester をご利用いただいたほうが高速です。

● 自分が使わない特殊注文 IFD, OCO, IFDOCO は非対応で、今後も対応予定はありません。

● 他のバックテスターと比べて実行速度はかなり遅い(速度よりプログラムのメンテナンス性を重視した設計にしました)です。私が実弾で運用中の executions で稼働するロジックは丸一日のデータでのバックテストが、Macbook Pro 16 (Core i9)で約 10 分程度要します。

● 非力な CPU だと遅いとご理解ください。CPU が高速でコアが多い CPU ほど快適に動作させることができますが、基本的には 1 実行あたりにのデータ処理に時間がかかるため、並列稼働により実質的な時間を短縮しようという設計方針です。

● データ収集に莫大な DISK 容量が必要です。具体的には executions データは 200MB/day 程度、board データは 12GB/day 程度となります。また圧縮形式でバックテスターを実行することはできません。Google Driveへ日時で退避する運用が必要になってくるかと思います。方法についてはこちらの note をご参照ください。

■ 実弾とバックテストの比較例

これは 2020/10/3 のデータにおける、bF 復帰記念を称した私の新ロジックの実弾結果とバックテストの比較例となります。これは比較的似ているケースの例示となります。

● とあるロジックの実弾

画像3

● とあるロジックのバックテスト

画像8

● ポジションの比較(スケールを合わせて重ね合わせ)

画像3

運用しているイメージとしては、精度は 60-70% 程度といった感じでしょうか。バックテストでは右肩上がりだけど実弾では右肩下がり、またその逆ということも、この数日の間でも経験しておりますが、精度が 50% を超えてる感触はあるので、私的にはある程度結果を信じてパラメータチューニングに活用することにしています。

■ BFS-X 付属ロジックのバックテスト結果

2020/10/3 の丸一日のデータを用いてサンプルロジックのいくつかを検証がてらバックテストしたので公開しておきます。他のバックテスターの結果と比較して、概ね同じ傾向であることを確認しており正しく動作していると思っています。左が別のバックテスターでの結果、右が本書のバックテスターでの結果になります。

● mm_spread2(backtest時間: 405.770sec)

画像6

● mm_volume(backtest時間: 385.343sec)

画像6

● mm_std(backtest時間: 412.462sec)

画像6

● mm_board(backtest時間: 402.831sec)

画像7

■ 価格

15,000 円(税込)です。

■ サポートについて

本書バックテスターが欲しいと思われる方は、すでに BFS-X の運用実績のある botter の方々でしょうから、インストール等々を自力で乗り越えられる方々を想定しており、基本的にサポートは付随しておりません。 

また、BFS-X 付属のサンプルロジックや運用中ないしは運用してきたロジックでの動作検証は行いましたが、全てのロジックで正常稼働する保証がありません。また性質上うまく行かない場合でもロジックの共有が難しいと思いますので、個別対応は多くの場合できかねることご承知おきください。

● 確認済みの動作環境
・macOS catalina + python3.6.8
・Windows10 + python 3.7 + WindowsGit + GitBash

ご理解いただける方のみ下記の有料パートをご購入下さい。

■ ここから先は有料パートになります

ここから先は

7,177字 / 5ファイル

¥ 15,000 (数量限定:残り 3 / 3)

この記事が気に入ったらサポートをしてみませんか?