Marchés
Synthèse temps réel des 39 thèmes sectoriels mondiaux — régime de marché, leaders, retardataires et force relative vs S&P 500.
👇 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.
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.
À 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.
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.
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.
À 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.
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.
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.
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.
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.
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.
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.
Paires avec corrélation > 0.75 = quasi-équivalentes : les détenir ensemble = pari concentré déguisé.
Paires avec corrélation < 0 = se compensent dans les drawdowns. Diversification authentique.
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é.
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.
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.
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].
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.
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.
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.
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).
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.
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.
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.
Les données brutes passent par 7 étapes pour devenir un classement actionnable. Chaque étape est explicitée 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.
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.
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).
É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.
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.
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.
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.
À 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.
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.
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.
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).
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).
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).
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%.
shares =
current_mcap / current_price est constant — ce qui sous-estime
AAPL 2011 de ~40% (rachats) et sur-estime TSLA 2014 (dilutions).
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). 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.
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. 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.
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)
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).
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.
period=“5y”.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.
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.
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.
Trois situations typiques. Le score seul ne suffit pas — il faut croiser signal + durée + rel-S&P 500 + breadth.
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.
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.
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.
+10%
absolu pendant que le S&P fait +15% = relatif
-5%, sous-performance.
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).
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.
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.
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.
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.
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.
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.
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.