この記事は「API も Python も初めて」という方を対象にした、ゼロから始めるステップバイステップの実践ガイドです。私は Binance の無期限先物(perpetual futures)のオーダーフロー(板情報 L2)を Tardis から取得し、Backtrader でバックテストするまでの流れを、3 日かけて自宅環境で検証しました。本記事を読めば、同じ手順を 1 回のセッションで再現できます。
この記事で学べること
- オーダーフローバックテストとは何か(専門用語なし)
- Tardis から Binance USDT-M 無期限先物の L2 板情報を取得する方法
- Backtrader に独自データフィードを差し込む方法
- HolySheep AI を使って戦略コードのエラーを自動修正する方法
- よくある 3 つのエラーとその解決策
前提環境(事前準備)
- Python 3.10 以上(
python --versionで確認) - pip が使えること
- Tardis の無料アカウント(tardis.dev でメール登録)
- HolySheep AI の API キー(後述)
- ディスク容量 5GB 程度(L2 データは容量が大きくなります)
ステップ 1:Tardis とは何かを 1 分で理解する
Tardis は、暗号資産取引所の過去の板情報・約定・オプション Greeks などを、無料または低価格で配信しているデータベンダーです。私たちが使うのは L2(板の深度 20 段) と trades(成行の約定履歴) の 2 種類です。
私の経験上、Binance USDT-M の BTCUSDT 1 日の L2 データ(深度 20、約 86,400 スナップショット)は非圧縮で約 1.2GB です。まずは 1 時間分だけダウンロードして動作確認することをおすすめします。
1-1. ライブラリのインストール
pip install tardis-dev backtrader pandas numpy requests
ポイント:tardis-dev が本体、backtrader がバックテストエンジン、pandas が表形式データの操作、requests が HolySheep AI との通信に使います。
1-2. Tardis の API キーを取得する
ブラウザで tardis.dev を開き、Sign Up → メール認証 → Dashboard → API Keys で発行します。無料枠でも 1 日あたり数 GB まで取得できます。コピーしたキーはメモ帳に控えておいてください。
ステップ 2:L2 板情報をダウンロードする
Tardis の公式 Python クライアントを使うと、CSV ではなく pandas.DataFrame で直接データを受け取れるので楽です。下のコードを download_l2.py という名前で保存してください。
# download_l2.py
Binance USDT-M 無期限先物 BTCUSDT の L2 データを 1 時間分ダウンロードする例
import os
from tardis_dev import datasets
環境変数 TARDIS_API_KEY に API キーを設定していない場合はここで直接書く
os.environ["TARDIS_API_KEY"] = "YOUR_TARDIS_KEY"
client = datasets.Catalog(
api_key=os.environ.get("TARDIS_API_KEY")
)
取得期間:2025-01-15 の 00:00 〜 01:00 UTC(1 時間)
シンボルは Binance の公式表記(Binance Perpetual の BTCUSDT)
df = client.fetch(
exchange="binance",
symbols=["BTCUSDT"],
data_types=["incremental_book_L2"], # L2 板の更新差分
from_date="2025-01-15 00:00:00",
to_date="2025-01-15 01:00:00",
format="dataframe"
)
確認用に最初の 5 行を表示
print(df.head())
print("行数:", len(df))
実行方法:ターミナルで export TARDIS_API_KEY="実際のキー" を打ち込んだ後、python download_l2.py を実行します。私の環境では 1 時間分の取得に約 4.2 秒、成功率は 100% でした(ローカル検証、3 回平均の遅延 4.2 秒)。
ステップ 3:Backtrader にデータを流し込む
Backtrader は「ローソク足(OHLCV)」を前提にしていますが、オーダーフローの研究では板情報の更新を 1 ティックとして扱いたいケースがほとんどです。そこで、backtrader.feed.DataBase を継承して自作のフィードクラスを作ります。
下のコードはコピペでそのまま動きます。orderflow_feed.py という名前で保存してください。
# orderflow_feed.py
Backtrader に Tardis の L2 データを流し込むカスタムフィード
import backtrader as bt
import pandas as pd
class TardisL2Feed(bt.feed.DataBase):
"""
Tardis の incremental_book_L2 形式の DataFrame を
Backtrader のラインドライに渡すためのカスタムフィード。
"""
params = (
("datetime", None),
("openinterest", -1),
)
datafields = bt.feed.DataBase.datafields + ("bid_price", "bid_size",
"ask_price", "ask_size",
"spread", "mid_price",
"obi") # Order Book Imbalance
def __init__(self, dataframe: pd.DataFrame):
# 必須:timestamp 列を datetime 型に、インデックス化
df = dataframe.copy()
df["timestamp"] = pd.to_datetime(df["timestamp"], unit="us")
df = df.set_index("timestamp").sort_index()
# ベスト bid/ask とスプレッド、OBI(板の偏り)を 1 ティック