2024年、ある暗号資産クォンツのクライアントから「HyperliquidとBinanceのK線データを同じデータベースに統合し、裁定取引シグナルを生成したい」という相談を受けました。私は当初、両者のAPIレスポンスを単純に縦に並べて比較できると思っていました。しかし実際に実装してみると、思わぬ落とし穴に次々と遭遇します。
最初に遭遇したのが、このエラーです:
Traceback (most recent call last):
File "kline_ingest.py", line 142, in fetch_hyperliquid_candles
record["T"] = int(candle["T"])
TypeError: 'NoneType' object is not subscriptable
Hyperliquidの/infoエンドポイントが、candleSnapshotリクエストに対して空配列を返したケースです。Binanceの/api/v3/klinesエンドポイントは必ず配列を返すため、NoneType処理を書いていなかった私は2時間を溶かしました。本記事では、この実務で得た知見を基に、両プラットフォームのK線データ構造を徹底比較します。
Binance K線データ構造(公式仕様)
Binance Spot APIのGET /api/v3/klinesは、12個のフィールドを持つネスト配列を返します。公式ドキュメントによると、レスポンスは次の形式です:
[
[
1499040000000, // 0: ローソク足開始時刻(UNIX ms)
"0.01634000", // 1: 始値
"0.80000000", // 2: 高値
"0.01575800", // 3: 安値
"0.01577100", // 4: 終値
"148976.11427815", // 5: 出来高(base asset)
1499644799999, // 6: ローソク足終了時刻(UNIX ms)
"2434.19055334", // 7: 出来高(quote asset)
308, // 8: 取引回数
"1756.87402397", // 9: 買い手base出来高
"28.46694368", // 10: 買い手quote出来高
"17928899.62484339" // 11: 予約フィールド(無視可)
]
]
この構造はCEXの典型例として出来高・取引回数・テイカー売買内訳まで含まれており、リッチな分析に十分な情報を提供します。バイトサイズを計測したところ、1ローソク足あたり平均約230バイトでした(実測値、私のローカル環境・Python 3.11での検証)。
Hyperliquid K線データ構造(公式仕様)
Hyperliquidは分散型パーペチュアル先物取引所として独自の構造を採用しています。POST https://api.hyperliquid.xyz/infoエンドポイントに{"type": "candleSnapshot", "req": {...}}を送信すると、以下のオブジェクト配列が返ります:
[
{
"T": 1700000000000, // ローソク足開始時刻(UNIX ms)
"o": "42150.5", // 始値
"h": "42400.0", // 高値
"l": "41900.0", // 安値
"c": "42350.0", // 終値
"v": "125.456", // 出来高(契約数)
"s": "BTC" // シンボル
}
]
フィールド数は7つとBinanceの約半数です。重要な点として、Hyperliquidには以下の特徴があります:
- フィールドがオブジェクト形式で返されるため、インデックスアクセスではなくキーアクセスが必要
quote asset volume(USD建て出来高等)が含まれていない- 取引回数・テイカー売買内訳が存在しない
- レスポンスサイズは約160バイト/レコードと軽量(Binance比で約30.4%削減、私の実測値)
- 公式のレート制限は明記されていないが、私が100req/secで連続送信した際のリクエスタ分布を計測したところ、約20req/secで429が返り始める傾向を確認
フィールド差異の詳細比較表
| 項目 | Binance | Hyperliquid |
|---|---|---|
| フィールド数 | 12 | 7 |
| データ形式 | ネスト配列 | オブジェクト |
| 開始タイムスタンプ | あり(UNIX ms) | あり(UNIX ms) |
| OHLC | あり | あり |
| 出来高(base) | あり | あり(契約数) |
| 出来高(quote) | あり | なし |
| 取引回数 | あり | なし |
| テイカー売買内訳 | あり | なし |
| 終了タイムスタンプ | あり | なし(開始+intervalで算出) |
| 平均レコードサイズ | 約230バイト
関連リソース関連記事 |