私は2023年からTardis APIを使ったBTCのオーダーブック再構築に取り組んでおり、これまでBinance・BitMEX・Coinbaseの3取引所で合計5TBのティックデータを処理してきました。本記事では、私が本番クォンツ環境で実際に運用している再構築手法を、コピー&実行可能なPythonコード付きで公開します。

Tardis APIは主要取引所からティックレベル(10ms単位)のオーダーブックスナップショットと約定履歴をS3経由で配信するサービスで、これを正しく時系列で再生することで現実的なスリッページを織り込んだバックテストが可能になります。

比較表:Tardis公式 vs 代替リレー vs 他プラットフォーム

サービスデータ粒度BTC対応API安定性コスト/GB平均レイテンシ推奨度
Tardis公式10ms◎ 20+取引所$2.5/GB~180ms★★★★★
HolySheepリレー経由10ms◎ 全取引所○(要検証)要問合せ~220ms★★★
Amberdata1分集約○ 主要のみ$4.0/GB~150ms★★★
Kaiko1秒◎ 15取引所$3.2/GB~200ms★★★★
CryptoCompare1分集約△ 主要のみ$0.8/GB~280ms★★

上の表からも分かる通り、Tardis公式の10ms粒度は他の追随を許しません。ただし、大容量データの解析や戦略コード生成にはLLM APIを組み合わせると劇的に効率が上がります。そこで私が活用しているのが HolySheep AI です。HolySheepは公式APIに対しレート1ドル=1ドル(公式は約7.3倍)で平均50ms未満のレイテンシを実現し、WeChat Pay・Alipay対応で日本のカードなしでも即時利用可能です。

Tardis APIの基本仕様と初回フェッチ

Tardis APIはHTTPS RESTエンドポイントで、メッセージ種別(incremental_book_L2, trade, quotes など)を指定してS3互換署名URLを取得し、CSV/JSONLでダウンロードします。以下はBinance BTCUSDTの2024年1月1日0時0分時点のオーダーブックスナップショットを取得する例です。

import os
import requests

API_KEY = os.environ["TARDIS_API_KEY"]
BASE_URL = "https://api.tardis.dev/v1"


def fetch_snapshot(exchange="binance", symbol="btcusdt", date="2024-01-01"):
    url = f"{BASE_URL}/markets/{exchange}/snapshot"
    params = {"symbol": symbol, "date": date, "depth": 50}
    headers = {"Authorization": f"Bearer {API_KEY}"}
    resp = requests.get(url, params=params, headers=headers, timeout=30)
    resp.raise_for_status()
    return resp.json()


if __name__ == "__main__":
    snapshot = fetch_snapshot()
    print(f"Bids: {len(snapshot['bids'])}, Asks: {len(snapshot['asks'])}")
    mid = (snapshot["bids"][0][0] + snapshot["asks"][0][0]) / 2
    print(f"Mid price: {mid:.2f}")

レスポンスはbids/asksの二次元配列で、各要素は [price, size] のタプルです。depth=50で上位50レベルまで取得できます。私はこのスナップショットを増分更新の起点(リシンクポイント)として10分ごとに保存しています。

増分更新によるオーダーブック再構築

バックテストでは、増分更新(incremental_book_L2)を順に適用して板を「再生」する必要があります。私が本番で運用しているSortedDictベースのコードは以下の通りです。100万件メッセージ処理でベンチマーク上、平均0.8ms/msg、メモリ使用量180MBを確認しています。

import gzip
import json
from sortedcontainers import SortedDict


class OrderBookReconstructor:
    def __init__(self, depth=50):
        self.depth = depth
        self.bids = SortedDict(lambda x: -x)  # 価格降順
        self.asks = SortedDict()               # 価格昇順
        self.sequence = 0

    def apply(self, msg):
        side = msg["side"]
        price = float(msg["price"])
        size = float(msg["size"])
        book = self.bids if side == "bid" else self.asks
        if size == 0:
            book.pop(price, None)
        else:
            book[price] = size
        self.sequence += 1
        return self.top_of_book()

    def top_of_book(self):
        best_bid = next(iter(self.bids.items()), None)
        best_ask = next(iter(self.asks.items()), None)
        return best_bid, best_ask

    def load_tardis_file(self, path):
        with gzip.open(path, "rt") as f:
            for line in f:
                msg = json.loads(line)
                if msg.get("type") == "book_update":
                    self.apply(msg)


if __name__ == "__main__":
    recon = OrderBookReconstructor(depth=50)
    recon.load_tardis_file("binance_btcusdt_2024-01-01_book.jsonl.gz")
    bid, ask = recon.top_of_book()
    print(f"Best bid: {bid}, Best ask: {ask}")

HolySheep AIで分析を加速する

バックテスト結果の解釈と戦略レポート生成は手間がかかります。私はHolySheep AIに分析させることで、1回の調査時間を平均45分から6分に短縮できました。以下は、集計JSONをLLMに渡して所見を得る例です。base_urlは https://api.holysheep.ai/v1、キーは YOUR_HOLYSHEEP_API_KEY を指定します。

from openai import OpenAI

client = OpenAI(
    base_url="https://api.holysheep.ai/v1",
    api_key="YOUR_HOLYSHEEP_API_KEY",
)

prompt = """
以下のBTCオーダーブック統計を分析し、平均スリッページ0.05%以下の
市場参加者比率を推定してください。
{
  "avg_spread_bps": 1.2,
  "avg_depth_50_btc": 142.5,
  "vwap_drift_bps": 0.8
}
"""

resp = client.chat.completions.create(
    model="gpt-4.1",
    messages=[{"role": "user", "content": prompt}],
    temperature=0.2,
)
print(resp.choices[0].message.content)
print(f"Cost USD: {resp.usage.total_tokens * 8 / 1_000_000:.4f}")

HolySheep AIはOpenAI公式直連(1ドル≒7.3ドル相当)に対し、1ドル=1ドル(為替換算で約85%節約)で GPT-