Apple Microsoft NVIDIA ASML JPMorgan HSBC LVMH TSMC Tencent Lilly Reliance Tesla

TradFi Tracker — Le Momentum des Marchés Mondiaux

NLP + PRICE MOMENTUM · ACTIONS US + EUROPE + ASIE + ÉMERGENTS · HISTORIQUE 15 ANS · BENCHMARK SPY 33 ANS · LIVE DATA
secteurs
actions mondiales
13 places boursières
Live · Yahoo Finance (13 places boursières)
MAJ
Live data Prix : Yahoo Finance (toutes places boursières) Now UTC · Donnée UTC

Marchés

Tableau de bord — Live

Synthèse temps réel des 39 thèmes sectoriels mondiaux — régime de marché, leaders, retardataires et force relative vs S&P 500.

Classement complet — thèmes sectoriels mondiaux

👇 Juste en-dessous : 12 boutons régions cliquables. Par défaut toutes actives (score global). Clique sur une région pour la désactiver (la chip devient pâle) — le score momentum de chaque thème est recalculé en temps réel sur le sous-ensemble d’actions restant. Exemple : décoche US pour voir quels secteurs surperforment le S&P 500 hors actions américaines. Les boutons “tout/aucun” à droite permettent un reset rapide. Clique sur un chip ticker pour ouvrir TradingView.

Régions · toutes

Lecture

Un secteur en tête du classement signale une rotation active du capital vers ce thème sectoriel. L’approche momentum privilégie une exposition aux 3-5 meilleurs secteurs, à condition que le filtre tendance S&P 500 soit favorable (S&P 500 au-dessus de sa MA200). Clique sur Historique sur n’importe quelle carte pour zoomer (7j/30j/90j/6M/1A/2A/max). Les actions affichées (triées par market cap décroissante) sont les constituants du secteur.

Momentum des secteurs dans le temps

À gauche, la liste des secteurs : rang, performance sur la fenêtre choisie en haut de page, et forme de la courbe. Elle sert à balayer — cherche, trie par momentum, perf ou nom. Clique une ligne pour la tracer à droite ; re-clique pour la retirer. C’est aussi la légende du graphe : le trait de couleur d’une ligne est celui de sa courbe, ce qui évite d’écrire des noms par-dessus les tracés. Ta sélection est mémorisée d’une visite à l’autre.
Les vues d’ensemble — Heatmap, Top 3, Grille — montrent les secteurs tous ensemble et prennent alors toute la largeur. Historique jusqu’à 15 ans, indice mcap-pondéré, benchmark S&P 500.

Rotation des secteurs — Approche momentum

Balayer à gauche · suivre à droite · la fenêtre de mesure se règle en haut de page
Vue
Affichage
Historique affiché

Lignes — superposition classique

Courbes sectorielles superposées, base 100 ou momentum glissant. Survole une légende pour isoler une courbe (les autres se grisent), clique-la pour masquer / réafficher la série. Le Top 3 par momentum relatif est tracé par défaut — bouton Toutes pour les afficher tous.

Heatmap — chaleur par période

Une cellule = la perf d’un secteur sur une période donnée. Vert intense = surperforme · Rouge intense = sous-performe. Slider d’intensité pour ajuster l’échelle. Survole une cellule pour la valeur exacte + le rang.

Top 3 — podium hebdo

À chaque fenêtre temporelle, qui était dans le top 3 ? Visualise l’évolution du leadership (rotation entre secteurs) et la durée du règne d’un secteur en haut. Idéal pour repérer les transitions de cycle.

Grille — small multiples

Un mini-graphe par secteur, échelle partagée pour comparaison directe. Avantage : on voit chaque secteur sans encombrement, et on identifie d’un coup les retournements de tendance sectoriels.

Comment l’utiliser

Détecter une rotation : regarde Top 3 — si le podium change rapidement (3 secteurs différents en 4 semaines), tu es en phase de transition. Confirmer un trend : passe en Lignes ou Grille — un secteur en hausse continue 3+ mois indique un thème durable. Comparer ampleur : Heatmap + slider d’intensité — quels secteurs sont vraiment dominants vs marginaux. Toujours croiser avec le score composite (onglet Classement) pour valider.

Classement — secteurs par score composite

Clique une ligne pour l’ouvrir : décomposition du score, courbe de l’indice, score sur les 8 fenêtres et les actions qui font la performance. Toutes les mesures suivent la fenêtre choisie en haut de page.

Méthode de calcul & lecture du signal

Score — scoring Alpha ZEN adapté TradFi (v2) : 3 sous-scores normalisés en percentiles (0-100) parmi les secteurs, puis pondérés. Momentum relatif vs S&P 500 (55 %) : le secteur surperforme-t-il réellement le marché actions. Breadth (22,5 %) : le mouvement est-il large ou porté par une seule ligne. Momentum court terme (22,5 %) : réactivité / timing. Le poids news (anciennement 10 %) a été retiré — signal RSS trop fragile (baseline vide → accélération plafonnée).

Cible — signal LONG ET momentum relatif positif ET breadth ≥ 60 % : les 3 réunies = vraie tendance, pas un rebond isolé. La Durée dit depuis combien de jours le régime tient : ≤ 15 j cycle jeune (entrée anticipée possible), 15-60 j cycle mature, ≥ 90 j cycle vieillissant (surveiller le retournement). FLAT = index sous MA50 ou breadth dégradée → ne pas s’y exposer même si le score reste correct par inertie.

Régions · toutes

Restreindre l’univers

Matrice Sector × Region — où va l’argent ?

Une ligne par secteur, une colonne par région : la cellule donne la perf mcap-pondérée des actions du secteur dans cette région, sur la fenêtre choisie en haut de page. Régions de la plus chaude à la plus froide, secteurs par momentum — l’intersection en haut à gauche est la plus porteuse.

Heatmap momentum — secteurs × 13 régions

Survol = détail · clic = liste des actions · clic sur une région ou un secteur = toute la ligne / colonne

Matrice de corrélation — diversification réelle vs illusoire

Coefficient de Pearson entre les rendements quotidiens. Ambre → brun foncé = bougent ensemble (diversification illusoire) · Rose → rouge = anti-corrélés (vrai hedge naturel) · Gris ≈ décorrélés. Le mode Excess vs S&P 500 (par défaut) soustrait la performance du marché et révèle les vrais clusters sectoriels ; Returns bruts mesure surtout le bêta-marché commun.

Heatmap corrélation — secteurs (-1 = anti-corrélé · +1 = identique)

Survole (ou touche) une cellule = crosshair ligne + colonne · Clic sur une cellule = verrouille cette paire · Clic sur un nom = verrouille la croix et zoome sur ce secteur · Labels collants pendant le scroll · F ou = plein écran, Échap pour sortir

🔗 Top corrélations positives — diversification illusoire

Paires avec corrélation > 0.75 = quasi-équivalentes : les détenir ensemble = pari concentré déguisé.

🛡️ Top anti-corrélations — vrai hedge naturel

Paires avec corrélation < 0 = se compensent dans les drawdowns. Diversification authentique.

