diff --git a/components/CurrencyCard.tsx b/components/CurrencyCard.tsx index 1ba3c62..aaea10e 100644 --- a/components/CurrencyCard.tsx +++ b/components/CurrencyCard.tsx @@ -739,10 +739,11 @@ function OISEnhancedBlock({ ratePath, syncChartTab, onChartTabChange }: { )} - {/* Chart 3 — Probabilités : ligne de probMovePct par réunion (style original) */} + {/* Chart 3 — Probabilités : LineChart probMovePct + liste réunions avec taux prévu */} {chartTab === "scenarios" && (
- + {/* Graphique probabilité de move par réunion */} + ({ label: m.label, prob: m.probMovePct, isCut: m.probIsCut, impliedRate: m.impliedRate }))} margin={{ top: 5, right: 5, left: -20, bottom: 0 }} @@ -755,30 +756,25 @@ function OISEnhancedBlock({ ratePath, syncChartTab, onChartTabChange }: { { if (!payload?.length) return null; - const v = payload[0]?.value as number; - const m = chartMeetings.find(m => m.label === label); + const v = payload[0]?.value as number; + const m = chartMeetings.find(m => m.label === label); return (

{label}

-

- {v.toFixed(0)}% {m?.probIsCut ? "Cut" : "Hike"} -

-

- Implicite : {m?.impliedRate.toFixed(2)}% -

+

Prob : {v.toFixed(0)}% {m?.probIsCut ? "Cut" : "Hike"}

+

Implicite : {m?.impliedRate.toFixed(2)}%

); }} />
- {/* Résumé : pic + bps fin an + flèches vs sem. préc. */} + + {/* Résumé : pic + bps fin an + flèches IL vs sem. préc. */} {ratePath.peakMeeting && ( <>
- - Pic : {ratePath.peakMeeting.label} - + Pic : {ratePath.peakMeeting.label} {ratePath.peakMeeting.probMovePct.toFixed(0)}% {ratePath.peakMeeting.probIsCut ? "Cut" : "Hike"} @@ -799,6 +795,36 @@ function OISEnhancedBlock({ ratePath, syncChartTab, onChartTabChange }: { )} )} + + {/* Liste des réunions : date | barre taux implicite | taux | proba */} +
+ {(() => { + const maxR2 = Math.max(...scenariosData.map(d => d.rate), currentRate); + const minR2 = Math.min(...scenariosData.map(d => d.rate), currentRate) - 0.05; + const range = maxR2 - minR2 || 0.25; + return scenariosData.map(d => { + const barW = Math.max(5, Math.min(100, ((d.rate - minR2) / range) * 100)); + const isDown = d.rate < currentRate - 0.001; + const isUp = d.rate > currentRate + 0.001; + const barCl = isDown ? "bg-sky-500/70" : isUp ? "bg-red-500/70" : "bg-amber-500/60"; + const isPeak = ratePath.peakMeeting?.dateIso === d.dateIso; + return ( +
+ + {d.label} + +
+
+
+ {d.rate.toFixed(2)}% + {d.prob > 0 && ( + {d.prob.toFixed(0)}% + )} +
+ ); + }); + })()} +
)}