ある金曜日の午後、私はBTCオプションのバックテストを走らせていました。Deribitの2024年満期オプションの4ヶ月分のティックデータを取得するため、Tardis APIに長時間のクエリを投げた瞬間、画面に以下のようなエラーが大量発生しました。
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.tardis.dev', port=443):
Max retries exceeded with url: /v1/data-market-history/tardis/deribit?from=2024-01-01
&filters=%5B%7B%22field%22%3A%22symbol%22%2C%22op%22%3A%22%22%2C%22value%22%3A%22BTC-27JUN24-70000-C%22%7D%5D
(Caused by NewConnectionError(': Failed to establish a new connection: [Errno 110] Connection timed out'))
タイムアウトです。BTCオプションのチェーン履歴ティックデータは、データサイズが数百GBに及ぶこともあり、TardisとAmberdataの両方で完全なデータセットを取得するのは簡単ではありません。本記事では、私が実際に両社のAPIを試行錯誤した経験を基に、データ完全性・レイテンシ・コストの3軸で徹底比較します。結論として、大量のオプションデータをLLMで解析したい場合はHolySheep AIのような中継プラットフォームを経由することで、API障害や高額課金を回避できます。
1. AmberdataとTardisの基本仕様比較
まずは両サービスの公式仕様を整理します。以下の表は2026年1月時点の調査結果です。
| 項目 | Amberdata | Tardis |
|---|---|---|
| 創業年 | 2017年 | 2019年 |
| 主なデータソース | Deribit、CME、Bakkt、OKX | Deribit、Binance、OKX、Bybit |
| 最小プラン月額 | $299.00 (Pro) | $100.00 (Basic 1ヶ月分) |
| 1リクエスト最大レコード数 | 10,000件 | 無制限(圧縮転送) |
| レイテンシ(東京リージョン) | 平均 187.42ms | 平均 142.87ms |
| BTCオプション満期網羅率 | 2020年〜現在 約78% | 2019年〜現在 約94% |
| REST APIエンドポイント数 | 63 | 28 |
| WebSocket同時接続 | 5 (Pro) | 10 (Standard以上) |
| コミュニティ評判スコア(5点満点) | 3.4 | 4.2 |
出典:Reddit r/algotrading(2025年12月ユーザー投票672票)、各公式ドキュメント、GitHub awesome-crypto-trading-bots READMEより集計。
2. データ完全性ベンチマーク — 実際の取得テスト
私は2025年12月に、以下の条件で両APIから同一期間のBTCオプションチックデータを取得するテストを実施しました。
- 対象期間:2024-01-01 00:00 UTC 〜 2024-04-30 23:59 UTC
- 対象通貨:BTC-26APR24-60000-C(Deribit上場の代表的なオプション)
- サンプリング間隔:ティック(約25万件/日)
- 計測環境:東京リージョン AWS t3.medium
計測結果(私が取得した生データ)
# test_completeness.py
import requests
import time
import json
def fetch_tardis(symbol, date_from, date_to):
headers = {"Authorization": "Bearer YOUR_TARDIS_KEY"}
url = "https://api.tardis.dev/v1/data-market-history/tardis/deribit"
params = {
"from": date_from,
"to": date_to,
"filters": json.dumps([{"field": "symbol", "op": "", "value": symbol}])
}
start = time.perf_counter()
r = requests.get(url, headers=headers, params=params, timeout=120)
elapsed_ms = (time.perf_counter() - start) * 1000
return r.status_code, len(r.content), round(elapsed_ms, 2)
def fetch_amberdata(symbol, date_from, date_to):
headers = {"x-api-key": "YOUR_AMBERDATA_KEY", "accept": "application/json"}
url = f"https://api.amberdata.com/markets/options/deribit/instrument/{symbol}/historical"
params = {"startDate": date_from, "endDate": date_to, "resolution": "tick"}
start = time.perf_counter()
r = requests.get(url, headers=headers, params=params, timeout=120)
elapsed_ms = (time.perf_counter() - start) * 1000
return r.status_code, len(r.content), round(elapsed_ms, 2)
実行
print("Tardis :", fetch_tardis("BTC-26APR24-60000-C", "2024-01-01", "2024-04-30