[板情報+約定履歴]MMBOT専用バックテスター
はじめに
本noteでは、板情報と約定履歴をベースとしたMMBOTのバックテスターについての解説、有料部分にてMMBOTバックテスターおよびデータ取得(Bybit)のソースコードを公開しています。
取引所APIを参照するかのように実際のBOT運用に近い形でバックテスターを実装したので、バックテストから実運用までをシームレスに移行することができます。ソースコードはすべてPythonで実装しています。
バックテストに使用するデータ
バックテストに使用するデータは板情報と約定履歴になります。また、有料部分にてBybitのBTCUSDTのデータ取得コードを添付しています。
板情報
板情報は、下図のような形式のデータを使用します。有料部分のデータ取得コードにて自動で生成できます。
約定履歴
約定履歴は、下図のような形式のデータを使用します。有料部分のデータ取得コードにて自動で生成できます。
ストラテジーの作り方
ストラテジーは、以下のように作ります。
下記の例は、best_ask, best_bidに2本の指値注文を出し、10秒後に注文キャンセルをして0.1秒待つといった動作を繰り返すシンプルなストラテジーです。
REST APIリクエストの遅延などもapi.sleepを注文直前などに書くことで疑似的に再現することが可能です。
# バックテスターに板情報と約定履歴のDataFrameを与え、そのほかに呼値、最小注文数量や最大ポジションを設定する
api = API(df_orderbook=df_orderbook, df_trade=df_trade, price_in_units=0.5, minimum_order_size=0.001, max_position=0.01)
api.initialize() # バックテスターを初期化(必須)
api.sleep(5) # 板情報や約定履歴を蓄積するために最初の5秒だけ待機
while True:
orderbook = api.get_orderbook() # 現時点からみて過去の全ての板情報を取得
trade = api.get_trade() # 現時点からみて過去の全ての約定履歴を取得
best_ask, best_bid = orderbook['ask1'][-1], orderbook['bid1'][-1] # best_ask, best_bidを取得
api.place_order(order_type='limit', side='sell', price=best_ask, size=0.008) # 売り指値注文
api.place_order(order_type='limit', side='buy', price=best_bid, size=0.008) # 買い指値注文
api.sleep(10) # 10秒待って注文が約定するのを待つ
api.cancel_all_orders() # 全ての注文をキャンセル
if api.sleep(0.1): break # 0.1秒待機(これ以上時間を進められない場合はループ終了)
api.plot_result() # バックテスト結果を表示
バックテスト指標
バックテストで確認できる指標は以下の通りです。
価格推移
損益推移
保有ポジション推移(0付近で高頻度に上下していればポジションの偏りが少なく在庫リスクが小さい)
約定取引高の累積和の推移(直線的に右肩上がりだと安定して取引している)
注文してから約定するまでにかかった時間(指数分布に従う)
ソースコードは可能な限り簡潔にカスタマイズしやすく書いたつもりなので、他の指標(maxDDやSRなど)を自分で作っていくことも比較的簡単だと思います。
有料部分について
有料部分では以下を公開しています。
バックテスターのソースコード(Python)
Bybitの板情報と約定履歴の取得コード(Python:そのままバックテスターに与えることができます)
Bybitの板情報と約定履歴のCSVファイル(サンプル)
免責事項
本noteやソースコードの利用により被る損失や被害について、筆者は一切の責任を負うことはできません。
以下、有料部分になります。
ここから先は
¥ 5,000
この記事が気に入ったらサポートをしてみませんか?