Distribution des corrélations dans le temps

Streamgraph montrant combien de paires se trouvent dans chaque tranche de corrélation. Bande brun foncé en haut qui gonfle = paires quasi-identiques (≥ 0.75), le marché converge (stress, tout bouge ensemble) · Bande grise au milieu qui domine = corrélations faibles, régime de rotation, vraie diversification disponible · Bande rouge tout en bas = paires anti-corrélées (vrais hedges naturels).

Fenêtre

Lecture de la matrice

Une cellule brun foncé (≥ 0.85) = les deux indices répliquent quasiment le même mouvement. Détenir les deux = surexposition. Une cellule rose à rouge (≤ -0.15) signale un comportement opposé — utile pour hedger un risque concentré.

Pic de corrélation = stress

Quand la corrélation moyenne dépasse 0.7, le marché est en mode risk-off : tout descend ensemble (mars 2020, oct 2022, avril 2025). Les hedges normalement décorrélés cessent de marcher. À surveiller comme indicateur de panique.

Application pratique

Pour bâtir un panier diversifié : viser des paires avec corrélation < 0.5. Combiner secteurs cycliques + défensifs, ou régions hors cycle US. Si la matrice ne montre plus de paires < 0.5 → marché en convergence, alléger les paris dérivés.

Corrélation moyenne par régime — ALPHA vs ZEN

Comparaison des corrélations en mode bull (S&P 500 > MA200) vs bear (S&P 500 < MA200) sur l’historique embarqué. Une corrélation plus haute en ZEN confirme que la diversification s’effondre dans les drawdowns.

Méthode de calcul (transparence)

Secteurs : on utilise l’indice mcap-pondéré déjà calculé par fetch_tradfi.py pour chaque thème (top-1 proxy par market cap). Rendements = log-returns sur dates communes. Régions : on construit en live un indice mcap-pondéré pour chaque zone à partir des actions du panier (toutes histoires embarquées dans tradfi_cache.json, ~15 ans avec downsampling tiered : daily 0-2A, hebdo 2-10A, tri-hebdo 10-15A). Les actions sans historique ou avec < 20 points sont exclues. Rolling : moyenne des n×(n-1)/2 paires calculée sur fenêtre glissante (30/60/90/180j) à pas hebdomadaire — la valeur affichée à la date t utilise la fenêtre [t-w, t].

Méthodologie — L’approche momentum expliquée

Comment le Tracker identifie les secteurs et zones géographiques qui surperforment vraiment le marché, dans quel sens les suivre, et quand en sortir. Aucune API payante, tout est gratuit (Yahoo Finance + RSS), local et transparent.

Pourquoi un tracker à deux axes ?

Les marchés actions fonctionnent par rotations à deux niveaux. Niveau 1 — les rotations sectorielles : en 2023 c’était l’IA et les Mag 7, en 2024 les banques européennes et l’énergie, en 2025 le lithium, les REITs et les mineurs d’or, en 2026 le nucléaire & SMR, les semi-conducteurs IA et la robotique. Niveau 2 — les rotations géographiques : le S&P 500 a dominé 2023-2024, le Nikkei 225 a rattrapé début 2025, le Hang Seng a bounce fin 2025, le Nifty 50 monte structurellement depuis 2023. Chaque cycle dure 1 à 6 mois, puis le capital migre. L’enjeu n’est pas de “choisir le bon stock”, c’est d’être dans le bon secteur ET la bonne géographie au bon moment. Cet outil s’inspire de l’approche Alpha ZEN de Thami Kabaj, adaptée au TradFi : rester positionné mécaniquement sur ce qui surperforme le S&P 500, sortir dès que le momentum relatif casse, ne jamais deviner — suivre le signal.

Rigueur méthodologique. 801 tickers · 13 places boursières · 24 devises mappées · FX par jour historique (jamais d’anchor unique) · normalisation GBp London · dédup ADR/local · indices mcap-weighted dynamiques avec shares historiques · clip ±30%/barre vs erreurs de données · 33 ans d’historique SPY embarqués pour le benchmark relatif. Tous les choix sont auditables ci-dessous.

Architecture — 1 axe (thèmes) + filtre régions dynamique

Un seul axe logique : les thèmes sectoriels (AI & Semi, Défense, Nucléaire, Luxe…). Chaque action porte son attribut région (US, Europe, UK, Japon, Chine, Corée·Taïwan, Inde, Australie, ASEAN, Moyen-Orient, LatAm, Canada, Afrique). Un filtre régions en haut du classement permet de garder un sous-ensemble d’actions ; le score momentum est recalculé en temps réel côté navigateur sur le sous-ensemble. Plus d’index géographiques figés type “Nikkei 225 core” : l’utilisateur compose lui-même sa vue régionale.

1
41 thèmes sectoriels mondiaux — un ticker = un thème canonique
Chaque thème est un panier de 10 à 80 leaders mondiaux du secteur, toutes places boursières confondues (NYSE, NASDAQ, LSE, Euronext, XETRA, Tokyo, Hong Kong, Taipei, Seoul, NSE Mumbai, São Paulo, Tadawul Riyad, ASX Sydney…). Tout est converti en USD via les taux FX du jour. Règle clé : un ticker appartient à un seul thème canonique (TSMC → AI & Semi; Toyota → Auto & EV; Moutai → Luxe mondial) pour éviter la dilution du signal.

Couverture actuelle~820 tickers définis sur 39 thèmes (les anciens « Banques US / Europe / Asie » sont désormais un seul secteur Banques — la géographie est portée par l’axe Région). Les paniers les plus denses : Banques (65), AI & Semi-conducteurs (42), Pharma mondial (41), Industriels (38), Auto & EV (31), Conso défensive (30), Pétrole & Gaz (28), Assurance (27), Cloud & SaaS (22), Asset Managers & Bourses (21).

2
Attribut région — 12 zones mappées par ticker
Chaque action porte un champ region déterminé par (1) son suffixe Yahoo Finance quand il existe (.T → Japon, .HK/.SS/.SZ → Chine, .AX → Australie, etc.), ou (2) un override manuel pour les ADR US-listed dont l’exposition économique est ailleurs (BABA = Chine, TSM = Corée·Taïwan, PBR = LatAm, NVO = Europe, BHP = Australie, etc.).

13 régions disponiblesUS · Europe continentale · China incl. HK+Shanghai+Shenzhen · Japan · UK · Korea·Taïwan · India · Canada · Australia · LatAm · ASEAN — Singapour/Indonésie/Malaisie/Thaïlande/Philippines · Middle_East — Arabie Saoudite/EAU · Afrique — Afrique du Sud (AngloGold, Gold Fields…).

Cas limites gérés manuellementLes ADR et dual-listings sont assignés à leur pays d’exposition économique, pas à leur place de cotation. Shell (SHEL NYSE) → UK · Alibaba (BABA NYSE) → China · Petrobras (PBR NYSE) → LatAm · Novo Nordisk (NVO NYSE) → Europe · BHP (NYSE ADR + .AX) → Australia. Sans cette règle, tous les ADRs pollueraient la région US.

