feat: calendrier économique TE+Investing, OIS SNB, yields 10Y, taux directeurs corrects

Calendrier économique
- Nouvelles sources : TE HTML scraping (483 events/2 sem.) + Investing.com en co-primaires
- Dédupe déterministe par clé currency+category+date (±1j pour policy_rate)
- Filtre catégorie "other", filtre discours CB (fix doublon TE vs Investing)
- CHF/Switzerland via page séparée TE (hors G20)
- Fenêtre 14 jours avec ?startDate=&endDate= passés à TE
- ForexFactory+FRED en secours uniquement si les deux scrapers tombent à vide

Probabilités OIS
- rateprobability.com (7 CBs : FED/ECB/BOJ/BOE/BOC/RBA/RBNZ)
- investinglive.com (Dellamotta) : scan URL-date 14 jours → couvre SNB/CHF manquant
- SNB : 3% probabilité hausse au 19 juin 2026 (source : IL article 2026-05-29)
- rate_expectations.json MAJ : RBNZ 79% hike (corrigé depuis 70% no-change stale)
- Dédup ±1 jour pour policy_rate (fix doublon SNB TE-18/06 vs IL-19/06)

Taux directeurs
- USD : scrapeTeRate() = 3.75% (fin midpoint FRED 3.625%)
- AUD prev : 4.10% (corrigé depuis 4.60%)
- NZD/CHF/JPY/CAD : cohérents avec TE officiel

Yields 10Y souverains
- Nouvelle lib lib/tebonds.ts : scrape TE bonds, données du jour, cache 1h
- Remplace FRED IRLTLT01XXM156N mensuel (JPY/CHF/AUD/NZD avaient 1 mois de retard)
- 8 devises + spread vs USD calculé automatiquement
- /api/yields et /api/drivers utilisent la même lib

Drivers globaux
- BTC : ticker/price Binance (plus précis que 24hr lastPrice)
- HY Spread cache : 86400s → 3600s (données FRED du jour)
- DriversBar : suppression affichage direct US 10Y, tooltip Crb 2-10 affiche US10Y+US2Y

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Capucine Gest
2026-06-01 23:16:18 +02:00
co-authored by Claude Sonnet 4.6
parent 3a39904ce5
commit eb416be780
14 changed files with 2614 additions and 244 deletions
+36 -11
View File
@@ -129,7 +129,7 @@ export default function DriversBar({ drivers }: Props) {
sp500, sp500ChangePct,
btc, btcChange24h,
hySpread, igSpread,
us10y, curveSlope,
us10y, us2y, curveSlope,
gold, goldDelta,
silver, silverDelta,
brent, brentDelta,
@@ -158,9 +158,18 @@ export default function DriversBar({ drivers }: Props) {
<div className="flex items-start gap-4 overflow-x-auto pb-0.5">
{/* Sentiment / Risk-On */}
<M label="VIX" value={vix} dec={1} delta={vixDelta} deltaDec={1} />
<M label="S&P 500" value={sp500} dec={0} delta={sp500ChangePct} deltaPct deltaDec={2} />
<M label="Bitcoin" value={btc} dec={0} unit=" $" delta={btcChange24h} deltaPct deltaDec={2} />
<M
label="VIX" value={vix} dec={1} delta={vixDelta} deltaDec={1}
tooltip="Delta = clôture actuelle clôture précédente issue de Yahoo Finance (métrique intraday/close de session)."
/>
<M
label="S&P 500" value={sp500} dec={0} delta={sp500ChangePct} deltaPct deltaDec={2}
tooltip="Changement = clôture actuelle clôture précédente de Yahoo Finance. Le % est calculé sur la clôture précédente."
/>
<M
label="Bitcoin" value={btc} dec={0} unit=" $" delta={btcChange24h} deltaPct deltaDec={2}
tooltip="Variation 24h issue de Binance / CoinGecko via le ticker 24h (priceChangePercent)."
/>
<VSep />
@@ -177,20 +186,36 @@ export default function DriversBar({ drivers }: Props) {
<VSep />
{/* Taux & FX */}
<M label="DXY" value={dxy} dec={2} />
<M label="US 10Y" value={us10y} dec={2} unit="%" />
<M
label="DXY" value={dxy} dec={2}
delta={(drivers as DriverData & { dxyDelta?: number | null }).dxyDelta ?? null}
deltaDec={2}
tooltip="ICE Dollar Index Futures (DX=F) via Yahoo Finance — temps réel, cache 5 min. Delta = clôture actuelle clôture précédente."
/>
<M
label="Crb 2-10" value={curveSlope} dec={0} unit=" bps"
tooltip="Spread US 10Y US 2Y. Positif = courbe normale. Négatif = courbe inversée (signal récessif historiquement, se matérialise ~1218 mois après)."
tooltip={`Spread US 10Y US 2Y. Positif = courbe normale. Négatif = courbe inversée (signal récessif historiquement).\nUS 10Y: ${us10y != null ? us10y.toFixed(4) + "%" : "N/A"} | US 2Y: ${us2y != null ? us2y.toFixed(2) + "%" : "N/A"}`}
/>
<VSep />
{/* Commodités */}
<M label="Or $/oz" value={gold} dec={0} delta={goldDelta} deltaDec={1} />
<M label="Argent $/oz" value={silver} dec={2} delta={silverDelta} deltaDec={2} />
<M label="Brent $/b" value={brent} dec={1} delta={brentDelta} deltaDec={1} />
<M label="WTI $/b" value={wti} dec={1} delta={wtiDelta} deltaDec={1} />
<M
label="Or $/oz" value={gold} dec={0} delta={goldDelta} deltaDec={1}
tooltip="Delta intraday = close open issue de Stooq (métaux précieux)."
/>
<M
label="Argent $/oz" value={silver} dec={2} delta={silverDelta} deltaDec={2}
tooltip="Delta intraday = close open issue de Stooq (métaux précieux)."
/>
<M
label="Brent $/b" value={brent} dec={1} delta={brentDelta} deltaDec={1}
tooltip="Delta intraday = close open issue de Stooq (pétrole Brent)."
/>
<M
label="WTI $/b" value={wti} dec={1} delta={wtiDelta} deltaDec={1}
tooltip="Delta intraday = close open issue de Stooq (pétrole WTI)."
/>
</div>
</div>