Trading quantitatif pour débutants : stratégies et 1er backtest

Le trading quantitatif consiste à remplacer le jugement au cas par cas par des règles écrites à l'avance, testables et appliquées sans exception. Ce n'est pas une question de mathématiques avancées ni d'intelligence artificielle : une règle aussi simple que « détenir l'indice quand il est au-dessus de sa moyenne de 200 jours » est une stratégie quantitative. Ce qui la rend quantitative, c'est qu'on peut mesurer ce qu'elle aurait fait, et décider sur des chiffres.
Ce qui distingue une approche quantitative
| Critère | Trading discrétionnaire | Trading quantitatif |
|---|---|---|
| Décision | Jugement au moment présent | Règle fixée à l'avance |
| Reproductibilité | Faible : deux décisions identiques sont rares | Totale : mêmes données, même résultat |
| Évaluation | Souvenirs, impressions | Historique simulé et statistiques |
| Principal risque | Biais émotionnels | Surapprentissage du passé |
| Montée en charge | Limitée par l'attention humaine | Des centaines d'actifs en parallèle |
Le discrétionnaire souffre de ses biais cognitifs (le biais de confirmation en trading) ; le quantitatif remplace ce risque par un autre, plus discret : construire une règle qui décrit parfaitement le passé et rien d'autre.
Les quatre grandes familles de stratégies
Suivi de tendance (momentum temporel)
L'idée : un actif qui monte depuis plusieurs mois a tendance à continuer. Les explications avancées sont comportementales (sous-réaction aux nouvelles, puis suivisme) et structurelles (flux progressifs des investisseurs institutionnels). Moskowitz, Ooi et Pedersen (2012) ont documenté cet effet sur des dizaines de contrats à terme. Profil typique : beaucoup de petites pertes, quelques gros gains, et une bonne tenue lors des krachs prolongés.
Momentum en coupe transversale
Au lieu de comparer un actif à son propre passé, on compare les actifs entre eux : acheter ceux qui ont le plus monté sur 12 mois, vendre ou éviter ceux qui ont le plus baissé. Risque connu : des retournements brutaux (« momentum crashes ») quand le marché repart violemment après une chute.
Retour à la moyenne
L'inverse : un écart excessif par rapport à une valeur de référence tend à se résorber. Fonctionne surtout à court terme et sur des paires d'actifs liés (deux actions du même secteur, un ETF et ses composants). Profil : beaucoup de petits gains, et des pertes rares mais sévères quand l'écart ne se referme pas.
Carry et primes de risque
Être rémunéré pour porter un risque : devises à taux élevé contre devises à taux bas, vente de volatilité, portage obligataire. Le rendement est régulier jusqu'à l'événement qui efface plusieurs années de gains.
| Famille | Horizon | Gains | Pertes typiques | Sensible à |
|---|---|---|---|---|
| Tendance | Semaines à mois | Rares mais gros | Nombreuses et petites | Marchés sans direction |
| Momentum transversal | Mois | Réguliers | Retournements brutaux | Rebonds violents |
| Retour à la moyenne | Heures à jours | Nombreux et petits | Rares et gros | Ruptures de régime |
| Carry | Mois à années | Réguliers | Krachs soudains | Crises de liquidité |
Votre premier backtest en Python
Voici une stratégie de tendance volontairement simple : être investi dans un indice quand son cours est au-dessus de sa moyenne mobile 200 jours, en liquidités sinon. Le but n'est pas qu'elle soit bonne, mais que le test soit honnête.
import numpy as np
import pandas as pd
# Cours de clôture ajustés (dividendes et splits), index = dates
prices = pd.read_csv("indice.csv", index_col="Date", parse_dates=True)["Adj Close"]
returns = prices.pct_change()
# Signal : 1 si le cours est au-dessus de sa moyenne 200 jours
signal = (prices > prices.rolling(200).mean()).astype(int)
# Crucial : le signal de J n'est appliqué qu'au rendement de J+1
position = signal.shift(1)
# Coût : 5 points de base à chaque changement de position
costs = 0.0005 * position.diff().abs()
strategy = (position * returns - costs).dropna()
equity = (1 + strategy).cumprod()
sharpe = strategy.mean() / strategy.std() * np.sqrt(252)
max_dd = (equity / equity.cummax() - 1).min()
trades = int(position.diff().abs().sum())
print(f"Sharpe {sharpe:.2f} | Drawdown max {max_dd:.1%} | Transactions {trades}")
Les trois lignes qui comptent vraiment
signal.shift(1): sans ce décalage, la stratégie utilise la clôture du jour pour décider d'un rendement qui se termine à cette même clôture. C'est le biais d'anticipation, et il suffit à rendre n'importe quelle stratégie brillante.costs: même minime, le coût doit exister. Comparez le résultat avec 0, 5 et 20 points de base.trades: 15 transactions sur 20 ans ne permettent aucune conclusion statistique ; notez toujours ce chiffre à côté du Sharpe.
Comparer à la référence
Un Sharpe isolé ne dit rien. Calculez les mêmes métriques pour le simple achat-conservation de l'indice. Souvent, la règle de moyenne mobile ne bat pas l'indice en rendement mais réduit nettement le drawdown maximal : c'est un arbitrage rendement/risque, pas un « gain ». Pour choisir les bonnes métriques, voir Sharpe contre Sortino (en anglais) et le calcul du drawdown maximal en Python (en anglais).
Les pièges qui guettent le débutant
Optimiser la longueur de la moyenne
Tester 50, 100, 150, 200 et 250 jours puis garder la meilleure, c'est sélectionner le bruit. Si 200 fonctionne mais 180 et 220 échouent, il n'y a pas de stratégie. Les résultats voisins doivent se ressembler. Ce problème est au cœur de l'overfitting en trading algorithmique (en anglais).
Tester sur un seul actif
Une règle de tendance a une justification générale : elle devrait fonctionner, même modestement, sur plusieurs indices, devises et matières premières. Un succès limité à un seul marché doit rendre méfiant.
Oublier la taille de position
Une stratégie gagnante avec une taille de position excessive mène à la ruine. Commencez par une allocation fixe et modeste, puis explorez le dimensionnement des positions sans Kelly.
Par où continuer
| Étape | Objectif | Ressource |
|---|---|---|
| 1 | Reproduire le backtest ci-dessus sur 3 marchés | Données gratuites (indices, ETF) |
| 2 | Apprendre la méthode complète | Guide du backtesting |
| 3 | Connaître les erreurs classiques | 8 erreurs de backtesting |
| 4 | Choisir un outil | Bibliothèques Python de backtesting (en anglais) |
| 5 | Faire auditer ses résultats | Analyseur de backtest TrueVerdikt |
Le trading quantitatif récompense moins l'ingéniosité des règles que la rigueur des tests. Une stratégie ordinaire testée honnêtement vaut mieux qu'une stratégie brillante testée avec complaisance : la première vous dit la vérité, la seconde vous la fera découvrir avec de l'argent réel.
Passer de la théorie à la pratique
Valider une stratégie avant d'y risquer du capital : data-snooping, overfitting, walk-forward, biais du survivant et Deflated Sharpe Ratio expliqués.
Analyser un backtest