3
Filtre régions dynamique — recalcul Alpha ZEN complet côté navigateur
C’est la vraie valeur ajoutée du modèle. Au-dessus du classement, 13 chips US · Europe · UK · Japon · Chine · Corée·Taïwan · Inde · Australie · ASEAN · Moyen-Orient · LatAm · Canada · Afrique. Par défaut toutes actives (score = valeurs serveur global). Dès qu’on décoche une région : Pour chaque thème : 1. Filtrer tokens → garder uniquement ceux dans régions actives 2. Recalculer perf_7d / perf_30d mcap-weighted sur le sous-ensemble 3. Recalculer breadth_30d = % tokens filtrés avec perf_30d > 0 4. Rebuilder l’index secteur mcap-weighted (histoires 15 ans embarquées, downsamplées) 5. Calculer perf_90d de cet index filtré - perf_90d(SPY) = rel_mom_90d 6. Rank-normalize [rel, breadth, price] sur les 39 thèmes 7. Score = 0.55×rel + 0.225×breadth + 0.225×price (news désactivé en v2)

Exemple concretJe décoche tout sauf Europe + UK. Pour le thème AI & Semi (32 tickers), seuls restent : ASML, Infineon, STM, ARM. Le recalcul donne un rel_mom_90d très différent de la version globale (l’Europe a peu de leaders IA). Le thème perd son top rank. À l’inverse, Pharma mondial filtré Europe+UK remonte dans le top (Roche, Novartis, Novo Nordisk, AZN, GSK, Sanofi pèsent lourd et sont en tendance).

Pourquoi embarquer toutes les histoires 15 ans dans le JSONPour pouvoir recalculer l’index mcap-weighted d’un sous-ensemble arbitraire sans refetch, il faut que le navigateur dispose des séries prix de chaque ticker. Le JSON tradfi_cache.json contient un bloc histories = {ticker → [(ts, price_USD), …]} avec downsampling tiered (~450 points / ticker : daily 0-2A, hebdo 2-10A, tri-hebdo 10-15A). Le SPY benchmark est lui embarqué sur ~33 ans (spy_longhist) pour le graphe régimes ZEN/ALPHA. Chargé une fois, cache navigateur.

4
Cas d’usage — lire la rotation sur deux dimensions simultanément

Rotation sectorielle pure : toutes régions actives → le classement montre quels secteurs dominent globalement (vue Alpha ZEN standard).

Rotation régionale via un secteur : filtre Asie uniquement → le top montre quels thèmes surperforment le S&P 500 parmi les actions asiatiques (utile pour détecter la rotation vers l’Asie avec granularité sectorielle).

Chasser une idée précise : filtre LatAm + décoche tout le reste → je vois immédiatement que Pétrole & Gaz (Petrobras) domine et Métaux & Mines (Vale) aussi, pendant que Banques (Itaú, Bradesco) est neutre. Cela valide/invalide ma thèse d’allocation LatAm en quelques clics.

Protection via l’inverse : décocher une région en souffrance (ex: Chine durant une vague de sanctions tech) pour voir le vrai momentum hors cette zone, sans bruit.

Principe
Suivre le momentum, pas le prédire
Jambe dominante
Momentum relatif vs S&P 500 · 55 %
Horizon
Au choix — 1H à 1A, jambes proportionnelles
Protection
Mode ZEN si S&P 500 < MA200
Le pipeline en un coup d’œil

Les données brutes passent par 7 étapes pour devenir un classement actionnable. Chaque étape est explicitée plus bas.

Prix liveYahoo · 13 places · 23 devises
FXconversion USD par jour
Histoiresjusqu’à 15 ans, daily
Momentumrel-SP500 · breadth
SignalLONG / FLAT
Filtre S&P 500ALPHA / ZEN
Étape par étape
1
Price momentum court terme — pondéré par market cap
Ce qu’on fait : pour chaque secteur, on récupère les prix des actions constitutives via Yahoo Finance, toutes places boursières confondues (NYSE, NASDAQ, LSE, Euronext Paris, XETRA Frankfurt, SIX Swiss, Tokyo, Hong Kong, NSE India, Amsterdam, Madrid, Milan, Copenhagen). Tout est converti en USD via les taux FX du jour pour que les secteurs multi-devises restent comparables. On calcule une moyenne pondérée par market cap des performances 7j et 30j. price_mom = 0.5 × perf_mcapW(cran −1) + 0.5 × perf_mcapW(cran −2) Sur la fenêtre de référence 90J, les deux crans en dessous sont 30 j et 7 j — d’où la forme historique 0,5 × perf_30j + 0,5 × perf_7j. Sur une autre fenêtre, les crans suivent (voir la section « échelle proportionnelle » plus bas).

Pourquoi mcap-weightedÉvite qu’une small cap qui fait +40% fausse le score d’un secteur dominé par des méga-caps. Pour “Big Tech & Électronique”, on veut que NVDA, AAPL, MSFT pèsent le plus — pas qu’un éventuel retail-trading-day fasse dévier le signal.

2
Momentum RELATIF vs S&P 500 — la jambe dominante
Ce qu’on fait : pour chaque secteur, on récupère jusqu’à 15 ans d’historique daily (Yahoo Finance, avec fallback Stooq), on construit un index returns-based mcap-weighted (type S&P 500, avec clip ±30% par barre pour absorber les erreurs de données / splits mal détectés). On calcule la performance 90j de cet index, puis on soustrait la perf 90j du S&P 500 (ticker SPY, dividend-adjusted). C’est le vrai signal d’alpha. rel_mom = perf(sector_index, fenêtre) − perf(S&P 500, même fenêtre)

Pourquoi vs S&P 500 ?Un secteur à +10 % sur 90 j pendant que le S&P 500 fait +15 % n’est pas en momentum — il sous-performe. S’y positionner revient à perdre face à un ETF passif (SPY, VOO). C’est le cœur de la philosophie Kabaj : ne pas confondre « ça monte » avec « ça surperforme ». Attention toutefois : cette soustraction ne change pas le classement, elle change la lecture — la section C plus bas le démontre chiffres à l’appui, et explique où le benchmark mord réellement.

Différence avec l’onglet CryptoDans le Narrative Tracker crypto, le benchmark est Bitcoin (la crypto de référence). Ici, c’est le S&P 500 (l’indice actions de référence). La philosophie est identique, seul le benchmark change — normal, puisque chaque écosystème a son indice “roi” contre lequel mesurer l’alpha.

3
Breadth — est-ce que le mouvement est large ?
Ce qu’on fait : pour chaque secteur, on compte le pourcentage d’actions dont la performance est positive. C’est un indicateur de santé interne du panier. L’horizon est celui du cran juste en dessous de la fenêtre lue — 30 j sur la fenêtre de référence 90J. breadth = (nb actions avec perf(cran −1) > 0) / (nb actions mesurées) × 100

