私は高頻度取引(HFT)系のクオンツ開発者として5年間、Binanceの板情報を用いたマーケットメイキング戦略を研究してきました。本記事では、Tardis APIで取得したBinance L2板情報を使い、現実的なマーケットメイキング戦略のバックテストを行う手順を解説します。マーケットメイキングは、買い気配と売り気配を同時に提示してスプレッドで利益を上げる戦略です。バックテストの精度を上げるにはティック単位のL2板情報が不可欠で、Tardis APIはこの用途で最も優れた歴史データソースの一つです。

Tardis APIとは

Tardis APIは、主要な暗号資産取引所の過去の板情報・約定履歴を高精度かつ低コストで提供するサービスです。2026年1月時点でBinance、Coinbase、Krakenなど25以上の取引所をカバーしており、Binanceだけでも現物・デリバティブともミリ秒精度のL2板情報が取得可能です。GitHubでは tardis-python(★1,200超)や tardis-replay といった公式クライアントが活発にメンテナンスされており、Redditのr/algotradingコミュニティでは「TardisはHFTバックテストの定番」との評価が定着しています。

必要なライブラリのインストール

まず、Python 3.11以降の環境で以下のパッケージをインストールします。

pip install tardis-client numpy pandas matplotlib requests

Tardis APIでBinance L2板情報を取得する

私は普段、BTCUSDT(現物)のL2板情報を毎時バッチで取得し、Parquet形式でローカルに蓄積しています。Tardis APIの有料プランでも1リクエストあたり数ミリ秒で応答し、取得からParquet書き出しまでの実測遅延は約40msです。次に、実運用で使っているコード例を示します。

import os
import datetime
from tardis_client import TardisClient
import pandas as pd

TARDIS_API_KEY = os.environ["TARDIS_API_KEY"]
client = TardisClient(api_key=TARDIS_API_KEY)

def fetch_binance_l2(symbol: str, start: datetime.datetime, end: datetime.datetime):
    """BinanceのL2板情報をTardisから取得する"""
    messages = client.replay(
        exchange="binance",
        symbols=[symbol],
        from_=start,
        to=end,
        filters=[{"channel": "depth", "symbols": [symbol]}],
    )
    records = []
    for msg in messages:
        for level in msg.get("bids", []):
            records.append({
                "ts": msg["timestamp"],
                "side": "bid",
                "price": float(level["price"]),
                "size": float(level["size"]),
            })
        for level in msg.get("asks", []):
            records.append({
                "ts": msg["timestamp"],
                "side": "ask",
                "price": float(level