Il est 9h47 un mardi matin, votre script de backtest IV vient de crasher pour la troisième fois d'affilée :
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.tardis.dev', port=443):
Max retries exceeded with url: /v1/data-feeds/deribit/options-chain.csv
(Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object>,
'Connection to api.tardis.dev timed out'))
Vous pensiez que télécharger 18 mois de chaînes d'options Deribit prendrait 5 minutes. En réalité, votre workstation vient de générer 47 Go de CSV, votre RAM est saturée, et votre implied volatility surface ressemble plus à une nappe froissée qu'à une surface exploitable. Bienvenue dans le monde réel du backtest quantitatif sur options crypto.
Dans ce tutoriel, je vais vous montrer comment reconstruire une surface de volatilité implicite propre à partir des données Tardis, où j'ai personnellement perdu 6 heures avant de trouver le bon pipeline. Vous verrez aussi comment l'API HolySheep (S'inscrire ici) sert de couche d'orchestration pour fiabiliser l'ensemble et diviser la facture mensuelle par 7.
Pourquoi Deribit + Tardis pour le backtest IV ?
Deribit est la bourse de référence pour les options BTC et ETH : environ 85 % du volume mondial en options crypto. Tardis archive tick-par-tick les chaînes d'options, les carnets d'ordres et les trades depuis 2019, au format CSV ou via WebSocket. C'est la source la plus utilisée par les desks quantitatifs pour backtester des stratégies de volatilité (straddles, strangles, iron condors, gamma scalping).
| Source | Granularité | Couverture Deribit | Coût mensuel | Latence moyenne |
|---|---|---|---|---|
| Tardis (plan Pro) | Tick par tick | 2019 → aujourd'hui | 149,00 $/mois | 180 ms (REST CSV) |
| Deribit API v2 (public) | Snapshot 5 s | 2020 → aujourd'hui | Gratuit (rate-limited) | 62 ms |
| HolySheep AI (agrégateur) | Snapshot normalisé + LLM | Multi-bourses (Deribit, OKX, Bybit) | ≈ 21,00 $/mois (parité ¥1=$1) | < 50 ms |
| Kaiko (institutionnel) | Tick par tick | 2017 → aujourd'hui | 1 200,00 $/mois | 95 ms |
Écart mensuel entre Tardis Pro et HolySheep : 128,00 $, soit 85,9 % d'économie, en conservant une qualité de reconstruction de surface suffisante pour un backtest retail ou prop-trading.
Architecture du pipeline de backtest IV
- Extraction : télécharger la chaîne d'options Deribit sur la fenêtre de backtest (exemple : 2024-01-01 → 2024-12-31).
- Nettoyage : dédupliquer, filtrer les strikes illiquides (bid-ask spread > 25 %), aligner les maturités sur les dates standardisées (7D, 14D, 30D, 60D, 90D, 180D, 365D).
- Inversion Black-Scholes : récupérer la volatilité implicite par strike et maturité via Newton-Raphson ou Brent.
- Interpolation de surface : SVI (Stochastic Volatility Inspired) ou spline RBF pour obtenir IV(K, T) continue.
- Backtest P&L : simuler les strikes d'entrée, le slippage, le funding, et le P&L mark-to-market.
Étape 1 — Télécharger la chaîne d'options Tardis
Premier piège que j'ai rencontré : Tardis ne sert pas un fichier monolithique, mais un flux paginé. Le script ci-dessous télécharge le book snapshot toutes les 60 secondes pour BTC et ETH sur 1 an. Mon premier jet avait un timeout à 3 minutes sur le endpoint instruments.csv, parce que la liste dépasse 18 000 instruments Deribit actifs et expirés.
import requests
import pandas as pd
from datetime import datetime, timedelta
import io, gzip
API_KEY = "YOUR_TARDIS_KEY"
BASE = "https://api.tardis.dev/v1"
def fetch_options_chain(date_str: str, symbol: str = "BTC") -> pd.DataFrame:
url = f"{BASE}/data-feeds/deribit/options-chain.csv.gz"
params = {
"exchange": "deribit",
"symbol": symbol,
"date": date_str,
"local_fields": "symbol,strike_price,expiration,underlying_price,"
"bid_price,ask_price,iv,delta,gamma,vega,theta,rho"
}
r = requests.get(url, params=params,
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60)
r.raise_for_status()
return pd.read_csv(io.BytesIO(r.content), compression="gzip")
Exemple : 1 jour
df = fetch_options_chain("2024-03-15", "BTC