Pourquoi c’est crucialUn secteur où 1 action fait +60% et 9 actions font -8% aura un price momentum mcap-weighted flatteur… mais c’est une concentration, pas une rotation sectorielle. Un vrai secteur en momentum a ≥ 60% de ses actions dans le vert (idéalement proche de 100% comme on le voit actuellement pour Métaux & Mines ou Fintech).

4
Score composite — pondération Alpha ZEN (v2) adaptée TradFi
Ce qu’on fait : chaque sous-métrique est convertie en percentile-rank sur 0-100 (les valeurs brutes ne sont pas comparables entre secteurs — rel_mom en %, breadth en fraction). Le rank normalise tout sur la même échelle. Agrégation finale : score = 0.55 × rank(momentum relatif vs S&P 500) ← tendance (cœur du signal) + 0.225 × rank(breadth) ← largeur du mouvement (confirmation) + 0.225 × rank(momentum court terme) ← réactivité / timing Les horizons de ces trois jambes ne sont pas écrits ici en dur : ils dépendent de la fenêtre que vous avez choisie en haut de page, selon l’échelle proportionnelle décrite dans la section suivante. Sur la fenêtre de référence 90J : 90 j pour la tendance, 30 j pour l’ampleur, 7 j + 30 j pour le timing.

Évolution du scoringv1 (initial) : 60% prix court / 30% news / 10% volume — court-termiste, sans force relative. v2 (Alpha ZEN, avril 2026) : 55% momentum relatif + 22.5% breadth + 22.5% price_mom. v3 (11 août 2026) : les horizons deviennent proportionnels à la fenêtre lue, et la jambe news disparaît du code — pas seulement du discours.

Pourquoi il n’y a plus de signal news — et l’aveu qui va avec Le tracker mesurait jadis l’attention médiatique sur 10 flux RSS finance via le compteur mention_accel = (mentions 7j / moyenne 30j) − 1 clippé [−1, +3]. Trois défauts le rendaient inexploitable :
(1) le cache RSS ne retient qu’une centaine d’articles macro → la plupart des secteurs ont zéro mention, donc aucune discrimination possible ;
(2) les secteurs qui en ont sortent presque tous à +3, la valeur plafond — passer de 0 à 1 article donne une accélération infinie, clippée : même valeur pour tous, signal nul ;
(3) les médias réagissent après les prix (l’article « les banques montent » suit la hausse, il ne l’annonce pas) → double-comptage avec le momentum.

Ce que cette page a annoncé à tort pendant près de quatre mois. Le retrait de la news avait été décidé le 24 avril 2026 et écrit partout sur les deux trackers. Il n’avait été appliqué qu’ici, côté actions. Le tracker crypto, lui, a continué de calculer 50 % / 20 % / 20 % / 10 % news tout en affichant « 55 / 22,5 / 22,5, news désactivé » : l’écart n’était pas cosmétique, la jambe news pesait réellement sur le classement crypto (corrélation de rang 0,30 avec le score final). Corrigé le 11 août 2026, dans le calcul cette fois. Les deux univers appliquent désormais la même formule, et plus aucune métrique de mention n’entre dans quoi que ce soit.

La fenêtre de mesure — et pourquoi les trois jambes n’ont pas le même horizon

Le sélecteur en haut de page (1H · 4H · 1J · 3J · 1S · 30J · 90J · 1A) ne change pas l’affichage : il change ce qui est mesuré. Toutes les vues de la page suivent. Cette section explique ce que devient le score quand vous changez de fenêtre — la question la plus légitime qu’on puisse poser à cet outil, et celle à laquelle il ne répondait pas.

A
Huit fenêtres, une seule formule
Une couche indépendante (fetch_trackers_tf.py, rafraîchie toutes les 15 min) recalcule l’intégralité des métriques — performance, momentum relatif, breadth, signal, score, rang — sur chacune des sept fenêtres glissantes, à partir des barres horaires et journalières de Yahoo Finance. La huitième, 90J, est le score structurel décrit plus haut : il n’est pas recalculé par cette couche, c’est la référence du site.

Ce qui est publié avec chaque fenêtreSes bornes exactes (début → fin, en heure locale), sa durée réelle, et la couverture — combien de constituants ont réellement coté dessus. Une action dont la place est fermée est exclue du calcul, jamais comptée à 0 %, et les poids sont renormalisés sur ceux qui cotent. Un secteur sans aucun constituant coté reste vide : il n’est jamais rempli par un score moyen fabriqué qui se glisserait au milieu du classement.

B
L’échelle proportionnelle — chaque jambe descend d’un cran
Le problème, d’abord. L’intuition dit qu’une fenêtre 30J devrait mesurer ses trois composantes sur 30 jours. C’est ce que faisait la v1, et c’est ce qui vidait le score de sa substance : sur un même horizon, « ça monte », « ça monte largement » et « ça monte vite » finissent par dire la même chose. Mesuré sur les données réelles, la jambe Prix atteignait 0,87 à 1,00 de corrélation de rang avec la jambe Momentum relatif, et le score composite 0,97 à 0,99 avec sa seule première jambe. Les poids 22,5 % / 22,5 % ne décidaient plus rien : c’était un score à une dimension habillé en trois.

Et l’indice qui donnait la solution. Le score de référence 90J, lui, garde trois dimensions bien distinctes (0,22 de corrélation entre ampleur et tendance). Pourquoi ? Parce qu’il mesure ses jambes sur des horizons différents : 90 j, 30 j, et 7 j + 30 j. On a donc généralisé ce rapport au lieu de le figer sur 90 jours — chaque jambe descend d’un cran dans l’échelle : tendance (55 %) → la fenêtre W que vous avez choisie ampleur (22,5 %) → le cran en dessous ≈ W/3 (comme 30 j sous 90 j) timing (22,5 %) → les deux crans en dessous ≈ W/3 et W/10 (comme 7 j + 30 j) La construction est auto-similaire : appliquée à W = 90 J elle redonne exactement 90 / 30 / (7+30), c’est-à-dire le score de référence inchangé. Appliquée à 30J, elle donne 30J / 1S / (1S + 3J). Le détail de chaque jambe est lisible en cliquant sa barre, dans le Snapshot comme dans le Classement.

Résultat mesuréAprès correction, la corrélation entre jambes retombe à 0,18 – 0,84 selon la fenêtre — le niveau du score structurel. Le classement, lui, ne bouge que modérément (corrélation de rang 0,78 à 0,96 avec l’ancien) : on n’a pas changé ce que l’outil dit, on a rendu à deux de ses trois jambes le droit de le contredire.

Le plancher de l’échelle — 1H et 4HLa fenêtre 1H n’a aucun cran en dessous : ses trois jambes retombent sur elle-même, et son score redevient donc mécaniquement à une seule dimension (corrélation 1,00 entre Prix et Momentum relatif). La 4H n’a qu’un seul cran disponible pour ses deux jambes courtes. Nous ne fabriquons pas de barres plus fines pour combler : le repli est affiché sur la barre concernée et dans sa fiche de détail. À partir de 1J, l’échelle est complète.

