Hyperliquidの履歴データを取得する:APIの使い方
- hyperliquid historical data
- hyperliquid data api
- hyperliquid 履歴データ
- hyperliquid K線データ
- hyperliquid 資金調達率 履歴
クオンツリサーチの土台はデータです。取引戦略のバックテスト、資金調達率の傾向分析、市場マイクロストラクチャーの研究など、いずれも信頼できる十分な履歴データを必要とします。
Hyperliquidはオンチェーンの永久先物取引所として、REST APIを通じて豊富な履歴データを提供しています。取得できるデータには、K線(OHLCV)、資金調達率、約定履歴、注文の約定明細、清算イベントなどがあります。本記事では、各種履歴データの取得方法、パラメータ、ページネーション戦略、ローカル保存の実務的な方法を整理します。認証が必要な場面では、OneKeyハードウェアウォレットを使うことで、安全な署名フローを構築できます。
Hyperliquid履歴データAPIの概要
Hyperliquidの公式ドキュメントによると、履歴データ系の多くは POST /info エンドポイントから取得し、リクエストボディ内の type フィールドでデータ種別を指定します。
なお、すべてのタイムスタンプはミリ秒単位のUnixタイムスタンプ、つまり13桁の整数形式です。
K線データ(OHLCV)の取得
リクエスト形式
import requests
BASE_URL = "https://api.hyperliquid.xyz"
def fetch_candles(coin, interval, start_ms, end_ms):
"""
coin : 取引ペア。例: "BTC"
interval : 時間足。例: "1m", "5m", "1h", "1d"
start_ms : 開始時刻(ミリ秒タイムスタンプ)
end_ms : 終了時刻(ミリ秒タイムスタンプ)
"""
payload = {
"type": "candleSnapshot",
"req": {
"coin": coin,
"interval": interval,
"startTime": start_ms,
"endTime": end_ms
}
}
resp = requests.post(f"{BASE_URL}/info", json=payload)
resp.raise_for_status()
return resp.json()
# 例:BTCの直近7日分の1時間足を取得
import time
end_ms = int(time.time() * 1000)
start_ms = end_ms - 7 * 24 * 3600 * 1000
candles = fetch_candles("BTC", "1h", start_ms, end_ms)
返却フィールド
各K線には、主に以下のフィールドが含まれます。正確なフィールド名は公式ドキュメントを確認してください。
t:K線の開始時刻(ミリ秒タイムスタンプ)o:始値(open)h:高値(high)l:安値(low)c:終値(close)v:出来高(volume)n:約定回数
ページネーション戦略
1回のリクエストで返却される件数には通常上限があります。長期間のデータを取得する場合は、時間範囲を分割して順番に取得します。
def fetch_candles_paginated(coin, interval, start_ms, end_ms, page_size_ms):
"""
時間範囲を複数区間に分割し、順番に取得して結合する。
page_size_ms:1回あたりの時間幅(ミリ秒)。intervalに応じて調整する。
"""
all_candles = []
cursor = start_ms
while cursor < end_ms:
batch_end = min(cursor + page_size_ms, end_ms)
batch = fetch_candles(coin, interval, cursor, batch_end)
all_candles.extend(batch)
if not batch:
break
# 次ページは最後のK線のタイムスタンプ + 1 から開始
cursor = batch[-1]["t"] + 1
# レート制限を避けるための待機
time.sleep(0.2)
return all_candles
資金調達率の履歴
資金調達率は、永久先物における重要な仕組みです。過去の資金調達率データは、市場センチメントの分析や裁定取引戦略の設計に役立ちます。
def fetch_funding_history(coin, start_ms, end_ms):
payload = {
"type": "fundingHistory",
"req": {
"coin": coin,
"startTime": start_ms,
"endTime": end_ms
}
}
resp = requests.post(f"{BASE_URL}/info", json=payload)
resp.raise_for_status()
return resp.json()
返却データには、各決済サイクルにおける資金調達率と対応するタイムスタンプが含まれます。資金調達率の履歴は、たとえば以下のような用途に使えます。
- ロング・ショートの偏りの変化を分析する
- 極端な市場センチメントのシグナルを検出する
- ポジション保有コストを計算する
ユーザーの約定履歴と注文履歴
ユーザー固有のプライベートデータを扱うAPIでは、ウォレットアドレスの指定が必要です。また、一部のインターフェースでは署名認証が必要になる場合があります。
このような認証リクエストでは、OneKeyハードウェアウォレットを使うことで、秘密鍵を安全に保ったまま署名できます。秘密鍵はハードウェアのセキュアエレメント内に保存され、データ取得スクリプトやサーバー側に露出しません。
def fetch_user_fills(address, start_ms, end_ms):
payload = {
"type": "userFills",
"req": {
"user": address,
"startTime": start_ms,
"endTime": end_ms
}
}
resp = requests.post(f"{BASE_URL}/info", json=payload)
resp.raise_for_status()
return resp.json()
約定履歴には、注文ID、売買方向、約定価格、約定数量、手数料などのフィールドが含まれます。これは実現損益の計算や、戦略の執行品質を評価するための基礎データになります。
清算履歴
市場全体の清算データは、市場構造や急変時の特徴を研究するうえで役立ちます。
def fetch_liquidations(start_ms, end_ms):
payload = {
"type": "liquidations",
"req": {
"startTime": start_ms,
"endTime": end_ms
}
}
resp = requests.post(f"{BASE_URL}/info", json=payload)
resp.raise_for_status()
return resp.json()
データ保存:CSVとデータベース
CSVとして保存する
プロトタイピング段階では、CSVがもっとも手軽な保存形式です。
import csv
def save_candles_to_csv(candles, filepath):
if not candles:
return
fieldnames = ["t", "o", "h", "l", "c", "v", "n"]
with open(filepath, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for candle in candles:
writer.writerow({k: candle.get(k, "") for k in fieldnames})
データベースに保存する
大規模なデータを扱う場合や、効率的な検索が必要な場合は、SQLite(ローカル・単体用途)またはPostgreSQL(本番環境)への保存がおすすめです。
import sqlite3
def init_db(db_path):
conn = sqlite3.connect(db_path)
conn.execute("""
CREATE TABLE IF NOT EXISTS candles (
coin TEXT,
interval TEXT,
t INTEGER,
o REAL,
h REAL,
l REAL,
c REAL,
v REAL,
n INTEGER,
PRIMARY KEY (coin, interval, t)
)
""")
conn.commit()
return conn
def insert_candles(conn, coin, interval, candles):
rows = [
(coin, interval, c["t"], c["o"], c["h"], c["l"], c["c"], c["v"], c["n"])
for c in candles
]
conn.executemany(
"INSERT OR IGNORE INTO candles VALUES (?,?,?,?,?,?,?,?,?)",
rows
)
conn.commit()
PRIMARY KEY (coin, interval, t) を設定しておくと、同じ期間を再取得しても重複挿入を防げます。差分更新の設計もしやすくなります。
レート制限と注意点
Hyperliquid APIにはリクエスト頻度の制限があります。最新の制限内容は、必ず公式ドキュメントを確認してください。実務上は、以下の点を意識すると安定しやすくなります。
- ループリクエストの間に適切な待機時間を入れる(目安:200〜500ms)
- HTTP 429が返った場合に備えて、指数バックオフによるリトライを実装する
- 大量の履歴データ取得は、可能であれば混雑しにくい時間帯に実行する
- 取得済みデータをローカルにキャッシュし、同じ時間範囲を何度も取得しない
他のデータソースとの比較
HyperliquidのネイティブAPIは、データの一次性が高く、低遅延で取得しやすい点が強みです。一方で、複数取引所を横断して分析する研究プロジェクトでは、他のデータソースと組み合わせることもあります。
dYdXのドキュメントやGMXのドキュメントにも、それぞれ履歴データ取得用のインターフェースがあります。設計思想やAPI形式はHyperliquidと異なりますが、K線、約定、資金調達率といった基本概念は共通しています。
よくある質問
Q1:K線データの最小時間足は何ですか?
Hyperliquid公式ドキュメントの candleSnapshot インターフェースを確認してください。本記事執筆時点では、分足、時間足、日足など複数の時間足がサポートされています。具体的に利用できる interval の値はドキュメントが基準です。不正なパラメータを指定した場合、APIはエラーを返します。
Q2:履歴データはどこまで遡れますか?
原則として、Hyperliquidのローンチ以降のデータはAPIから取得できます。ただし、実際に遡れる範囲は各マーケットの上場時期に依存します。特定の期間にデータが存在しない場合、APIは空配列を返します。
Q3:大量の履歴データ取得にはどのくらい時間がかかりますか?
取得対象の期間、時間足、ページネーション方法によって変わります。たとえば1時間足で全期間を取得する場合、レート制限を考慮すると数分から数十分程度かかることがあります。毎回フル取得するのではなく、一度データベースに保存したうえで差分更新する運用が現実的です。
Q4:データ取得においてOneKeyウォレットは何に使えますか?
K線や資金調達率などの公開マーケットデータは、通常は認証なしでアクセスできます。一方、ユーザーの約定履歴や注文履歴のようなプライベートデータでは、署名検証が必要になる場合があります。
OneKeyハードウェアウォレットを使うと、このようなリクエストに対して安全に署名でき、秘密鍵がデータ収集スクリプトを実行しているサーバーに渡ることを防げます。
Q5:データの欠損(gap)はどう処理すべきですか?
ネットワークエラーやAPI側の一時的な障害により、一部期間のデータが欠損することがあります。各取得処理で対象期間を記録し、定期的にデータベース内の時間的な欠損をスキャンして、該当区間を再取得するのがおすすめです。
バックテストでは、データ欠損がシグナルの歪みにつながる可能性があります。利用前に必ずデータの完全性チェックを行ってください。
まとめ
Hyperliquidの履歴データAPIは、クオンツリサーチに必要なデータ基盤を構築するうえで有用です。K線、資金調達率、ユーザー約定、清算履歴まで、数十行のPythonコードで基本的なデータ収集パイプラインを作れます。
また、認証や署名が必要なワークフローでは、OneKeyハードウェアウォレットを組み合わせることで、秘密鍵を保護しながらHyperliquidのデータを活用できます。
データ分析から実際の取引までを一貫して進めたい場合は、OneKeyをダウンロードして、OneKey Perpsを試してみてください。OneKey Perpsは、分析で得た知見をオンチェーン永久先物の実運用に移すための実用的な導線になります。利用前には必ずリスクを確認し、無理のない範囲で操作してください。
リスク提示:履歴データは過去の市場状況を示すものであり、将来のパフォーマンスを示すものではありません。履歴データに基づくクオンツ戦略には過剰最適化のリスクがあり、実運用の結果がバックテストと大きく異なる可能性があります。永久先物取引は高リスクであり、資金損失につながる場合があります。本記事は技術学習を目的とした情報であり、投資助言、金融助言、法的助言ではありません。



