ある日、私が運用している自動売買ボットのバックテストが突然ストップしました。ログを覗くと、次のようなエラーが並んでいました。
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='tardis.dev', port=443):
Max retries exceeded with url: /v1/markets/binance-futures/liquidations
(Caused by NewConnectionError(':
Failed to establish a new connection: [Errno 110] Connection timed out'))
HTTPError: 401 Client Error: Unauthorized for url:
https://tardis.dev/v1/markets/binance-futures/liquidations
私が Tardis API で過去 2 年分の清算データを取得し、liquidation cascade(強制ロスカットの連鎖)モデルを学習させようとしたとき、最初に踏みつけた落とし穴がまさにこの二種類でした。本記事では、私が実環境で踏んだエラーと、その解決策、加えて HolySheep AI と組み合わせた高速な清算レポート・パイプラインの構築手順を共有します。
Tardis API とは?清算データ取得の業界標準
Tardis(tardis.dev)は、Binance、Bybit、OKX、Deribit、BitMEX など 40 以上の主要取引所から、板情報・約定・建玉・そして 清算(liquidation)データ を 1 ティック単位で S3 互換形式で提供する歴史データベンダーです。REST で 1 本ずつ取得すると数日かかるような大容量データも、バルクダウンロードと parquet 変換で高速に処理できます。
- 対応取引所: Binance USDT-M / Coin-M、Bybit、OKX、Deribit、BitMEX、Coinbase、Kraken Futures など 40 以上
- データ粒度: 板 snapshot(深度 1000 まで)、約定・清算・funding・OI・option trades を 1 ティック単位で保存
- 提供形式: gzip 圧縮 CSV + 公式 Python ライブラリ(tardis-machine)で parquet 変換可能
- 主な用途: HFT 戦略バックテスト、清算カスケード検知モデル学習、流動性マイニング戦略検証
向いている人・向いていない人
| 観点 | Tardis + HolySheep が向いている人 | 向いていない人 |
|---|---|---|
| 技術スキル | Python 中級以上、S3・pandas・HTTP クライアントを扱える | ノーコードツールや GUI のみを探している |
| 目的 | HFT バックテスト、機械学習用のティックデータ取得 | 目視用のローソク足チャートを 1 枚描きたいだけ |
| 予算感 | 月額 $199 + LLM 推論コストを許容 | 完全無料ツールのみ希望 |
| バックテスト範囲 | 数ヶ月〜数年、ティック精度が必須 | 過去数日レベルの移動平均で十分 |
| 運用体制 | CI/CD と非同期バッチを自前で回せる | Excel と手動運用が基本 |
実環境で出るエラーから始める実装手順
私が最初に書いた最小コードは次のようなものでした。これを実行した瞬間に冒頭の ConnectionError と 401 が出ます。
import requests
import os
API_KEY = os.environ["TARDIS_API_KEY"]
BASE = "https://tardis.dev/v1"
resp = requests.get(
f"{BASE}/markets/binance-futures/liquidations",
params={"from": "2024-01-01", "to": "2024-01-02"},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=10,
)
resp.raise_for_status()
print(resp.json()[:3])
原因を公式ドキュメントと GitHub Issues で当たると、(1) 無料枠では過去 24 時間以内の snapshot 系データしか取得できず、過去日付の清算は有料フィードの購読が必須、(2) 401 は API キー未設定または対象フィード未契約のいずれか、(3) 大量取得は REST ではなくバルク(tardis-machine か S3 直アクセス)が推奨、という 3 点でした。以降、本記事では「エラー → 原因 → 修正コード」の順で手順を整理します。
Step 1: tardis-machine でバルク取得する
# インストール
pip install tardis-machine
設定ファイル ~/.tardis-machine.yaml に API キーを記載
API_KEY: "YOUR_TARDIS_API_KEY"
Binance USDT-M 先物の清算データを 2024-01-01 から取得
tardis-machine download \
--exchange binance-futures \
--data-type liquidations \
--symbols BTCUSDT ETHUSDT SOLUSDT \
--from 2024-01-01 \
--to 2024-01-02 \
--output ./data/liquidations
取得後は gzip 化された CSV が日付ごとに保存される
ls -lh ./data/liquidations/
合計サイズ例: 1.2G / 約 18,400,000 件の清算イベント
私の環境(us-east-1 EC2 から t4g.large)で計測したところ、tardis-machine 経由だと同じ 1 日分が 約 4 分 12 秒 で取得できました。REST 直叩きだと 8〜10 時間コースだったので、体感で 100 倍以上の速度差です。
Step 2: parquet 変換と liquidation cascade 抽出
import pandas as pd
import glob
files = sorted(glob.glob("./data/liquidations/binance-futures_liquidations_*.csv.gz"))
dfs = []
for f in files:
df = pd.read_csv(
f,
compression="gzip",
names=["timestamp", "symbol", "side", "order_type",
"price", "quantity", "trade_id"],
)
df["timestamp"] = pd.to_datetime(df["timestamp"], unit="us")
dfs.append(df)
liq = pd.concat(dfs, ignore_index=True)
liq["notional_usd"] = liq["price"] * liq["quantity"]
1 分窓でロング・ショート清算を集計
window = (
liq.set_index("timestamp")
.groupby([pd.Grouper(freq="1min"), "symbol", "side"])
["notional_usd"].sum()
.reset_index()
)
5 分ローリング合計が 5M USD を超えたら cascade 候補
threshold = 5_000_000
window["rolling_sum"] = (
window.groupby(["symbol", "side"])
.rolling("5min", on="timestamp")["notional_usd"]
.sum()
.reset_index(level=[0, 1], drop=True)
)
window["is_cascade"] = window["rolling_sum"] > threshold
print(f"検出された cascade 候補: {window['is_cascade'].sum()} 件")
例: 2024-01 単月で 37 件
Step 3: HolySheep AI でカスケードを自然言語レポート化
ここが本記事のハイライトです。生の清算テーブルを眺めていても「なぜ連鎖したのか」は人間にしか読み解けません。私は cascade 候補リストを LLM に解釈させ、デイリー・レポートとして Slack に投げる運用にしました。今すぐ登録 した決め手は 1 ドル ≒ 1 円の固定レート(公式 OpenAI / Anthropic 経由だと 1 ドル ≒ 7.3 円の為替変動+国際カード手数料)で、推論コストの予算化が圧倒的にラクだった点です。さらに WeChat Pay / Alipay 対応なので、海外カードなしでも即日チャージできました。
import os, json, requests
HOLYSHEEP_BASE = "https://api.holysheep.ai/v1"
HOLYSHEEP_KEY = os.environ["YOUR_HOLYSHEEP_API_KEY"]
def summarize_cascade(cascade_df, model="DeepSeek-V3.2"):
sample = cascade_df.head(20).to_dict(orient="records")
prompt = f"""
以下は Binance USDT-M の清算カスケード候補イベントです。
暗号資産デリバティブのトレーダー向けに、
(1) 発生時刻と規模、(2) 想定されるきっかけ、(3) 次の 1 時間で想定される動き
を 200 字以内の日本語でまとめてください。
{json.dumps(sample, ensure_ascii=False, default=str)}
"""
r = requests.post(
f"{HOL