C
Ce que le benchmark fait — et ce qu’il ne fait pas
Un aveu, parce qu’il est vérifiable. Le momentum relatif se calcule en retranchant la performance du S&P 500 à celle du secteur. Or cette performance est un seul et même nombre pour les 39 secteurs : le retrancher décale toutes les valeurs sans en changer l’ordre. Autrement dit, classer les secteurs par momentum relatif revient exactement à les classer par performance absolue — vérifié sur les données réelles, corrélation de rang 1,000 sur les huit fenêtres et sur les deux univers, crypto compris. Pendant longtemps cette page a présenté la surperformance comme « le signal-roi » alors qu’elle ne déplaçait aucune ligne du classement. rang(perf_secteur − perf_S&P 500) ≡ rang(perf_secteur) ρ = 1,000 Ce qu’on en a fait. Plutôt que de retoucher le score de référence, on a donné au benchmark un pouvoir qu’il n’avait pas : il conditionne désormais le régime LONG. Un secteur qui ne bat pas le S&P 500 n’est plus annoncé « en tendance », même si son prix monte et que son panier est large. Le benchmark cesse d’être un décor pour redevenir un filtre.

À quoi sert alors le chiffre affiché ?À lire, et c’est loin d’être rien : « +18 % » et « +18 % dont +17 % de marché » ne se pilotent pas de la même façon. Le momentum relatif dit ce que vous gagnez en plus d’un ETF S&P 500 passif — le seul rendement qui paie le risque de faire un choix sectoriel. Il ordonne comme la performance absolue, mais il ne se lit pas comme elle.

La suite envisagée, pas encore faitePour que le benchmark change réellement le classement, il faudrait un momentum ajusté du bêta (perf_secteur − β × perf_S&P 500) : le β variant d’un secteur à l’autre, le retranchement cesserait d’être une constante. C’est la définition stricte de l’alpha, et ce serait plus juste. Ce n’est pas déployé : cela déplacerait le classement de référence du site, et l’estimation du β demande des précautions que nous n’avons pas encore prises. Dit ici pour que le choix soit visible plutôt que subi.

Étape par étape (suite)
5
Signal LONG / FLAT par secteur & suivi cyclique
Ce qu’on fait : au-delà du score continu, chaque secteur reçoit un signal binaire d’exposition — LONG (on y va) ou FLAT (on reste dehors). Le signal est activé si trois conditions sont réunies : signal = LONG SI index_secteur > MA50(index_secteur) ET breadth > 50% ET momentum relatif vs S&P 500 > 0 signal = FLAT SINON La troisième condition date du 11 août 2026 (voir la section C ci-dessus) : sans elle, un secteur pouvait être annoncé « en tendance » tout en sous-performant le marché — exactement ce que la méthode prétend éviter. Elle rend le signal nettement plus sélectif, et d’autant plus que l’horizon s’allonge : mesuré sur la fenêtre 30J, 22 secteurs sur 39 passaient le filtre à deux conditions, ils ne sont plus que 13 ; sur 1A, on passe de 21 à 9. C’est le prix de l’honnêteté du mot « tendance ». On affiche aussi trend_age_days = depuis combien de jours le secteur est dans son régime actuel. Clé pour suivre les cycles sectoriels :

Lecture cyclique < 15 jours LONG : rotation fraîche, entrée anticipée possible, conviction à confirmer.
15-60 jours LONG : momentum mature, zone de confort, c’est ici qu’on capture la majorité de la perf sectorielle.
60-90 jours LONG : cycle bien installé, commencer à surveiller les signes de retournement.
≥ 90 jours LONG : cycle vieillissant, la bascule FLAT peut arriver à tout moment — stop-loss serré, prêt à pivoter.

6
Filtre tendance S&P 500 — le bouclier ZEN
Ce qu’on fait : toute la mécanique précédente ne sert à rien si le S&P 500 s’effondre (en bear market actions, tous les secteurs cycliques saignent ensemble). Le filtre global : SI S&P 500 > MA200j ET perf_30d > -3% → mode ALPHA (déployé sur top secteurs LONG) SI S&P 500 > MA200j ET perf_30d ≤ -3% → mode CAUTION (prudence, exposition réduite) SINON → mode ZEN (100% cash / bons du Trésor)

PhilosophieEn mode ZEN, peu importe quel secteur caracole en tête du classement — on reste en cash (ou en T-bills / money market). C’est l’anti-FOMO structurel : ne pas exposer le capital au risque actions quand la marée macro est baissière, même si un sous-secteur brille temporairement.

Construction des indices sectoriels — audit complet (v4)

Tout le pipeline est open et reproductible. Code source dans fetch_tradfi.py, caches dans ~/Library/Caches/site_crypto_finance/. Les choix méthodologiques ci-dessous reflètent l’état actuel après 4 itérations majeures (la v4 du 28 avril 2026 a corrigé 3 biais devises critiques détectés en audit : GBp London 100×, double-counting ADR/local, échec FX silencieux).

v4-1
Hygiène devises — 24 monnaies × 13 places, FX par jour, sans biais
La comparaison mcap-weighted entre secteurs n’a aucun sens tant que les prix de toutes les places ne sont pas exprimés dans la même unité (USD). Trois pièges classiques étaient présents et ont été corrigés.

① Bug GBp London (pence vs livre). Yahoo Finance quote la quasi-totalité des actions London Stock Exchange (LSE) en GBp (pence = 1/100 GBP), pas en GBP. Sans normalisation, HSBA.L à 880 pence (= £8.80) était reporté comme £880 → converti en $1118 USD au lieu de $11.85. Toutes les UK étaient 100× trop hautes. if symbol.endswith(‘.L’): price_local = price_local / 100 # GBp → GBP return apply_fx(price_local, ‘GBP’, date) Impact corrigé : Banques Europe, Pétrole & Gaz, Mines, Pharma, Luxe, Conso défensive — tous contenaient des UK leaders (HSBC, Shell, BP, AZN, Glencore, Diageo, Unilever, Reckitt, Burberry…) avec mcap totalement faussées.

② Double-counting ADR / listing local. Une entreprise comme TSMC a deux tickers cotés : TSM (ADR à NYSE) et 2330.TW (action ordinaire Taipei). Si les deux figurent dans le même panier, sa mcap pèse 2× — le panier “AI & Semi” gonflait artificiellement de +$2.1T (mcap réelle TSMC). Une table de dédup interne traite 20 paires connues : TSM, NTES, JD, BABA, BIDU, HMC, TM, SONY, NVO, NVS, AZN, SHEL, BP, UL, GSK, BHP, RIO, PBR, CNI, TCEHY → l’ADR US-listed est silencieusement écarté quand le listing local est aussi présent dans le même thème.

Vérification empiriqueLe total mcap “AI & Semi-conducteurs” est passé de $22.5T à $20.4T après ce fix — soit exactement la mcap TSMC qui était comptée deux fois. Idem dans Auto & EV (Honda HMC + 7267.T), Pharma (NVO×2), Média (NTES + 9999.HK), E-commerce (JD + 9618.HK).


