From 05ee909ee49ad2cea51b0af72a80d360198ac2de Mon Sep 17 00:00:00 2001 From: OpenSquared Date: Fri, 3 Jul 2026 13:27:09 +0200 Subject: [PATCH] feat: instrument model --- frontend/src/pages/InstrumentModels.tsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/InstrumentModels.tsx b/frontend/src/pages/InstrumentModels.tsx index e291169..799ee11 100644 --- a/frontend/src/pages/InstrumentModels.tsx +++ b/frontend/src/pages/InstrumentModels.tsx @@ -1376,7 +1376,17 @@ function TimelineView({ instrument }: { instrument: string }) { const r = await api.get( `/instrument-models/${instrument}/calendar-events?days_back=${daysBack}&days_forward=90` ) - const imported: VirtualEventForm[] = r.data.map((ev, i) => ({ + // Déduplique par (date, category) — garde le plus fort en valeur absolue + // évite de cumuler NFP + Non-Farm Payrolls qui sont le même release + const seen = new Map() + for (const ev of r.data) { + const key = `${ev.date}_${ev.currency}_${ev.category}` + const prev = seen.get(key) + if (!prev || Math.abs(ev.estimated_pips) > Math.abs(prev.estimated_pips)) { + seen.set(key, ev) + } + } + const imported: VirtualEventForm[] = [...seen.values()].map((ev, i) => ({ id: `ff_${ev.date}_${ev.currency}_${i}`, date: ev.date, category: ev.category, @@ -1423,8 +1433,8 @@ function TimelineView({ instrument }: { instrument: string }) { category: 'unclassified', pips: bias, label: 'Guidance macro', - absorption_days: simLen, - rise_days: 0, + absorption_days: 1, // quasi-null decay à la fin + rise_days: simLen, // monte progressivement sur toute la fenêtre plateau_days: 0, decay_type: 'linear', }, ...prev]