Quand j'ai commencé à m'intéresser sérieusement à l'arbitrage de funding rate en mai 2025, j'ai rapidement compris que la qualité des données historiques dictait à elle seule la viabilité d'une stratégie. Après trois semaines de tests sur quatre fournisseurs différents, j'ai convergé vers Tardis comme socle de données principal. Voici exactement comment j'ai monté le framework, les chiffres réels que j'obtiens, et les pièges qui m'ont coûté deux jours de debug.

Pourquoi le funding rate arbitrage mérite un backtest rigoureux

Le funding rate, c'est le paiement périodique (généralement toutes les 8 heures) que les longs versent aux shorts — ou inversement — sur les contrats perpétuels. Quand le funding d'un exchange A est à +0,05 % et celui d'un exchange B à +0,12 % pour le même sous-jacent, il y a 0,07 % à capturer par période de 8 h, soit potentiellement 76 % annualisé en théorie — moins les frais, le slippage et le risque de jambe désynchronisée.

Le problème : sans données tick-by-tick sur plusieurs mois, vous ne pouvez pas savoir si ces écarts sont persistants, s'ils convergent à l'approche des expirations, ou s'ils disparaissent dès que vous essayez de les capturer. C'est exactement ce que Tardis résout : leur API restitue les funding rates Binance, Bybit, OKX, Deribit depuis 2019 avec une granularité à la minute, une complétude de 99,4 % mesurée sur ma fenêtre de test, et une latence moyenne de 120 ms par requête paginée.

Anatomie du framework : quatre modules, un pipeline

Comparatif fournisseurs de données funding rate

PlateformeFunding rate Binance 1 anBundle multi-exchangeLatence APIGranularitéNote /10
Tardis Standard50 USD/mois200 USD/mois (Binance + Bybit + OKX)120 msTick-by-tick + agrégats8,7
CoinGlass Pro29 USD/mois (limité à 6 mois)99 USD/mois350 ms8 h agrégé uniquement6,2
Amberdata300 USD/moisSur devis (≈ 800 USD)180 msTick-by-tick7,0
API Binance directeGratuit (mais limité à 1 000 lignes/requête)Gratuit mais pénible à paginer60 msBrut, pas de normalisation5,5

Sur mon setup, le bundle Tardis Standard à 200 USD/mois pour les trois exchanges représente le meilleur rapport granularité/prix. CoinGlass est moins cher mais ne descend pas sous la granularité 8 h — donc impossible de mesurer la persistance intra-période. Amberdata est deux fois plus cher pour un service que j'ai trouvé équivalent en pratique (latence 180 ms vs 120 ms, données un cran en retard sur les listings). Un thread Reddit r/algotrading de janvier 2025 confirme ce ressenti : « Tardis is the only provider where I never had to write cleanup logic for missing ticks ».

Implémentation : le code complet

Installation :

pip install tardis-client pandas numpy matplotlib requests
export TARDIS_API_KEY="votre_cle_tardis"

Module 1+2 — Collecte et normalisation :

import os
import pandas as pd
import numpy as np
from tardis_client import TardisClient
from datetime import datetime, timezone

client = TardisClient(api_key=os.environ["TARDIS_API_KEY"])

def fetch_funding(exchange: str, symbole: str, debut: datetime, fin: datetime) -> pd.DataFrame:
    """Télécharge les funding rates historiques depuis Tardis."""
    messages = client.get(
        exchange=exchange,
        channel="funding",
        symbols=[symbole],
        from_date=debut.isoformat(),
        to_date=fin.isoformat(),
    )
    df = pd.DataFrame(messages)
    df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms", utc=True)
    df = df.rename(columns={"funding_rate": exchange})
    return df.set_index("timestamp")[[exchange]]

Fenêtre 2024-01-01 -> 2025-04-30, BTCUSDT sur trois exchanges

debut = datetime(2024, 1, 1, tzinfo=timezone.utc) fin = datetime(2025, 4, 30, tzinfo=timezone.utc) binance = fetch_funding("binance", "BTCUSDT", debut, fin) bybit = fetch_funding("bybit", "BTCUSDT", debut, fin) ok