③ Échec FX silencieux corrompant les prix. L’ancien code, en cas de rate-limit Yahoo sur une paire FX (ex: KRWUSD=X), retournait silencieusement le prix en devise locale en le labellant “USD”. Samsung à 222000 KRW apparaissait alors comme “$222 000 USD”. Les nouveaux protections : 1. fetch_fx_rates : 23 devises non-USD batch 2. Per-currency retry 3× avec backoff (8s / 20s / 32s) 3. Fallback cache persistant fx_rates_cache.json (4.5 MB) 4. Hard fail explicite si une devise reste manquante → run abandonné, ancien cache préservé → prévient toute corruption silencieuse

Devises couvertes (24)USD (282 stocks, ref) · EUR (Paris/XETRA/Amsterdam/Madrid/Milan/Helsinki/Bruxelles/Lisbonne/Dublin) · GBP-via-GBp (Londres) · CHF (SIX) · JPY (Tokyo) · CAD (Toronto) · AUD (ASX) · KRW (Seoul) · CNY (Shanghai/Shenzhen) · HKD (Hong Kong) · TWD (Taipei) · INR (NSE/BSE) · SGD (Singapour) · BRL (São Paulo) · MXN (Mexico) · NOK (Oslo) · SEK (Stockholm) · DKK (Copenhague) · AED (Abu Dhabi/Dubaï) · SAR (Tadawul) · MYR (Bursa) · THB (Bangkok) · IDR (Jakarta) · PHP (Manille).

A
Pondération time-varying (mcap dynamique)
Avant (bug v1) : chaque action portait son mcap actuelle comme poids fixe sur toute l’histoire. NVDA → 35% du basket “AI & Semi” en 2014 alors qu’elle ne pesait que 1% à l’époque.

Maintenant : à chaque date t, le poids du stock est weight(t) = price(t) × shares(t). Le panier s’auto-rebalance dynamiquement comme un vrai indice mcap-weighted (S&P 500 style). weight(stock, t) = price(t) × shares_outstanding(t) return_pondéré(t→t+1) = Σ ( weight_i × return_i ) / Σ weight_i index_level(t+1) = index_level(t) × (1 + return_pondéré)

EffetEn 2011, le panier “Big Tech & Électronique” reflète la réalité de l’époque : IBM 12%, MSFT 15%, AAPL 14%, ORCL 8%, INTC 10%, CSCO 5%, NVDA 0.9%. En 2026, il reflète la nouvelle réalité : NVDA 18%, AAPL 15%, GOOGL 15%, MSFT 11%, AMZN 9%.

B
Shares outstanding historiques + détection de splits
Pourquoi : sans donnée historique, shares = current_mcap / current_price est constant — ce qui sous-estime AAPL 2011 de ~40% (rachats) et sur-estime TSLA 2014 (dilutions).

Comment : on appelle yf.Ticker.get_shares_full(start, end) par ticker (rate-limited via threading × 8). On obtient ~quarterly granularité sur 5-15 ans selon le ticker. ~720/740 tickers couverts (les ~20 manquants sont essentiellement des IPOs récents ou des tickers étrangers à API limitée).

Détection des splits : yfinance retourne les shares non split-adjusted (AAPL 4.6B en 2019 → 18.4B post-split-2020). Sans correction, le produit price_split_adj × shares_brutes a un saut artificiel ×4 au split day. heuristique_split = (sh[i+1] / sh[i] >= 1.5) ET (gap_jours <= 60) La condition temporelle filtre les faux positifs (création Class C de GOOGL en 2014, M&A progressifs sur plusieurs trimestres).

Limitations résiduelles2 cas edge : GOOGL (création Class C 2014 = pseudo-split mal classé) et TSLA (multiples émissions secondaires 2014-2020) ont des shares passées légèrement off. Impact sur l’index agrégé minime car ces tickers restent < 20% de leur basket.

C
Dividendes ré-investis (auto_adjust=True)
Avant (v1) : auto_adjust=False donnait des prix split-adjusted mais pas dividend-adjusted. Conséquence : tabac (MO 7%, PM 5% div yield), REITs, Utilities, Pétrole — leur vraie performance totale était sous-estimée de 4-7%/an cumulé. Sur 15 ans, l’écart est massif.

Maintenant : auto_adjust=True. Les prix historiques deviennent total return implicite = ce qu’un détenteur ré-investissant ses dividendes aurait obtenu.

Validation empiriqueAvant le fix, “Tabac & Spiritueux” était hors top 10. Après : top 5 avec rel90 +21.9%. Idem REITs : passe de hors-classement à top 10 (+16.1% rel90). C’est leur vrai signal qui devient visible.

D
FX historique 15 ans + fallback

Avant : seuls 5 ans de taux FX étaient fetchés. Sur les périodes plus anciennes, les prix Samsung (KRW), Toyota (JPY), Vale (BRL), etc. restaient en monnaie locale → leur “mcap” en KRW dominait artificiellement les indices Asie sur 10-15 ans.

Maintenant : period=“max” sur les paires FX → ~16 ans de taux historiques. Pour les dates encore plus anciennes, fallback sur le taux le + ancien dispo (mieux que de garder la monnaie locale). apply_fx(prix_local, devise, ts) : rate = fx_rates[devise][ts] (ou nearest prior date) fallback : oldest available rate return prix_local × rate (en USD)

E
Indices régionaux : seuil de native-update
Bug détecté : les indices régionaux (Japon, ASEAN, etc.) étaient construits via union de toutes les dates de tous les tickers de la région avec forward-fill. Sur jours fériés Tokyo / typhons HK / Golden Week, certaines dates n’avaient que 1-2 tickers natifs avec mise à jour. Résultat : fake daily returns de ~0% qui diluaient massivement la corrélation Asie ↔︎ US/EU.

Fix : on n’émet un point d’index régional que sur les vrais jours de trading (≥30% des tickers OU ≥3 tickers avec mise à jour native, pas forward-filled). if native_count(ts) < max(3, 0.30 × n_tickers): skip

Effet attenduLa corrélation Japon ↔︎ US sur 15A devrait remonter de ~0.10 (artéfact) à ~0.4-0.5 (vrai signal economique : BoJ cycle indépendant, JPY safe-haven, mais corrélation matérielle à long terme).

F
Avertissement constituent overlap (cellules de corrélation)
Quelques tickers appartiennent à ≥ 2 narratifs par nature économique (et non par dual-listing) : MSFT/ORCL/IBM/CSCO dans Big Tech ET Cloud, AMZN dans Big Tech ET E-commerce, GOOGL/META dans Big Tech ET AI Software. Quand deux narratifs partagent des constituents, leur corrélation est partiellement mécanique (mêmes stocks → mêmes mouvements), pas purement économique.

Transparence : dans la matrice de corrélation, le tooltip affiche un warning orange quand deux narratifs partagent au moins 1 ticker : “N tickers partagés — corrélation partiellement mécanique”.

Note importanteL’overlap économique ci-dessus est différent du double-counting ADR/local (TSM + 2330.TW dans la même narrative) qui lui est traité séparément par la dédup automatique de la section v4-1.

