Vous cherchez à analyser les carnets d'ordres (orderbooks) historiques des options Deribit ? Vous n'êtes pas seul. Avec le volume massif de données généré par le plus grand exchange d'options crypto au monde, accéder à ces informations représente un défi technique majeur pour les développeurs et traders. Ce guide complet vous explique pas à pas comment obtenir ces données, en commençant par la solution la plus accessible : Tardis.dev.
Pourquoi les Données Deribit Orderbook Sont-Elles Cruciales ?
Deribit domine le marché des options BTC et ETH avec plus de 90% de part de marché. L'historique des orderbooks permet :
- D'analyser la liquidité et les carnets de profondeur
- Détecter des patterns de trading institutionnel
- Modéliser la volatilité implicite
- Backtester des stratégies d'options
- Identifier les niveaux de support/résistance
Tardis.dev : La Solution de Référence pour les Données Historiques
Présentation de la Plateforme
Tardis.dev (anciennement Tardis, maintenant intégré à Binance) est un service de données historiques crypto en temps réel et passées. Il propose un accès aux orderbooks Deribit avec une granularité allant jusqu'à la milliseconde.
Inscription et Configuration Initiale
[Capture d'écran suggérée : Interface d'accueil Tardis.dev avec le bouton "Sign Up" en haut à droite]
Commencez par créer un compte sur le site officiel :
- Rendez-vous sur tardis.dev
- Cliquez sur "Sign Up" et créez un compte avec votre email
- Vérifiez votre email et connectez-vous
- Accédez à votre dashboard pour récupérer votre clé API
Comprendre les Types de Données Disponibles
Tardis.dev propose plusieurs types de données pour Deribit :
- Trades : Historique des transactions exécutées
- Orderbook snapshots : État du carnet à intervalles réguliers
- Orderbook updates : Modifications incrémentales en temps réel
- Funding rates : Taux de financement pour les perpetuels
- Ticker : Données agrégées de prix
Récupérer les Données Orderbook avec l'API
Voici le code Python complet pour récupérer l'historique des orderbooks Deribit via l'API Tardis.dev :
# Installation des dépendances nécessaires
pip install requests pandas datetime
import requests
import pandas as pd
from datetime import datetime, timedelta
Configuration de l'API Tardis.dev
TARDIS_API_KEY = "YOUR_TARDIS_API_KEY"
BASE_URL = "https://api.tardis.dev/v1"
def get_deribit_orderbook_history(
symbol: str,
start_date: str,
end_date: str,
depth: int = 10
):
"""
Récupère l'historique des orderbooks Deribit.
Args:
symbol: Symbole de l'instrument (ex: "BTC-28MAR25-95000-C")
start_date: Date de début (ISO format)
end_date: Date de fin (ISO format)
depth: Profondeur du carnet (nombre de niveaux)
Returns:
DataFrame pandas avec les données orderbook
"""
headers = {
"Authorization": f"Bearer {TARDIS_API_KEY}",
"Content-Type": "application/json"
}
# Endpoint pour les orderbooks Deribit
endpoint = f"{BASE_URL}/feeds/deribit:orderbook"
params = {
"symbol": symbol,
"from": start_date,
"to": end_date,
"limit": 1000, # Maximum par requête
"include_virtual": False
}
response = requests.get(
endpoint,
headers=headers,
params=params
)
if response.status_code == 200:
data = response.json()
return pd.DataFrame(data)
else:
print(f"Erreur {response.status_code}: {response.text}")
return None
Exemple d'utilisation
if __name__ == "__main__":
# Récupérer 1 heure d'historique
end_date = datetime.now()
start_date = end_date - timedelta(hours=1)
orderbook_data = get_deribit_orderbook_history(
symbol="BTC-28MAR25-95000-C",
start_date=start_date.isoformat(),
end_date=end_date.isoformat(),
depth=25
)
if orderbook_data is not None:
print(f"Données récupérées : {len(orderbook_data)} entrées")
print(orderbook_data.head())
# Colonnes typiques : timestamp, asks, bids, instrument_name
Récupérer les Données par Lots avec Pagination
Pour les longues périodes, utilisez la pagination pour éviter les timeouts :
import time
from typing import List, Dict, Generator
def stream_deribit_orderbook_pages(
symbol: str,
start_date: str,
end_date: str,
interval_hours: int = 24
) -> Generator[pd.DataFrame, None, None]:
"""
Stream les données orderbook par pages de interval_hours heures.
Gère automatiquement la pagination et les limites de l'API.
"""
headers = {
"Authorization": f"Bearer {TARDIS_API_KEY}",
"Content-Type": "application/json"
}
endpoint = f"{BASE_URL}/feeds/deribit:orderbook"
# Conversion des dates
current_start = datetime.fromisoformat(start_date)
final_end = datetime.fromisoformat(end_date)
page_count = 0
while current_start < final_end:
current_end = min(
current_start + timedelta(hours=interval_hours),
final_end
)
params = {
"symbol": symbol,
"from": current_start.isoformat(),
"to": current_end.isoformat(),
"limit": 1000
}
try:
response = requests.get(
endpoint,
headers=headers,
params=params,
timeout=30
)
if response.status_code == 200:
data = response.json()
if data:
yield pd.DataFrame(data)
page_count += 1
print(f"Page {page_count}: {current_start} → {current_end}")
else:
print(f"Erreur page {page_count}: {response.status_code}")
# Retry après backoff exponentiel
time.sleep(2 ** page_count)
except requests.exceptions.Timeout:
print(f"Timeout pour {current_start}, réduction de l'intervalle")
# Réessayer avec un intervalle plus petit
# Respect du rate limiting (100 req/min sur plan gratuit)
time.sleep(0.6)
current_start = current_end
Utilisation pour récupérer une semaine de données
all_data = []
for df_page in stream_deribit_orderbook_pages(
symbol="ETH-20JUN25-4000-C",
start_date="2025-06-01T00:00:00Z",
end_date="2025-06-08T00:00:00Z",
interval_hours=6
):
all_data.append(df_page)
Concaténation finale
full_dataset = pd.concat(all_data, ignore_index=True)
print(f"Total des entrées : {len(full_dataset)}")
Format des Données Orderbook Deribit
Voici un exemple de réponse typique de l'API Tardis.dev pour un orderbook Deribit :
{
"timestamp": 1714652400000,
"seq": 12345678,
"instrument_name": "BTC-28MAR25-95000-C",
"bids": [
{"price": 0.045, "amount": 50.5, "order_count": 3},
{"price": 0.044, "amount": 120.0, "order_count": 7},
{"price": 0.043, "amount": 250.0, "order_count": 12}
],
"asks": [
{"price": 0.048, "amount": 80.0, "order_count": 5},
{"price": 0.049, "amount": 150.0, "order_count": 9},
{"price": 0.050, "amount": 300.0, "order_count": 15}
],
"type": "snapshot"
}
Pour traiter efficacement ces données et les analyser avec l'aide d'un modèle IA, vous pouvez utiliser l'API HolySheep :
import requests
import json
Configuration HolySheep pour analyser les données orderbook
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_URL = "https://api.holysheep.ai/v1/chat/completions"
def analyze_orderbook_with_ai(orderbook_sample: dict) -> dict:
"""
Utilise l'IA pour analyser un orderbook et identifier les patterns.
"""
prompt = f"""
Analyse ce orderbook Deribit et fournis :
1. Le spread bid-ask en pourcentage
2. La profondeur totale du marché (bids + asks)
3. Un score de liquidité de 0 à 10
4. Les niveaux de prix les plus significatifs
Orderbook :
{json.dumps(orderbook_sample, indent=2)}
"""
payload = {
"model": "deepseek-v3.2", # $0.42/1M tokens - option économique
"messages": [
{"role": "system", "content": "Tu es un analyste de marché crypto expert."},
{"role": "user", "content": prompt}
],
"temperature": 0.3,
"max_tokens": 500
}
headers = {
"Authorization": f"Bearer {HOLYSHEEP_API_KEY}",
"Content-Type": "application/json"
}
response = requests.post(
HOLYSHEEP_URL,
headers=headers,
json=payload
)
if response.status_code == 200:
result = response.json()
return result["choices"][0]["message"]["content"]
else:
print(f"Erreur HolySheep: {response.status_code}")
return None
Exemple d'analyse
sample = {
"instrument_name": "BTC-28MAR25-95000-C",
"bids": [{"price": 0.045, "amount": 50.5}],
"asks": [{"price": 0.048, "amount": 80.0}]
}
analyse = analyze_orderbook_with_ai(sample)
print(analyse)
Alternatives à Tardis.dev pour les Données Deribit
| Service | Gratuit | Granularité | Prix/Mois | Latence | Avantages |
|---|---|---|---|---|---|
| Tardis.dev | ✓ (limité) | 1ms | 49$ - 499$ | <100ms | Données complètes, easy API |
| CoinAPI | ✗ | 1ms | 75$ - 500$ | <200ms | Multi-exchanges |
| Kaiko | ✗ | 1s | 500$+ | <500ms | Données institutionnelles |
| Deribit API Directe | ✓ | Temps réel | Gratuit | <50ms | Officiel, gratuit |
| CCXT (open source) | ✓ | 1min+ | Gratuit | Variable | Multiples exchanges |
Méthode Gratuite : Deribit API Directe
Deribit propose une API publique gratuite pour les données en temps réel, mais pas pour l'historique. Vous pouvez uniquement capturer les données actuelles :
import websocket
import json
import pandas as pd
Connexion WebSocket Deribit pour les orderbooks en temps réel
(NE donne PAS accès à l'historique)
def on_message(ws, message):
data = json.loads(message)
if "params" in data:
orderbook = data["params"]["data"]
print(f"Instrument: {orderbook['instrument_name']}")
print(f"Bids: {orderbook['bids'][:3]}")
print(f"Asks: {orderbook['asks'][:3]}")
# Sauvegarder dans un fichier CSV
with open("orderbook_live.csv", "a") as f:
timestamp = orderbook["timestamp"]
best_bid = orderbook["bids"][0][0] if orderbook["bids"] else None
best_ask = orderbook["asks"][0][0] if orderbook["asks"] else None
f.write(f"{timestamp},{best_bid},{best_ask}\n")
def on_error(ws, error):
print(f"WebSocket Error: {error}")
def on_close(ws):
print("### Connexion fermée ###")
def on_open(ws):
# S'abonner au canal orderbook pour BTC options
subscribe_msg = {
"jsonrpc": "2.0",
"method": "public/subscribe",
"params": {
"channels": ["deribit orderbook BTC-28MAR25-95000-C.100ms"]
},
"id": 1
}
ws.send(json.dumps(subscribe_msg))
if __name__ == "__main__":
ws = websocket.WebSocketApp(
"wss://www.deribit.com/ws/api/v2",
on_message=on_message,
on_error=on_error,
on_close=on_close
)
ws.on_open = on_open
ws.run_forever()
Pour qui / Pour qui ce n'est pas fait
| ✓ PARFAIT POUR | ✗ NE CONVIENT PAS À |
|---|---|
|
|
Tarification et ROI
Comparatif des Coûts par Volume de Données
| Volume Mensuel | Tardis.dev | CoinAPI | HolySheep (traitement IA) |
|---|---|---|---|
| 100K entrées | 49$/mois | 75$/mois | ~0.50$ (analyse DeepSeek V3.2) |
| 1M entrées | 149$/mois | 150$/mois | ~5$ (analyse) |
| 10M entrées | 499$/mois | 500$/mois | ~50$ (analyse) |
Calcul du ROI pour un Trader Quantitatif
Si vous tradez 100K$/mois en options Deribit avec des stratégies basées sur l'analyse d'orderbook :
- Coût Tardis.dev : 49$/mois
- Gain potentiel : 1-5% d'amélioration des exécutions = 1000$-5000$/mois
- ROI : 2000% à 10000%
Pourquoi Choisir HolySheep pour le Traitement IA des Données
Une fois les données orderbook récupérées, l'analyse et le traitement nécessitent des appels IA. S'inscrire ici pour accéder aux avantages HolySheep :
| Avantage HolySheep | Valeur | Concurrence (OpenAI, Anthropic) |
|---|---|---|
| DeepSeek V3.2 | $0.42/1M tokens | GPT-4.1 : $8/1M tokens |
| Claude Sonnet 4.5 | $15/1M tokens | Anthropic : ~$18/1M tokens |
| Paiement | WeChat Pay, Alipay | Cartes internationales uniquement |
| Latence API | <50ms | ~200-500ms |
| Crédits gratuits | Offerts à l'inscription | $5 (OpenAI) |
Économie réelle : Pour traiter 10 millions de tokens de données orderbook par mois, vous paierez :
- HolySheep (DeepSeek V3.2) : 10M × $0.42/1M = $4.20/mois
- OpenAI (GPT-4.1) : 10M × $8/1M = $80/mois
- Économie : 95%
Erreurs Courantes et Solutions
Erreur 1 : "429 Too Many Requests"
Symptôme : L'API retourne une erreur 429 après quelques requêtes.
Cause : Vous dépassez le rate limit de l'API Tardis.dev (100 req/min sur le plan gratuit).
# Solution : Implémenter un rate limiter avec backoff exponentiel
import time
import requests
from functools import wraps
def rate_limiter(max_calls: int = 90, period: int = 60):
"""
Limite le nombre d'appels API par période.
"""
call_times = []
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
now = time.time()
# Supprimer les appels hors de la fenêtre
call_times[:] = [t for t in call_times if now - t < period]
if len(call_times) >= max_calls:
sleep_time = period - (now - call_times[0]) + 1
print(f"Rate limit atteint. Attente {sleep_time:.1f}s...")
time.sleep(sleep_time)
call_times.append(time.time())
return func(*args, **kwargs)
return wrapper
return decorator
@rate_limiter(max_calls=90, period=60)
def fetch_orderbook_safe(*args, **kwargs):
"""Appel API avec limitation de débit intégrée."""
response = requests.get(
"https://api.tardis.dev/v1/feeds/deribit:orderbook",
headers={"Authorization": f"Bearer {TARDIS_API_KEY}"},
params=kwargs
)
return response.json()
Utilisation
for symbol in symbols_list:
data = fetch_orderbook_safe(symbol=symbol, from_=start, to=end)
Erreur 2 : "Incomplete orderbook data - missing bids/asks"
Symptôme : Les données orderbook contiennent des champs None ou des tableaux vides.
Cause : L'instrument est expiré ou mal orthographié. Les options Deribit expirent selon le cycle (dernier vendredi du mois).
# Solution : Validation et retry avec plusieurs formats de symboles
def get_valid_orderbook(symbol: str, exchange_date: str) -> dict:
"""
Récupère les orderbooks en essayant plusieurs formats de symboles.
"""
# Formats possibles pour Deribit options
symbol_formats = [
f"{symbol}", # Format standard
f"{symbol.upper()}", # Tout en majuscules
f"{symbol.replace('-', '')}", # Sans tirets
]
# Vérifier aussi les instruments actifs via l'API Deribit
instruments_response = requests.get(
"https://www.deribit.com/api/v2/public/get_instruments",
params={
"currency": "BTC" if "BTC" in symbol else "ETH",
"kind": "option",
"expired": "false"
}
)
if instruments_response.status_code == 200:
active_instruments = [
inst["instrument_name"]
for inst in instruments_response.json()["result"]
]
# Trouver le match le plus proche
for fmt in symbol_formats:
if fmt in active_instruments:
symbol = fmt
break
# Récupérer avec gestion des données manquantes
response = get_orderbook(symbol)
data = response.json()
# Validation
if not data.get("bids") or not data.get("asks"):
print(f"Warning: Orderbook incomplet pour {symbol}")
return {
"instrument": symbol,
"bids": data.get("bids", []) or [{"price": 0, "amount": 0}],
"asks": data.get("asks", []) or [{"price": 0, "amount": 0}],
"complete": False
}
return {**data, "complete": True}
Erreur 3 : "Connection timeout lors du téléchargement de gros volumes"
Symptôme : Les requêtes pour des périodes longues (>1 jour) timeout avant completion.
Cause : L'API a une limite de données par requête et les connexions expirent.
# Solution : Téléchargement chunké avec reprise automatique
import os
import json
from datetime import datetime, timedelta
class ChunkedDownloader:
def __init__(self, output_dir: str = "./orderbook_cache"):
self.output_dir = output_dir
os.makedirs(output_dir, exist_ok=True)
self.checkpoint_file = os.path.join(output_dir, "checkpoint.json")
def get_checkpoint(self) -> dict:
"""Récupère le dernier point de reprise."""
if os.path.exists(self.checkpoint_file):
with open(self.checkpoint_file, "r") as f:
return json.load(f)
return {"last_processed": None, "completed_chunks": []}
def save_checkpoint(self, checkpoint: dict):
"""Sauvegarde le point de reprise."""
with open(self.checkpoint_file, "w") as f:
json.dump(checkpoint, f)
def download_range(
self,
start: datetime,
end: datetime,
chunk_hours: int = 1,
max_retries: int = 3
):
"""
Télécharge les données par chunks avec reprise automatique.
"""
checkpoint = self.get_checkpoint()
current = start
while current < end:
chunk_end = min(current + timedelta(hours=chunk_hours), end)
chunk_id = f"{current.strftime('%Y%m%d_%H%M')}"
# Vérifier si déjà téléchargé
if chunk_id in checkpoint["completed_chunks"]:
current = chunk_end
continue
# Télécharger le chunk
success = False
for attempt in range(max_retries):
try:
data = fetch_orderbook_chunk(
start=current.isoformat(),
end=chunk_end.isoformat(),
timeout=60
)
# Sauvegarder
output_file = os.path.join(
self.output_dir,
f"orderbook_{chunk_id}.json"
)
with open(output_file, "w") as f:
json.dump(data, f)
checkpoint["completed_chunks"].append(chunk_id)
checkpoint["last_processed"] = chunk_id
self.save_checkpoint(checkpoint)
success = True
print(f"✓ Chunk {chunk_id} téléchargé")
break
except TimeoutError:
print(f"⚠ Timeout chunk {chunk_id}, tentative {attempt + 1}")
time.sleep(2 ** attempt) # Backoff exponentiel
if not success:
print(f"✗ Échec chunk {chunk_id} après {max_retries} tentatives")
# Sauvegarder quand même pour reprise manuelle
current = chunk_end
Utilisation
downloader = ChunkedDownloader("./deribit_orderbooks")
downloader.download_range(
start=datetime(2025, 1, 1),
end=datetime(2025, 1, 7),
chunk_hours=2 # Chunks de 2 heures
)
Erreur 4 : "Invalid timestamp format"
Symptôme : L'API rejette les dates avec un message "Invalid timestamp".
Cause : Formats de date incompatibles entre Python et l'API.
# Solution : Formatage UTC strict ISO 8601
from datetime import datetime, timezone
def format_timestamp(dt: datetime) -> str:
"""
Formate un datetime en timestamp ISO 8601 UTC pour l'API Deribit/Tardis.
"""
if dt.tzinfo is None:
# Assumer UTC si timezone manquante
dt = dt.replace(tzinfo=timezone.utc)
# Format requis : YYYY-MM-DDTHH:MM:SS.sssZ
return dt.strftime("%Y-%m-%dT%H:%M:%S.000Z")
def parse_api_timestamp(timestamp_ms: int) -> datetime:
"""
Convertit un timestamp millisecondes Deribit en datetime Python.
"""
return datetime.fromtimestamp(timestamp_ms / 1000, tz=timezone.utc)
Exemples corrects
start = datetime(2025, 6, 1, 12, 0, 0, tzinfo=timezone.utc)
end = datetime.now(timezone.utc)
Formats à éviter :
BAD_FORMATS = [
"2025-06-01 12:00:00", # Espace au lieu de T
"01/06/2025 12:00", # Format européen
"2025-06-01T12:00", # Pas de millisecondes
"12:00:00 2025-06-01", # Ordre inversé
]
Format correct :
correct_start = format_timestamp(start)
print(f"Correct: {correct_start}") # 2025-06-01T12:00:00.000Z
Conclusion : Votre Feuille de Route pour les Données Deribit
Récupérer l'historique des orderbooks d'options Deribit est désormais accessible avec les bons outils :
- Tardis.dev : La solution la plus complète avec 1ms de granularité
- Deribit API : Gratuite mais uniquement temps réel
- CCXT : Alternative open source pour les petits volumes
Pour le traitement et l'analyse IA de ces données, S'inscrire ici sur HolySheep vous offre :
- DeepSeek V3.2 à $0.42/1M tokens (95% moins cher que GPT-4.1)
- Paiement local via WeChat Pay et Alipay
- Latence <50ms pour des analyses en temps réel
- Crédits gratuits à l'inscription
Récapitulatif des Prix 2026
| Modèle IA | Prix HolySheep | Prix Standard | Économie |
|---|---|---|---|
| DeepSeek V3.2 | $0.42 | $3+ | 85%+ |
| Gemini 2.5 Flash | $2.50 | $5+ | 50% |
| Claude Sonnet 4.5 | $15 | $18+ | 17% |
| GPT-4.1 | $8 | $15+ | 47% |
Que vous soyez un développeur debutant ou un trader quant experimenté, combinner Tardis.dev pour la collecte de données et HolySheep pour l'analyse IA represente la solution optimale en termes de rapport qualite-prix.
N'attendez plus pour democratiser l'acces aux donnees d'options crypto !