Files
forex-dashboard/lib/types.ts
T
caty21 48d3b9c473 feat(COT/Idees): redesign COT chart + NC group + editeur riche IdeesTab
COT :
- Ajoute groupe NC (Non-Commercial Legacy) via Socrata API CFTC
- Graphique bidirectionnel (barres avec gradient, zéro centré, track complet)
- Barre L/S split sous chaque groupe, valeur nette + %L empilés
- Corrige verdict bug : amDominates vérifié avant hfIsShort
- Supprime 'k contrats', ajoute légende ΔL/ΔS/ΔNet

IdeesTab :
- Réécriture NotePane : contentEditable Notion-like avec images inline
- Toolbar riche : gras, italique, souligné, listes, alignement
- Redimensionnement image inline (25/40/60/80/100%)
- Archives : affichage complet screenshot + texte, restauration vers slot actif

Sentiment DXM :
- Affichage brut paire par paire (Myfxbook) pour vérification directe
- SentimentPair type + pairs[] dans SentimentEntry

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 23:33:00 +02:00

196 lines
5.6 KiB
TypeScript

export type Currency = "USD" | "EUR" | "GBP" | "JPY" | "CHF" | "CAD" | "AUD" | "NZD";
export type BiasPhase = "tightening" | "hawkish_pause" | "easing" | "dovish_pause" | "transition";
export interface Indicator {
value: number | null;
prev: number | null;
consensus: number | null;
surprise: number | null;
trend: "up" | "down" | "flat" | null;
lastUpdated: string;
}
export interface RateExpectation {
cb: string;
bps: number;
prob_pct: number;
prob_desc: string;
direction: "cut" | "hike";
}
export interface CurrencyIndicators {
policyRate: Indicator;
cpiCore: Indicator;
pmiMfg: Indicator;
pmiServices: Indicator;
gdp: Indicator;
retailSales: Indicator;
unemployment: Indicator;
employment: Indicator;
}
export interface COTData {
netContracts: number;
deltaWoW: number;
percentile52w: number;
signal: "bullish" | "bearish" | "contrarian_bullish" | "contrarian_bearish" | "neutral";
history: { weekEnding: string; net: number }[];
}
export interface RetailSentimentPair {
pair: string;
longPct: number;
shortPct: number;
change24h: number;
source: string;
signal: "contrarian_bearish" | "contrarian_bullish" | "neutral";
}
export interface STIRData {
instrument: string;
impliedRates: { tenor: string; rate: number }[];
cutsHikes12M: number;
deltaWoW: number;
signal: "bullish" | "bearish" | "neutral";
lastUpdated: string;
}
export interface Bond10YData {
yield: number;
deltaWoW_bps: number;
spreadVsUST_bps: number | null;
deltaSpreadWoW_bps: number | null;
inverted: boolean;
signal: "bullish" | "bearish" | "neutral";
lastUpdated: string;
}
export interface DivergenceEvent {
type: string;
intensity: 1 | 2 | 3;
detectedAt: string;
persisting: boolean;
persistingDays: number;
}
export interface CurrencyData {
currency: Currency;
name: string;
flag: string;
centralBank: string;
phase: BiasPhase;
indicators: CurrencyIndicators;
score: {
macro: number;
drivers: number;
divergence: number;
};
cot: COTData | null;
retailSentiment: {
pairs: RetailSentimentPair[];
aggregatedLongPct: number;
aggregatedSignal: RetailSentimentPair["signal"];
} | null;
stir: STIRData | null;
bond10Y: Bond10YData | null;
divergences: {
score: number;
active: DivergenceEvent[];
};
rateExpectations: RateExpectation | null;
lastUpdated: string;
}
export interface DriverData {
// Sentiment / Risk-On
vix: number | null;
vixDelta: number | null; // pts vs séance précédente
sp500: number | null; // prix SPY (ETF S&P 500)
sp500Change: number | null; // pts vs clôture j-1
sp500ChangePct: number | null; // % vs clôture j-1
btc: number | null; // BTC/USD
btcChange24h: number | null; // % variation 24h (legacy)
btcDeltaPct: number | null; // % vs clôture J-1 (Business Insider)
// Crédit
hySpread: number | null;
igSpread: number | null;
// Taux & FX
dxy: number | null;
dxyDelta: number | null; // pts vs clôture précédente (Yahoo Finance DX=F)
us10y: number | null;
us2y: number | null;
curveSlope: number | null;
// Commodités (avec delta vs session précédente)
gold: number | null;
goldDelta: number | null;
goldDeltaPct: number | null;
silver: number | null;
silverDelta: number | null;
silverDeltaPct: number | null;
brent: number | null;
brentDelta: number | null;
brentDeltaPct: number | null;
wti: number | null;
wtiDelta: number | null;
wtiDeltaPct: number | null;
// Compat
copper: number | null;
}
export interface FXRates {
[pair: string]: number;
timestamp: number;
}
export interface SentimentPair {
name: string; // ex: "EURUSD"
longPct: number; // % retail long SUR LA PAIRE (pas la devise)
shortPct: number;
longIsBaseLong: boolean; // si true, long paire = long devise affichée
}
export interface SentimentEntry {
longPct: number; // agrégé pondéré (gardé pour les signaux existants)
shortPct: number;
pair: string;
pairs: SentimentPair[]; // données brutes paire par paire
}
export type MacroSection = "all" | "inflation" | "pmi" | "employment" | "gdp" | "policy";
export interface CotEntry {
// HF — Leveraged Money (hedge funds / CTAs — spéculation directionnelle)
net: number; // longs - shorts
hfLongs: number; // contrats long bruts
hfShorts: number; // contrats short bruts
longPct: number; // % longs / total HF
shortPct: number; // % shorts / total HF
totalLev: number; // total contrats HF
// AM — Asset Manager (fonds pension / souverains — hedging institutionnel)
amNet: number;
amLongs: number;
amShorts: number;
amLongPct: number; // % longs / total AM
amTotal: number;
// NC — Non-Commercial Legacy (grands spéculateurs — rapport COT classique CFTC)
ncNet: number;
ncLongs: number;
ncShorts: number;
ncLongPct: number; // % longs / total NC
ncTotal: number;
// Δ semaine précédente (null si pas de données J-7)
netDelta: number | null; // Δ net HF
longsDelta: number | null; // Δ longs HF
shortsDelta: number | null; // Δ shorts HF
amNetDelta: number | null; // Δ net AM
amLongsDelta: number | null; // Δ longs AM
amShortsDelta: number | null; // Δ shorts AM
ncNetDelta: number | null; // Δ net NC
ncLongsDelta: number | null; // Δ longs NC
ncShortsDelta: number | null; // Δ shorts NC
// Métadonnées
weekDate: string;
prevWeekDate: string | null;
}