Qu'est-ce que la mean reversion ? Trois implémentations backtestées — une seule gagne consistamment
La mean reversion est une classe, pas une stratégie. Nous avons walk-forwardé trois implémentations sur 35 noms thématiques : le canal de régression gagne 22 sur 35, le basket Fibonacci gagne à PF 1,76, le Bollinger plat gagne 1 sur 35. La raison structurelle c'est quelle moyenne vous supposez.
L'histoire standard de la mean reversion va comme suit. Les prix oscillent autour d'une valeur juste. Quand ils sur-étendent vers le haut, les vendeurs arrivent. Quand ils sur-étendent vers le bas, les acheteurs arrivent. Trouvez la moyenne, mesurez la distance à la moyenne, et pariez que cette distance se ferme. Buy the dip, sell the rip, mean-revertez dans le profit.
L'histoire est à moitié vraie. Les prix mean-reversent vraiment — sur le bon type de nom. La moitié qu'elle se trompe c'est de traiter la "mean reversion" comme une stratégie unique alors que c'est en fait une classe de stratégies qui désaccordent fondamentalement sur ce qu'est la moyenne. Nous avons walk-forwardé trois implémentations de mean reversion différentes sur le même univers de 35 tickers sur 2 ans de bougies horaires. La version canal de régression a classé ROBUST sur 22 noms sur 35. La version Bollinger à moyenne plate a classé ROBUST sur 1 sur 35. La version basket Fibonacci — un format entièrement différent — a délivré un PF basket-level de 1,76 / Sharpe 1,42 / +23,7% sur 3 ans de bougies daily sur niveaux curés. Même concept sous-jacent, trois résultats totalement différents. Ce papier détaille pourquoi.
Le TL;DR. La mean reversion marche sur les noms thématiques volatils qui ne tendancent pas proprement. L'implémentation que vous utilisez compte plus que le concept. La moyenne plate (Bollinger Bands) échoue parce que la moyenne n'est pas plate — elle dérive. Le canal de régression s'adapte à la dérive et gagne sur 22 sur 35 noms. Le Fibonacci curé gagne au niveau basket sur un timeframe différent (daily, multi-semaines). Sur les tendanciers séculaires (classe $NVDA / $TSLA / $AMZN), chaque flavor échoue — la tendance est le facteur dominant et la moyenne est une cible mouvante que la stratégie ne peut pas suivre.
Ce qu'est vraiment la mean reversion
Une stratégie de mean reversion fait deux hypothèses :
- Il existe une référence — une moyenne mobile, une ligne de régression, un niveau Fibonacci, un VWAP, un milieu de range récent — à laquelle le prix est statistiquement attaché.
- Plus le prix dérive de la référence, plus le prochain move est probable de retour vers elle.
Concrètement, la stratégie tire quand le prix est loin de la référence (défini par ±N écarts-types, ±N% de la ligne, ±N ATRs, etc.), et sort quand le prix retourne à la référence (ou hit un stop du côté opposé).
Les deux décisions de design qui comptent le plus :
- Qu'est-ce que la moyenne ? Une horizontale plate ? Une régression linéaire qui s'adapte à la pente ? Un niveau historique curé par l'utilisateur ? Une ligne intraday pondérée par volume ? Chaque réponse fait marcher la stratégie sur une classe de nom différente.
- Qu'est-ce que la distance ? Écarts-types des returns ? Multiples ATR ? Points de pourcentage ? Chaque réponse rend le signal d'entrée plus ou moins sensible aux changements de régime.
Le manuel traite ça comme des problèmes résolus avec réponses uniques. Empiriquement, les deux réponses dépendent du ticker, du timeframe, et du régime.
Pourquoi ça marche — quand ça marche
Deux raisons, une statistique, une comportementale.
Statistique. Les returns sont bruyants autour d'une tendance sous-jacente. Les moves quotidiens sont dominés par des événements de liquidité, le flux d'actualités, les flux liés aux options, et la dynamique de carnet d'ordres — pas par les changements dans la valeur sous-jacente. Sur de courts horizons, la composante bruit domine et ce bruit est approximativement stationnaire autour de la tendance. Une position qui fade des excursions extrêmes de bruit parie, en espérance, sur la distribution de bruit qui revient — un pari statistique propre.
Comportementale. Les marchés sur-réagissent. Les vendeurs paniqués ne cessent pas de vendre à la "valeur juste" — ils cessent quand le bid disparaît. Les acheteurs euphoriques ne cessent pas d'acheter à la "valeur juste" — ils cessent quand ils manquent de capital. Les deux sur-réactions produisent le même pattern structurel : le prix s'étend au-delà de la référence, ne trouve plus de participants marginaux, et revient. Les stratégies de mean reversion fadent la sur-réaction.
Les deux raisons échouent dans la même situation : quand la valeur sous-jacente elle-même bouge assez vite pour que ce qui ressemble à une sur-réaction soit en fait un re-rating. $NVDA courant de 100 $ à 140 $ en trois semaines n'est pas une sur-réaction — c'est un re-pricing. Fadé comme trade mean reversion, ça produit un bleed stable pendant un an.
Les trois implémentations testées
QuantAbundancia maintient un harness de sweep interne qui walk-forwarde chaque stratégie de la librairie sur tout l'univers thématique. Les trois implémentations de mean reversion dans la librairie :
1. Bollinger à moyenne plate (la version manuel, fichier mean_reversion.py)
La référence est une moyenne mobile simple sur 20 périodes. Bandes à ±2 écarts-types. Entrées long au touch de la bande basse, sortie à la SMA. L'hypothèse implicite : la SMA est la valeur juste. Le défaut : sur tout nom en tendance soutenue, la SMA dérive vers le haut mais la stratégie la traite toujours comme une référence plate — la bande haute est touchée à plusieurs reprises et ne produit rien, la bande basse est touchée pendant des pullbacks sains et produit des entrées couteau qui tombe.
2. Canal de régression (la version adaptative, fichier regression_channel_mr.py)
La référence est une régression linéaire fittée sur les 40 dernières bougies. Bandes à ±2 × écart-type des résidus. L'ajout clé : fade la bande basse seulement si la pente de régression est non-négative. Autrement dit : ne fade pas une tendance baissière. Le canal s'adapte à la pente de la tendance, donc il peut trader la reversion le long d'une tendance sans être whipsawé par la tendance elle-même.
3. Basket Fibonacci curé (la version basket, fichier fib_mean_reversion.py)
La référence est un niveau clé historique curé par l'utilisateur — un par ticker, choisi à la main sur le chart daily. Entrées long sur un touch dans ±2,5% du niveau après être venu de hors de la bande. Stop -10%, take-profit +12%, time exit 20 bougies. Tourné sur un basket de 48 tickers répartis sur 12 thèmes. Couvert en profondeur dans notre piece sur le retracement de Fibonacci — c'est la même classe de mean reversion avec une référence curée plutôt que calculée.
Ces trois flavors désaccordent sur chaque décision de design : moyenne plate vs adaptative à la pente vs niveau choisi à la main, bandes statistiques vs bandes en pourcentage, pas de filtre de tendance vs filtre de pente vs filtre niveau-thème. Les résultats walk-forward désaccordent tout aussi nettement.
Le leaderboard — 35 noms, 2 ans, timeframe 1 heure
L'univers de 35 tickers IBKR couvre la même structure thématique que le basket Fibonacci — photonics, space, drones, nuclear, CPU bottleneck, AI inference, agentic AI, AI utility, AI power, plus les grands cap gagnants séculaires. Le sweep classe chaque paire (ticker, stratégie) comme ROBUST (les deux fenêtres walk-forward positives et significatives), STABLE (positives mais inégales), ou LUMPY (une fenêtre porte le résultat entier).
| Stratégie | ROBUST | STABLE | LUMPY |
| --- | --- | --- | --- |
| regression_channel_mr | 22 | 7 | 3 |
| ema_crossover (tendance, pour référence) | 15 | 7 | 2 |
| keltner_breakout | 8 | 2 | 3 |
| adaptive | 8 | 2 | 2 |
| mean_reversion (Bollinger moyenne plate) | 1 | 0 | 0 |
| macd_adx | 1 | 1 | 3 |
La donnée la plus importante. Deux stratégies dans la même classe — toutes deux mean-revertant vers une référence — produisent 22 classifications ROBUST contre 1. La différence n'est pas le concept de mean reversion. C'est de savoir si la référence elle-même est autorisée à dériver.
Les 22 noms ROBUST regression_channel_mr : $AAOI, $AEHR, $ALAB, $AMKR, $ASTS, $AVGO, $BE, $BKSY, $CIFR, $CRDO, $DOCN, $GEV, $INTC, $IREN, $LITE, $NBIS, $OKLO, $ONDS, $RKLB, $UMAC, $UUUU, $VST.
Mappez-les sur la taxonomie de thèmes de QA et le pattern est le même que celui que le basket Fibonacci a trouvé : 9 des mêmes groupes thématiques volatils dominent — photonics, space, drones, nuclear, CPU bottleneck, AI inference, agentic AI, AI utility, AI power. Deux stratégies indépendantes, deux backtests indépendants, même classe de nom gagnante. Ce n'est pas une coïncidence ; c'est la propriété sous-jacente de ces noms.
Top 5 single-ticker par P&L total 2 ans sur regression_channel_mr :
| Ticker | P&L 2 ans complet | P&L WF1 | P&L WF2 | | --- | --- | --- | --- | | $CIFR | 302 K $ | 103 K $ | 98 K $ | | $BE | 270 K $ | 66 K $ | 126 K $ | | $ONDS | 247 K $ | 48 K $ | 126 K $ | | $AAOI | 246 K $ | 71 K $ | 98 K $ | | $ASTS | 204 K $ | 57 K $ | 91 K $ |
Les cinq sont splittés sur les deux fenêtres walk-forward — aucune fenêtre ne fait tout le travail. C'est le contenu empirique de la classification ROBUST.
Pourquoi le canal de régression gagne
L'implémentation du canal de régression fait trois choses que la version moyenne plate ne fait pas :
Référence adaptative à la pente. La ligne de régression bouge avec la tendance. Sur $AVGO en 2024-2025, la ligne a eu une pente positive significative à travers presque toute la fenêtre 2 ans — la bande basse a suivi le niveau de pullback naturel de la tendance, pas une horizontale plate qui n'avait pas été touchée depuis un an.
Filtre ne-fade-pas-la-tendance-baissière. Prend les touches de bande basse seulement quand la pente est non-négative. Cette règle unique tue le mode d'échec couteau qui tombe qui condamne la version moyenne plate sur tout drawdown soutenu.
Sortie à la centerline. Take-profit à la ligne de régression, pas à la bande opposée. La moitié du travail est faite quand le prix retourne à la valeur juste ; exiger l'aller-retour complet de mean reversion laisse de l'argent sur la table et expose la position à la prochaine vague de bruit.
L'unique entrée ROBUST de la version moyenne plate — $KTOS — est un nom qui oscille dans un range à peu près plat pour la fenêtre 2 ans complète. L'hypothèse moyenne plate est approximativement correcte pour ce seul ticker. Ailleurs, elle ne l'est pas.
Où la mean reversion échoue — chaque flavor
Le mode d'échec partagé est le même que celui identifié dans le piece Fibonacci. Les tendanciers séculaires blow-through chaque référence. Sur $NVDA, $TSLA, $AMZN, $ASML, $PLTR, $CRWD, $SNOW, chaque variante de mean reversion que nous avons testée a classé LUMPY ou pire. Le narratif est simple : quand une action imprime des plus hauts à travers chaque niveau pendant 12 mois consécutifs, chaque version de mean reversion est bullish trop tôt et saigne.
Ce n'est pas un défaut de la mean reversion. C'est l'expression inverse de pourquoi le trend-following existe. L'univers thématique se split proprement en deux types de régime :
- Mean-reverters thématiques volatils (les 22 noms ROBUST) — la tendance n'est pas dominante, le bruit l'est. Fadez le bruit.
- Monstres de tendance séculaire (les grands cap gagnants AI) — la tendance domine le bruit. Suivez la tendance, ne la fadez pas.
Les 15 noms où ema_crossover (un trend follower) a classé ROBUST se chevauchent avec la liste canal de régression sur 9 noms. C'est un autre point structurel : sur les noms thématiques volatils, les deux directions de stratégie peuvent marcher — timing différent, profil de drawdown différent, mais toutes deux extraient de l'edge. Sur les tendanciers séculaires, seul le trend-following marche. L'asymétrie vous dit dans quelle classe de nom vous êtes.
Basket vs per-ticker — deux jeux différents
Le basket Fibonacci et le sweep canal de régression jouent à des jeux différents. Vaut le coup d'être explicite :
- Le basket Fibonacci tourne un niveau curé par ticker sur 48 tickers comme basket diversifié. Le nombre PF 1,76 / Sharpe 1,42 est un résultat niveau-basket — le ticker moyen contribue une petite tranche bruyante ; le basket lisse le bruit. La thèse implicite : la diversification sur les thèmes fait autant de travail que la règle d'entrée.
- Le sweep canal de régression tourne une stratégie configurable par ticker, walk-forward validée par ticker. Le compte de 22 ROBUST est par-ticker — chaque nom porte son propre PF, Sharpe, drawdown. La thèse implicite : un ticker individuel a assez de structure mean-revertante pour qu'une stratégie fittée dessus standalone produise du vrai edge.
Les deux peuvent être vrais ; ils répondent à des questions différentes. La réponse basket c'est : "si je veux une petite sleeve mean reversion dans un portefeuille, quelle est une façon robuste de la construire ?" La réponse per-ticker c'est : "si je trade $X spécifiquement, la mean reversion est-elle un edge viable ?" Sleeve différente, sizing différent, profil de risque différent.
Comment appliquer ça
Si la mean reversion est l'angle que vous voulez exprimer, la version supportée empiriquement c'est :
- Choisissez un nom dans les groupes thématiques volatils. Les 9 thèmes qui ont dominé à la fois le basket Fibonacci et le sweep canal de régression sont les mêmes : photonics, space, drones, nuclear, CPU bottleneck, AI inference, agentic AI, AI utility, AI power. La page /stocks/<ticker> montre à quel thème chaque nom appartient.
- N'utilisez pas une référence moyenne plate. Une SMA 20 périodes avec multiples de bande fixes est la version manuel et elle ne survit pas au walk-forward sur cet univers. Une régression linéaire avec filtre de pente, si.
- Ajoutez une règle ne-fade-pas-la-tendance-baissière. Quelle que soit votre référence, prenez les touches de bande basse seulement quand la tendance sous-jacente est non-négative. Cette règle unique fait du travail significatif dans le résultat 22-ROBUST.
- Sortez à la référence, pas à la bande opposée. La moitié de l'aller-retour est la majeure partie de l'edge ; la seconde moitié est exposition à du nouveau bruit.
- Ne l'appliquez pas sur les tendanciers séculaires. Les noms classe $NVDA ont besoin d'une stratégie de tendance. La mean reversion là-dessus est un bleed de 12 mois.
Pour exécution US-retail sur le basket de noms où ça marche, le broker le plus propre pour actions fractionnaires et données horaires fiables est Interactive Brokers — /stack/ibkr couvre la mécanique d'accès. Les alertes live quand le canal de régression tire (ou quand un touch Fibonacci curé hit) font partie de /pro.
Pour l'implémentation sœur Fibonacci curé, voir Qu'est-ce que le retracement de Fibonacci ? — même classe, référence différente, timeframe différent. Pour la méthodologie corrélation plus large de QA — qui nourrit les classifications de thème utilisées ici — voir Pourquoi corrélation > narratif en investissement thématique.
Ce qu'il faut surveiller
- Cadence de re-validation. Le sweep est re-tourné environ trimestriellement. Un breakdown persistant sur n'importe lequel des 22 noms ROBUST ferait rétrécir la liste ROBUST et déclencherait un sweep de paramètres sur la stratégie.
- Shift de régime. La mean reversion sous-performe en tendances fortes unidirectionnelles sur tout le marché. Le backtest 2 ans couvre la fenêtre fin 2024 à mi-2026, qui a inclus à la fois régimes tendanciels et chops. Un tape low-vol tendanciel multi-trimestres testerait le filtre de pente du canal de régression comme 2017 a testé toute stratégie MR antérieure.
- La lecture classe-opposée. Quand
ema_crossoveretregression_channel_mrse chevauchent sur un nom, les deux classes marchent sur des timings différents. Quand elles cessent de se chevaucher — un nom sort de la liste tendance mais reste sur la liste mean reversion, ou vice-versa — le régime sur ce ticker a shifté, et c'est l'indicateur avancé pour re-classification. - La baseline moyenne plate. Tracker la version
mean_reversion(Bollinger) est un canari utile : quand plus d'un ou deux tickers commencent à produire de l'edge avec l'hypothèse moyenne plate, le marché est dans un régime low-trend où presque toute référence marche. Quand le compte reste à 1, le filtre de pente fait le travail. - Corrélation niveau-bulle. Si la bulle d'un thème casse la corrélation — signifiant que les 4 tickers cessent de trader comme un cluster — la math de diversification basket s'affaiblit et l'edge per-ticker doit porter plus de poids.
Données live sur le basket : /stocks/rklb, /stocks/aaoi, /stocks/cifr — trois des 22 noms ROBUST, chaque page de ticker montre la position canal de régression live et le niveau Fibonacci curé côte à côte.
Contexte de bulle : /bubbles/photonics et les 8 autres clusters thématiques validés — les mêmes 9 thèmes sur lesquels le basket Fibonacci et le sweep canal de régression sont d'accord.
Lecture adjacente : Qu'est-ce que le retracement de Fibonacci ? pour l'implémentation sœur à référence curée, et Pourquoi corrélation > narratif en investissement thématique pour la méthodologie taxonomie-de-bulle qui nourrit la sélection d'univers ici.
QuantAbundancia est de la recherche éducative. Rien ici n'est un conseil en investissement. Voir /disclosures.
Related bubbles
Get the daily digest.
One email a day · alerts + bubble shifts + new research. Free during beta.
No spam. One email per day max. Telegram alerts coming with the paid tier.