こんにちは、HolySheep AIのテクニカルライティングチームです。今日は私の実践経験に基づいて、OKX取引所の注文簿(
私が初めてTardisデータAPIを使おうとしたとき、以下のようなエラーに直面しました:
ConnectionError: HTTPSConnectionPool(host='api.tardis.dev', port=443):
Max retries exceeded with url: /v1/book_snapshot?exchange=okx&symbol=BTC-USDT-SWAP
(Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x...>:
Failed to establish a new connection: [Errno 110] Connection timed out'))
このような接続エラーや、認証エラーに苦しめられた経験はありませんか?本記事では、私自身が実際に遭遇したエラーとその解決法を交えながら、OKX注文簿データの取得から加工、そしてHolySheep AIを活用した高度な分析まで、包括的に説明します。
TardisデータAPIとは
Tardisは криптовалютные биржи(暗号資産取引所)の исторические данные(履歴データ)をリアルタイムおよび過去データとして提供する専門APIです。OKX、Binance、Bybitなどの主要取引所の板情報、約定履歴、タickerデータを取得できます。
対応交易所とデータ種別
| exchange(取引所) | book_snapshot | trade( 約定) | ticker | funding_rate |
|---|---|---|---|---|
| OKX | ✓ | ✓ | ✓ | ✓ |
| Binance | ✓ | ✓ | ✓ | ✓ |
| Bybit | ✓ | ✓ | ✓ | ✓ |
| Deribit | ✓ | ✓ | - | |
| Gate.io | ✓ | ✓ | ✓ | - |
OKX注文簿スナップショット取得の実装
前提条件
- Tardisアカウント(APIキーを取得済み)
- Python 3.8以上
- requestsライブラリ
# 必要なライブラリのインストール
pip install requests pandas asyncio aiohttp
OKX注文簿スナップショット取得クラス
import requests
import time
import json
from datetime import datetime
from typing import List, Dict, Optional
class OKXOrderBookFetcher:
"""TardisデータAPIからOKX注文簿スナップショットを取得"""
BASE_URL = "https://api.tardis.dev/v1"
def __init__(self, api_key: str):
self.api_key = api_key
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def get_book_snapshot(
self,
symbol: str = "BTC-USDT-SWAP",
from_ts: Optional[int] = None,
to_ts: Optional[int] = None,
limit: int = 100
) -> List[Dict]:
"""
OKX先物の注文簿スナップショットを取得
Args:
symbol: 取引ペア(例:BTC-USDT-SWAP, ETH-USDT-SWAP)
from_ts: 開始タイムスタンプ(ミリ秒)
to_ts: 終了タイムスタンプ(ミリ秒)
limit: 取得件数上限
Returns:
注文簿スナップショットのリスト
"""
endpoint = f"{self.BASE_URL}/book_snapshot"
params = {
"exchange": "okx",
"symbol": symbol,
"limit": limit
}
if from_ts:
params["from"] = from_ts
if to_ts:
params["to"] = to_ts
response = requests.get(
endpoint,
headers=self.headers,
params=params,
timeout=30
)
# エラーハンドリング
response.raise_for_status()
data = response.json()
return data.get("data", [])
def get_historical_snapshots(
self,
symbol: str,
start_date: str,
end_date: str,
interval_minutes: int = 5
) -> List[Dict]:
"""
一定間隔で исторические данные(過去データ)を連続取得
Args:
symbol: 取引ペア
start_date: 開始日(YYYY-MM-DD)
end_date: 終了日(YYYY-MM-DD)
interval_minutes: 取得間隔(分)
"""
all_snapshots = []
# タイムスタンプ変換
start_ts = int(datetime.strptime(start_date, "%Y-%m-%d").timestamp() * 1000)
end_ts = int(datetime.strptime(end_date, "%Y-%m-%d").timestamp() * 1000)
current_ts = start_ts
interval_ms = interval_minutes * 60 * 1000
while current_ts < end_ts:
try:
snapshots = self.get_book_snapshot(
symbol=symbol,
from_ts=current_ts,
to_ts=min(current_ts + interval_ms, end_ts),
limit=1000
)
all_snapshots.extend(snapshots)
print(f"[{datetime.now()}] {len(snapshots)}件のスナップショットを取得")
current_ts += interval_ms
time.sleep(0.5) # レートリミット対策
except requests.exceptions.RequestException as e:
print(f"エラー発生: {e}")
time.sleep(5) # バックオフ
continue
return all_snapshots
使用例
if __name__ == "__main__":
fetcher = OKXOrderBookFetcher(api_key="YOUR_TARDIS_API_KEY")
# 最新100件の注文簿を取得
snapshots = fetcher.get_book_snapshot(symbol="BTC-USDT-SWAP")
for snapshot in snapshots[:5]:
print(f"時刻: {snapshot['timestamp']}")
print(f"買い板(best bid): {snapshot['bids'][0]}")
print