import type { BacktestResult } from '../types/backtest.types'; interface ExtendedMetrics { // Core metrics totalReturn?: number; sharpeRatio?: number; maxDrawdown?: number; winRate?: number; totalProfit?: number; profitFactor?: number; totalTrades?: number; avgWin?: number; avgLoss?: number; expectancy?: number; sortinoRatio?: number; calmarRatio?: number; profitableTrades?: number; // Extended metrics from orchestrator annualizedReturn?: number; volatility?: number; avgHoldingPeriod?: number; maxConsecutiveLosses?: number; maxConsecutiveWins?: number; payoffRatio?: number; largestWin?: number; largestLoss?: number; avgWinLoss?: number; skewness?: number; kurtosis?: number; tailRatio?: number; kellyFraction?: number; informationRatio?: number; avgTradesPerDay?: number; } interface CompactPerformanceMetricsProps { result: any | null; isLoading: boolean; } export function CompactPerformanceMetrics({ result, isLoading }: CompactPerformanceMetricsProps) { if (isLoading || !result) { return null; } const metrics = result.metrics as ExtendedMetrics; const analytics = result.analytics || {}; // Merge metrics from both sources const allMetrics = { ...metrics, ...analytics, // Override with metrics values if they exist ...metrics }; // Calculate totalProfit if not provided const totalProfit = allMetrics.totalProfit ?? (allMetrics.totalReturn && result.config?.initialCapital ? allMetrics.totalReturn * result.config.initialCapital : undefined); const formatValue = (value: number | undefined, format: 'percent' | 'number' | 'currency', decimals = 2) => { if (value === undefined || value === null) return '-'; switch (format) { case 'percent': return `${(value * 100).toFixed(decimals)}%`; case 'currency': const prefix = value < 0 ? '-$' : '$'; return `${prefix}${Math.abs(value).toFixed(decimals)}`; case 'number': return value.toFixed(decimals); } }; const getColorClass = (value: number | undefined, thresholds: { good: number; warning?: number }) => { if (value === undefined || value === null) return 'text-text-secondary'; if (thresholds.warning !== undefined) { if (value >= thresholds.good) return 'text-success'; if (value >= thresholds.warning) return 'text-warning'; return 'text-error'; } return value >= thresholds.good ? 'text-success' : 'text-error'; }; return (