G
Profondeur d’historique : 15 ans avec downsampling tiered
Avant : 5 ans daily fixes via yfinance period=“5y”.
Maintenant : period=“max” avec hard cap à 15 ans (HIST_MAX_DAYS = 15 × 365) pour limiter la taille du JSON. Downsampling intelligent par bande temporelle : Derniers 90 jours → daily (tous les points conservés) 90 jours → 2 ans → hebdomadaire (gap min 6 jours) 2 ans → 10 ans → bi-hebdomadaire (gap min 13 jours) 10 ans → 15 ans → tri-hebdomadaire (gap min 20 jours)

Couverture résultante96% des tickers couvrent 5 ans, 86% couvrent 10 ans, 79% couvrent 15 ans complets. Les IPOs récents (Coinbase 2021, ARM 2023, OKLO 2024) commencent à leur date d’introduction.

H
Limitations honnêtes (lecture obligatoire)

1. Survivorship bias non corrigé. Les paniers ne contiennent que les survivants 2026. Manquent : Lehman Brothers, Bear Stearns, Wachovia, Washington Mutual (banques 2008), Yahoo, Sun Microsystems, Nortel, BlackBerry (tech), Time Warner, Compaq. → L’index “Banques US 2008” affiche JPM/WFC en gagnants (qui ont racheté les morts), pas l’effondrement réel.

2. Anachronisme narratif. “AI & Semi 2011” est conceptuellement étrange — pas d’AI à l’époque, juste “Semiconductors”. Idem “Nucléaire & SMR”, “Quantum Computing”, “Space Economy” — narratifs récents (post-2020). Pour ces narratifs, “corrélation 15A” est un objet à lire avec recul.

3. Clip ±30%/bar. Safeguard contre erreurs de données (split mal détecté, prix corrompu) — un mouvement légitime > 30% sur une seule barre se fait clipper. Rare (Reddit-stocks type AMC) mais existe.

4. Timezone Asie. Tokyo ferme à 7h ET, NYSE à 16h ET — la corrélation même-jour mesure du décalé. Vraie corr Japan↔︎US ≈ 0.5-0.6 sur évènements communs, observée ~0.30. Le fix native-update threshold améliore mais ne synchronise pas.

5. Régions à panier étroit. Middle East 12 tickers, LatAm 21, ASEAN 21. Plus dense qu’avant mais toujours sensible aux mouvements individuels (Aramco / Vale / Petrobras / DBS pèsent disproportionnément). C’est l’univers réel disponible via Yahoo, à tolérer.

6. Pas de calendrier de jours fériés des bourses. L’indicateur “Marchés ouverts/fermés” en haut de page utilise une règle simple lun–ven heures locales. Ne tient pas compte de Christmas Day, Thanksgiving, Golden Week JP, Lunar New Year HK/CN, Eid Saudi, etc. → faux positifs rares (le chip apparaît “OUVERT” un 25 décembre). Sans impact sur les indices car les prix utilisés viennent du dernier close réel.

7. Tickers délistés / sans data Yahoo. ~10 tickers absents du cache à un instant donné (CRH.L migré à NYSE, ATLN.SW, NCM.AX, JFC.PS, WALMEX.MX, EAND.AE, EDF.PA…) — pas de corruption, juste des trous. Le code fait passer aux runs suivants une fois Yahoo de nouveau réactif.

I
Reproductibilité — comment auditer toi-même

Pipeline complet : 1. fetch_tradfi.py (launchd, hourly) → fetch_fx_rates(period=“max”) → fetch_stock_histories(period=“max”, auto_adjust=True) → fetch_shares_history (cached 24h) → narrative_stats() pour chaque thème → compute_narrative_index() avec time-varying weights → augment_with_momentum_metrics() : rel_mom_90d, breadth, signal → compute_composite() : score 0.55×rel + 0.225×breadth + 0.225×price 2. tradfi_cache.json + tradfi_cache.js (mirror symlinks vers Desktop) 3. TradFi_Tracker.Rmd → HTML (re-knit manuel) 4. Live override : tradfi_cache.js merge dans NAR_DATA au load

Vérifier la composition d’un panier sur une date donnée : python3 -c ” import json, datetime d = json.load(open(‘~/Library/Caches/site_crypto_finance/tradfi_cache.json’)) sh = json.load(open(‘~/Library/Caches/site_crypto_finance/tradfi_shares_history_cache.json’)) # voir le poids de chaque ticker du panier ‘AI & Semi’ au 2015-01-01 # …“

Caches consultables :
  • tradfi_cache.json (~18 MB) — données complètes embarquées : narratifs dédupliqués, stats, histories prix par ticker (15 ans tiered), spy_longhist.
  • tradfi_history_cache.json (~10 MB) — histories prix bruts pré-embedding (USD-converti, GBp normalisé).
  • tradfi_shares_history_cache.json (~6 MB) — shares outstanding historiques par ticker (post split-adjustment).
  • fx_rates_cache.json (~4.5 MB) — cache FX persistant 23 devises × ~16 ans daily. Fallback critique en cas de rate-limit Yahoo : sans ce cache, un échec FX transitoire corromprait silencieusement tous les prix d’une zone.
  • tradfi.lock — fcntl flock empêchant fetches concurrents (auto-libéré à mort du process).

Logs : /tmp/tradfi.out.log et /tmp/tradfi.err.log — chaque fetch trace le nb de tickers récupérés, splits détectés, fallbacks Stooq, etc.

Build tag console : ouvre la devtools — un message [BUILD] TradFi_Tracker confirme la version chargée. La date de génération du cache est visible dans l’en-tête (badge “MAJ HH:MM”) et dans le timestamp de la barre Live data.

Comment lire une carte secteur — 3 scénarios

Trois situations typiques. Le score seul ne suffit pas — il faut croiser signal + durée + rel-S&P 500 + breadth.

Cas idéal — à privilégier

Score 88 LONG 49j +18% vs S&P Breadth 100%

Signal LONG installé depuis 49 jours → cycle mature, momentum confirmé. Le secteur surperforme le S&P 500 de +18% sur 90j → vrai alpha sectoriel, pas juste beta marché. Breadth à 100% → toutes les actions du panier participent. Conclusion : surpondérer dans l’allocation — situation type Métaux & Mines ou Fintech récemment.

Faux positif — à éviter

Score 74 LONG 5j +2% vs S&P Breadth 44%

Score élevé mais illusion : LONG depuis seulement 5 jours → signal jeune, pas confirmé. Rel-S&P 500 quasi nul → le secteur ne surperforme pas le marché. Breadth à 44% → moins de la moitié des actions participent. Conclusion : attendre confirmation — un bon score isolé n’est pas suffisant.

Cycle vieillissant — sortir

Score 66 FLAT 10j -6% vs S&P Breadth 35%

Secteur fraîchement passé FLAT (10j) après une longue période LONG. Rel-S&P 500 négatif → le secteur sous-performe l’indice. Breadth s’effrite à 35%. Même si le score reste correct par inertie, le momentum est cassé. Conclusion : sortir / ne pas entrer, même si le secteur était leader les mois précédents — la rotation vers un autre thème est enclenchée.

