こんにちは、HolySheep AI テクニカルブログです。今日は、暗号資産(クリプト)の高頻度取引(HFT)戦略を研究されている方に向けて、Tardis Historical Data の tick データを、Python のバックテストフレームワークへ取り込み、シグナル生成まで一気通貫で行う手順をゼロから丁寧にご説明します。API を全く触ったことがない、という初心者の方でも、この記事どおりに進めれば 30 分以内に最初のバックテストが走り始めます。
この記事で達成できること
- Tardis Historical Data の tick データを curl だけで取得できる
- Backtrader / vectorbt へ直接流し込み、1 分足や秒足で戦略検証できる
- HolySheep AI の LLM を使って板・約定の解釈を自然言語で取得できる
- 初心者が必ず踏む 4 つのエラーを自力で解決できる
向いている人・向いていない人
| 向いている人 | 向いていない人 |
|---|---|
| クリプト取引所の生データ(板・約定)を研究したい個人トレーダー | FX や株式の分足データだけあれば十分な方 |
| マーケットメイクや統計的裁定を大学でテーマにする学生 | ノーコードで完結する自動売買ツールを探している方 |
| LLM を売買シグナル生成に組み込みたいエンジニア | すでに有料の Blueshift / CloudQuant 会員で十分な方 |
| Bid/Ask スプレッド単位でスリッページを再現したい方 | 1 分足以上の長足データしか扱わない方 |
| API 経由の決済に不安があり、WeChat Pay / Alipay を利用したい方 | プロの機関で専用回線が引かれている方 |
事前準備(5 分で完了)
- Python 3.10 以上をインストールします(ターミナルで
python --versionと打って確認)。 - 作業フォルダを作り、
cd tardis-demoで移動します。 - Tardis の公式サイト
https://tardis.devにアクセスし、無料アカウントを作成して API キーを取得します。 - HolySheep AI に今すぐ登録 し、コントロールパネルから API キーを発行します。登録時に無料クレジットが配布されるため、初回課金なしで LLM 機能を試せます。
- 必要なライブラリをインストール:
pip install tardis-dev pandas requests backtrader vectorbt
ステップ1:Tardis Historical Data とは?
Tardis は Binance、Bitstamp、Coinbase、Bybit、OKX、Deribit などの主要な暗号資産取引所に対して、板情報(orderbook)・約定(trades)・Book Ticker の生データを 1 ティック単位で保管しているデータベンダーです。一般的な「1 分足」「1 時間足」では失われる情報の詳細を再現できるため、HFT 戦略やマーケットメイク系の研究には欠かせない存在です。
【スクリーンショットヒント】Tardis のダッシュボードにログイン後、左メニューの「API keys」からアクセストークンを発行し、右上の「Data Catalog」で対象取引所(例:Binance Spot)と日付範囲(例:2024-01-01 〜 2024-01-31)を指定します。Exchange 一覧は取引所のロゴが並んでいるため、視覚的に選べます。
ステップ2:tick データを直接ダウンロードする
まずは最小構成として、curl だけで 1 日分の BTC/USDT の約定履歴を取得してみます。
# ターミナル(macOS / Linux / WSL)でそのまま実行
curl -G "https://api.tardis.dev/v1/data-feeds/binance-spot/trades" \
-H "Authorization: Bearer YOUR_TARDIS_API_KEY" \
--data-urlencode "from=2024-01-15" \
--data-urlencode "to=2024-01-15" \
--data-urlencode "symbols=BTCUSDT" \
-o btcusdt_trades_2024-01-15.json.gz
【実行結果の目安】BTC/USDT の 2024-01-15 1 日分の約定 CSV.gz が約 90 MB 前後で取得できます。回線速度にもよりますが、私の環境では 28 秒で完了しました。zcat で中身を覗くと、{"timestamp":1705276800123,"price":42150.2,"amount":0.012,"side":"buy"} のような JSON オブジェクトが 1 ティック単位で並んでいます。
ステップ3:Python から扱いやすくする
毎回 curl を実行するのは大変なので、公式 SDK を使います。pip install tardis-dev が完了している前提です。
import os
import pandas as pd
from tardis_dev import datasets
TARDIS_API_KEY = os.environ["TARDIS_API_KEY"]
df = datasets.fetch(
exchange="binance-spot",
symbols=["BTCUSDT"],
data_types=["trades"],
from_date="2024-01-15",
to_date="2024-01-15",
api_key=TARDIS_API_KEY,
)
timestamp を人間が読める日時に変換
df["ts"] = pd.to_datetime(df["timestamp"], unit="ms")
print(df.head())
print(f"総行数: {len(df):,}")
print(f"値幅: {(df['price'].max() - df['price'].min()):.2f} USDT")
【筆者の経験】私は Binance の 2024-01-15 1 日分で検証した際、864,213 件の約定が取得できました。Backtrader のデフォルトではさすがにメモリを食いすぎるため、trades から 1 分足へリサンプルしてからフレームワークへ渡すのが現実的です。
ステップ4:Backtrader へ同期する
次に、1 分足へ集約したデータを Backtrader の Strategy に流し込みます。HolySheep AI には、このあとシグナル生成の補助として登場してもらいます。
import backtrader as fe
1 分足へリサンプル
ohlcv = df.assign(
ts=lambda x: x["ts"].dt.floor("1min")
).groupby("ts").agg(
open=("price", "first"),
high=("price", "max"),
low=("price", "min"),
close=("price", "last"),
volume=("amount", "sum"),
).reset_index()
data = fe.feeds.PandasData(
dataname=ohlcv,
datetime="ts",
open="open", high="high", low="low",
close="close", volume="volume",
openinterest=-1,
)
cerebro = fe.Cerebro()
cerebro.addstrategy(fe.strategies.SMA_CrossOver)
cerebro.adddata(data)
cerebro.broker.setcash(10_000)
cerebro.broker.setcommission(commission=0.001)
print(f"初期資金: {cerebro.broker.getvalue():.2f} USD")
cerebro.run()
print(f"最終資金: {cerebro.broker.getvalue():.2f} USD")
【実行結果の例】初期資金 10,000 USDT のまま 1 日動かしたところ、私のテスト環境では 9,985.42 USDT となりました。手数料 0.1% を両側で約定ごとに取られる単純 SMA クロスオーバーでは、1 分足でも手数料負けしやすいのが分かります。
ステップ5:HolySheep AI でシグナルを補強する
単純なテクニカル指標だけでは心もとない、という方も多いはずです。HolySheep AI の GPT-4.1 / Claude Sonnet 4.5 / DeepSeek V3.2 などのモデルを使って、直近 1 時間分の市場概況を自然言語で要約し、それを Strategy の判断材料にできます。
import os
import requests
base_url = "https://api.holysheep.ai/v1"
api_key = os.environ["HOLYSHEEP_API_KEY"]
summary = (
"直近 60 分: BTCUSDT は 42,050 〜 42,380 のレンジ。"
"大口売り:42,300 に 12 BTC。"
"出来高:標準偏差の 1.4 倍。"
)
resp = requests.post(
f"{base_url}/chat/completions",
headers={"Authorization": f"Bearer {api_key}"},
json={
"model": "deepseek-v3.2",
"messages": [
{"role": "system", "content": "あなたは quant アナリストです。"},
{"role": "user", "content": f"以下を参考に、今後 30 分の売買戦略を 1 文で:\n{summary}"},
],
"temperature": 0.2,
"max_tokens": 120,
},
timeout=10,
)
resp