Glossaire des concepts clés
Momentum
Propriété empirique : ce qui monte tend à continuer de monter (et inversement). Anomalie statistique documentée depuis Jegadeesh & Titman (1993). Pas une prédiction magique — un fait observé.
Momentum relatif
Performance d’un actif moins performance du benchmark (ici S&P 500). Isole l’alpha de la beta. +10% absolu pendant que le S&P fait +15% = relatif -5%, sous-performance.
MA50 / MA200
Moyenne mobile sur 50 (ou 200) jours. Un prix au-dessus de sa MA50 = tendance haussière court-moyen terme. Au-dessus de MA200 = tendance longue intacte. Sous les deux = bear market confirmé.
Breadth
Largeur du mouvement : % d’actions d’un panier avec perf positive. Distingue un vrai trend sectoriel (breadth élevée) d’une concentration (breadth basse, 1-2 stocks porteurs).
Mcap-weighted
Pondération par capitalisation boursière. Les grandes entreprises comptent davantage. Empêche qu’une small cap qui fait ×2 fausse le score d’un secteur dominé par des méga-caps.
Percentile-rank
Convertit n’importe quelle valeur en position sur une échelle 0-100 par rapport aux autres. Le secteur #1 reçoit 100, le dernier reçoit 0. Neutralise les unités et les outliers.
Bouclier ZEN
Filtre global sur S&P 500 qui force le passage en 100% cash / bons du Trésor quand l’indice passe sous sa MA200. Évite de jouer du momentum sectoriel en bear market actions.
Trend age
Durée (en jours) du régime LONG ou FLAT actuel d’un secteur. Permet d’évaluer la maturité du cycle sectoriel : frais, mature, ou vieillissant.
Questions fréquentes
Pourquoi le benchmark est le S&P 500 et pas le MSCI World ou le Russell ?

Le S&P 500 est l’indice actions le plus liquide, le plus corrélé aux rotations sectorielles globales, et celui que la plupart des pros utilisent comme référence par défaut. Le MSCI World dilue avec l’Europe/Asie qui ont leurs propres cycles. Le Russell 2000 biaise vers les small caps. Pour comparer avec l’onglet Crypto (où BTC est la référence), le S&P 500 est l’équivalent structurel. On utilise concrètement le ticker SPY (ETF répliquant l’indice, plus liquide que ^GSPC).

Pourquoi 24 secteurs et pas les 11 secteurs GICS standards ?

Les 11 secteurs GICS (Tech, Financials, Energy…) sont trop larges — ils écrasent les rotations intra-secteur (AI vs Software legacy, Banques vs Assurance, Énergie fossile vs propre). Une taxonomie fine permet de capter ces distinctions tout en restant lisible. On a aussi ajouté des thèmes transversaux (Big Tech, Robotique, Cybersécurité) qui ne rentrent pas dans le cadre GICS mais représentent de vrais flux de capitaux.

Pourquoi 90 jours pour le momentum relatif et pas 30 ou 180 ?

La littérature académique (Jegadeesh-Titman, Carhart) utilise classiquement 3-12 mois. 30j est trop court (earnings + bruit macro). 180j est trop lent — les rotations sectorielles durent 2-6 mois, un lookback 180j manquerait les retournements. 90j est le sweet spot : assez long pour filtrer le bruit macro (FOMC, CPI prints), assez court pour capturer les rotations thématiques.

Le score 88 est meilleur que 75, donc j’allocate plus dans le #1 ?

Non, pas directement. Le score est une agrégation utile pour le classement mais ne remplace pas la lecture des 4 sous-composantes. Un score à 88 avec LONG 5j et breadth 45% est moins fiable qu’un 78 avec LONG 45j et breadth 80%. Toujours croiser signal + durée + rel-S&P 500 + breadth avant d’allouer.

Comment sont gérées les actions cotées hors USD (Paris, Londres, Tokyo…) ?

Chaque action est convertie en USD au taux du jour via les FX rates (fetchés en début de pipeline). C’est indispensable car un secteur comme “Luxe” ou “Banques Europe” mélange des cotations EUR/GBP/CHF/USD — sans normalisation FX, les retours ne seraient pas comparables entre eux et le secteur aurait une perf parasitée par les mouvements de devise.

Pourquoi la rebalance est hebdomadaire et pas quotidienne ?

Les rotations sectorielles actions persistent typiquement plusieurs semaines. Une rebalance quotidienne produirait énormément de churn (frais, spread, slippage intraday) sans améliorer l’alpha — les signaux de momentum sectoriel ont une persistence de 3-8 semaines. Hebdo = équilibre entre réactivité (on capte les rotations en quelques jours) et coûts de transaction.

Que se passe-t-il quand un secteur bascule FLAT ?

Le signal FLAT se déclenche quand l’index du secteur passe sous sa MA50 OU que la breadth tombe sous 50%. Règle d’exécution : on sort (ou on n’entre pas), même si le score composite reste élevé par inertie. Le FLAT est l’exit rule mécanique, pas une suggestion. L’objectif est d’éviter d’accompagner un secteur dans son retournement de cycle sectoriel.

Et si je veux un signal encore plus conservateur ?

Durcis les conditions du LONG : au lieu de breadth > 50%, exige breadth ≥ 70% ET rel_mom_90d > 0 ET trend_age ≥ 15j. Le nombre de secteurs LONG baissera (typiquement 4-7 au lieu de 10-15), mais la fiabilité des signaux augmentera mécaniquement. Classique arbitrage recall vs précision.

Paramètres clés
Fréquence snapshot
Hebdo
Rebalance hebdomadaire, cohérente avec les rotations sectorielles observables sur 3-8 semaines (Cloud↔︎AI, Value↔︎Growth, Défensif↔︎Cyclique).
Unité d’allocation
Secteur
Allocation sur secteurs (baskets d’actions), pas sur actions individuelles. Évite le risque idiosyncratique (earnings miss isolé) tout en capturant le thème.
Pondération score
55/22.5/22.5
55% rel-S&P 500 90j · 22.5% breadth · 22.5% prix court. News désactivé (v2). Cœur du signal = surperformance sur S&P 500, pas performance brute.
Trend filter global
S&P 500 / MA200
Sous MA200, bascule ZEN (100% cash / T-bills). Anti-FOMO structurel : pas d’exposition actions en bear market macro.
Profondeur historique
15 ans
Histories Yahoo Finance (USD-adjusted), fallback Stooq. Downsampling tiered : daily 0-2A, hebdo 2-10A, tri-hebdo 10-15A. SPY benchmark sur 33 ans pour les régimes ZEN/ALPHA.
Univers géographique
Global
NYSE, NASDAQ, LSE, Euronext Paris, XETRA, SIX Swiss, Tokyo, Hong Kong, NSE India, Amsterdam, Madrid, Milan, Copenhagen — normalisé USD.
Survolez pour les détails · Échap ou clic extérieur pour fermer