---
id: "RF-TRD-008"
title: "Métricas y Estadísticas"
type: "Requirement"
status: "Done"
priority: "Alta"
epic: "OQI-003"
project: "trading-platform"
version: "1.0.0"
created_date: "2025-12-05"
updated_date: "2026-01-04"
---

# RF-TRD-008: Métricas y Estadísticas

**Versión:** 1.0.0
**Fecha:** 2025-12-05
**Épica:** OQI-003 - Trading y Charts
**Prioridad:** P2
**Story Points:** 8

---

## Descripción

El sistema debe proporcionar un dashboard completo de métricas y estadísticas de trading que permita a los usuarios evaluar su rendimiento, identificar fortalezas y debilidades, y tomar decisiones informadas para mejorar sus estrategias.

---

## Requisitos Funcionales

### RF-TRD-008.1: Dashboard Principal

El sistema debe mostrar un dashboard con secciones:

**1. Performance Overview (Resumen de rendimiento)**
**2. Win Rate Analysis (Análisis de tasa de acierto)**
**3. Risk Metrics (Métricas de riesgo)**
**4. Time Analysis (Análisis temporal)**
**5. Symbol Performance (Rendimiento por símbolo)**
**6. Strategy Analysis (Análisis de estrategias)**

### RF-TRD-008.2: Performance Overview

Métricas principales:

| Métrica | Descripción | Cálculo |
|---------|-------------|---------|
| Total PnL | Ganancia/pérdida total | Suma de todos los PnL realizados |
| Total PnL % | Porcentaje de ganancia | (Total PnL / Balance inicial) × 100 |
| Total Trades | Número de trades | Count de trades cerrados |
| Win Rate | Tasa de acierto | (Winning trades / Total trades) × 100 |
| Profit Factor | Factor de beneficio | Gross profit / Gross loss |
| Sharpe Ratio | Rendimiento ajustado por riesgo | (Avg return - Risk free) / Std dev |
| Max Drawdown | Pérdida máxima desde pico | Max (Peak - Trough) |
| Current Streak | Racha actual | Victorias o derrotas consecutivas |

**Visualización:**
- Gráfico de equity curve (evolución del balance)
- Comparación vs Buy & Hold de BTC
- Heatmap de rendimiento mensual

### RF-TRD-008.3: Win Rate Analysis

Desglose detallado:

```typescript
interface WinRateAnalysis {
  overall: {
    winRate: number;
    winningTrades: number;
    losingTrades: number;
    breakEvenTrades: number;
  };

  bySymbol: {
    symbol: string;
    winRate: number;
    trades: number;
  }[];

  byTimeOfDay: {
    hour: number;
    winRate: number;
    trades: number;
  }[];

  byDayOfWeek: {
    day: string;
    winRate: number;
    trades: number;
  }[];

  byDuration: {
    range: string;  // "< 1h", "1-4h", "4-24h", "> 24h"
    winRate: number;
    trades: number;
  }[];
}
```

**Visualizaciones:**
- Gráfico de barras: Win rate por símbolo
- Heatmap: Win rate por hora del día y día de semana
- Distribución: Win rate por duración de trade

### RF-TRD-008.4: Risk Metrics

Métricas de gestión de riesgo:

| Métrica | Descripción | Target |
|---------|-------------|--------|
| Avg Risk per Trade | Riesgo promedio por trade | < 2% del balance |
| Max Risk per Trade | Riesgo máximo tomado | < 5% del balance |
| Risk/Reward Ratio | Ratio riesgo/recompensa | > 1:2 |
| Kelly Criterion | Tamaño óptimo de posición | Calculado |
| Consecutive Losses | Pérdidas máximas seguidas | Monitorear |
| Recovery Factor | Capacidad de recuperación | PnL / Max Drawdown |
| Exposure | Exposición total al mercado | < 80% del balance |

**Cálculos específicos:**

```typescript
interface RiskMetrics {
  avgRiskPerTrade: number;        // Avg (entry - stopLoss) × quantity
  maxRiskPerTrade: number;        // Max riesgo tomado
  avgRiskRewardRatio: number;     // Avg (TP - entry) / (entry - SL)
  kellyCriterion: number;         // (Win% × AvgWin - Loss% × AvgLoss) / AvgWin
  maxConsecutiveLosses: number;   // Máximo de pérdidas seguidas
  maxConsecutiveWins: number;     // Máximo de victorias seguidas
  recoveryFactor: number;         // Total PnL / Max Drawdown
  currentExposure: number;        // Suma de margin usado / balance
}
```

### RF-TRD-008.5: Time Analysis

Análisis temporal del trading:

**Horarios de trading:**
- Trades por hora del día (histogram)
- Performance por hora del día
- Mejores y peores horas

**Días de la semana:**
- Trades por día de semana
- Performance por día
- Mejores y peores días

**Duración de trades:**
- Distribución de duración
- Correlación duración vs PnL
- Trades más rápidos vs más lentos

**Tendencias temporales:**
- Win rate tendencia (última semana, mes, trimestre)
- PnL tendencia
- Volumen de trading tendencia

### RF-TRD-008.6: Symbol Performance

Análisis por símbolo:

| Símbolo | Trades | Win Rate | Total PnL | Avg PnL | Best | Worst |
|---------|--------|----------|-----------|---------|------|-------|
| BTCUSDT | 45 | 62.2% | +$1,234 | +$27.42 | +$456 | -$234 |
| ETHUSDT | 30 | 56.7% | +$567 | +$18.90 | +$234 | -$156 |
| BNBUSDT | 20 | 45.0% | -$123 | -$6.15 | +$89 | -$178 |

**Métricas adicionales por símbolo:**
- Mejor racha de victorias
- Peor racha de derrotas
- Duración promedio
- Volumen total operado
- Sharpe ratio individual
- Beta (correlación con BTC)

### RF-TRD-008.7: Strategy Analysis

Para usuarios avanzados con tags de estrategia:

```typescript
interface StrategyPerformance {
  strategyTag: string;
  trades: number;
  winRate: number;
  totalPnl: number;
  avgPnl: number;
  profitFactor: number;
  sharpeRatio: number;
  maxDrawdown: number;
}
```

**Comparación de estrategias:**
- Tabla comparativa de todas las estrategias
- Mejor estrategia por métrica
- Evolución de cada estrategia en el tiempo

### RF-TRD-008.8: Advanced Analytics

Métricas avanzadas:

**Calidad de ejecución:**
- Slippage promedio vs esperado
- Fill rate de órdenes limit
- Tiempo promedio de ejecución

**Eficiencia:**
- Efficiency promedio (PnL / MFE)
- % de trades que alcanzaron MFE antes de cerrar
- % de trades cerrados prematuramente

**Psicología de trading:**
- Revenge trading detection (trades después de pérdidas)
- Overtrading detection (muchos trades seguidos)
- FOMO detection (entries en picos de precio)

### RF-TRD-008.9: Comparaciones y Benchmarks

El sistema debe permitir comparar:

**Con uno mismo:**
- Rendimiento actual vs último mes
- Rendimiento actual vs mejor mes
- Métricas actuales vs promedio histórico

**Con mercado:**
- PnL vs Buy & Hold BTC
- PnL vs Buy & Hold ETH
- Sharpe ratio vs mercado

**Visualización:**
- Gráficos de líneas comparativos
- Tablas de métricas lado a lado
- % de diferencia destacado

### RF-TRD-008.10: Filtros Temporales

Todas las métricas deben calcularse para:
- Hoy
- Última semana
- Último mes
- Últimos 3 meses
- Últimos 6 meses
- Último año
- Todo el tiempo
- Rango personalizado

### RF-TRD-008.11: Exportación de Reportes

El sistema debe permitir exportar:

**PDF Report:**
- Resumen ejecutivo
- Gráficos principales
- Tablas de métricas
- Recommendations

**Excel Spreadsheet:**
- Múltiples hojas con métricas
- Datos raw para análisis custom
- Gráficos y tablas dinámicas

**JSON:**
- Todas las métricas en formato estructurado
- Para análisis programático avanzado

---

## Datos de Salida

### Dashboard Completo

```typescript
interface TradingDashboard {
  performance: PerformanceMetrics;
  winRate: WinRateAnalysis;
  risk: RiskMetrics;
  time: TimeAnalysis;
  symbols: SymbolPerformance[];
  strategies: StrategyPerformance[];
  advanced: AdvancedAnalytics;
  comparison: ComparisonMetrics;
}

interface PerformanceMetrics {
  totalPnl: number;
  totalPnlPercent: number;
  totalTrades: number;
  winRate: number;
  profitFactor: number;
  sharpeRatio: number;
  maxDrawdown: number;
  maxDrawdownPercent: number;
  currentStreak: {
    type: 'winning' | 'losing';
    count: number;
  };
  equityCurve: {
    date: string;
    balance: number;
    pnl: number;
  }[];
}

interface AdvancedAnalytics {
  avgEfficiency: number;
  avgSlippage: number;
  limitFillRate: number;
  avgExecutionTime: number;

  // Detecciones
  revengeTradingScore: number;  // 0-100
  overtradingScore: number;     // 0-100
  fomoScore: number;            // 0-100

  // Recomendaciones
  recommendations: string[];
}
```

---

## Reglas de Negocio

1. **Cálculos:**
   - Todas las métricas se calculan en tiempo real
   - Caché de métricas pesadas por 5 minutos
   - Recalcular al cerrar nuevo trade

2. **Mínimos:**
   - Requiere mínimo 10 trades para métricas confiables
   - Sharpe ratio requiere mínimo 30 trades
   - Comparaciones requieren datos de ambos períodos

3. **Valores por defecto:**
   - Risk-free rate: 4% anual (para Sharpe)
   - Período por defecto: Último mes
   - Min trades para mostrar símbolo: 5

4. **Privacidad:**
   - Solo el usuario ve sus métricas
   - No se comparten métricas entre usuarios (MVP)
   - Leaderboard opcional en futuro

---

## Criterios de Aceptación

```gherkin
Escenario: Usuario ve dashboard de métricas
  DADO que el usuario tiene 50 trades cerrados
  CUANDO accede al dashboard de métricas
  ENTONCES ve todas las secciones principales
  Y todas las métricas están calculadas
  Y los gráficos se renderizan correctamente

Escenario: Equity curve muestra evolución
  DADO que el usuario tiene balance inicial $10,000
  Y realizó 30 trades con balance final $11,500
  CUANDO ve la equity curve
  ENTONCES el gráfico empieza en $10,000
  Y termina en $11,500
  Y muestra cada trade como punto
  Y se puede ver la línea de Buy & Hold BTC comparativa

Escenario: Win rate por símbolo
  DADO que el usuario operó 3 símbolos
  CUANDO ve análisis por símbolo
  ENTONCES muestra tabla ordenada por PnL
  Y cada símbolo tiene win rate calculado
  Y se destacan mejores y peores símbolos

Escenario: Detección de overtrading
  DADO que el usuario hizo 20 trades en 1 hora
  CUANDO se calculan analytics avanzadas
  ENTONCES overtrading score es alto (> 70)
  Y aparece recomendación "Considere reducir frecuencia de trading"

Escenario: Exportar reporte PDF
  DADO que el usuario está en dashboard
  CUANDO hace click en "Exportar PDF"
  ENTONCES se genera PDF con todas las métricas
  Y incluye gráficos principales
  Y tiene formato profesional

Escenario: Filtro temporal afecta métricas
  DADO que el usuario selecciona "Última semana"
  CUANDO las métricas se recalculan
  ENTONCES solo considera trades de últimos 7 días
  Y equity curve muestra solo ese período
  Y comparación es vs semana anterior
```

---

## Interfaz de Usuario

```
┌─────────────────────────────────────────────────────────┐
│              TRADING ANALYTICS DASHBOARD                │
├─────────────────────────────────────────────────────────┤
│  Period: [Last Month ▼]                  [Export PDF ▼] │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │         PERFORMANCE OVERVIEW                    │   │
│  ├─────────────────────────────────────────────────┤   │
│  │  Total PnL        Win Rate       Profit Factor  │   │
│  │  +$3,456 (34%)      58.6%           2.45        │   │
│  │                                                 │   │
│  │  Sharpe Ratio    Max Drawdown    Total Trades  │   │
│  │      1.85         -$456 (4.5%)       145        │   │
│  │                                                 │   │
│  │  [Equity Curve Chart]                           │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  ┌──────────────────────┐ ┌──────────────────────────┐ │
│  │  WIN RATE ANALYSIS   │ │   RISK METRICS           │ │
│  ├──────────────────────┤ ├──────────────────────────┤ │
│  │  Overall: 58.6%      │ │  Avg Risk: 1.8%          │ │
│  │  By Symbol:          │ │  Max Risk: 4.2%          │ │
│  │   BTC: 62%           │ │  R:R Ratio: 1:2.3        │ │
│  │   ETH: 57%           │ │  Kelly: 2.4%             │ │
│  │   BNB: 45%           │ │  Max DD: -4.5%           │ │
│  │                      │ │                          │ │
│  │  [Win Rate Chart]    │ │  [Risk Distribution]     │ │
│  └──────────────────────┘ └──────────────────────────┘ │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │         SYMBOL PERFORMANCE                      │   │
│  ├─────────────────────────────────────────────────┤   │
│  │  Symbol │Trades│Win Rate│ PnL   │Avg PnL│Best │   │
│  │─────────┼──────┼────────┼───────┼───────┼─────│   │
│  │  BTC    │  45  │  62%   │+$1,234│ +$27  │+$456│   │
│  │  ETH    │  30  │  57%   │ +$567 │ +$19  │+$234│   │
│  │  BNB    │  20  │  45%   │ -$123 │  -$6  │ +$89│   │
│  └─────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘
```

---

## Dependencias

- RF-TRD-007: Historial de Trades (fuente de datos)
- RF-TRD-006: Gestión de Posiciones (datos de riesgo)
- Chart.js o similar para gráficos
- Biblioteca de estadísticas (ej: mathjs)

---

## Notas Técnicas

- Cachear métricas agregadas por 5 minutos
- Usar queries optimizadas con índices
- Implementar lazy loading para gráficos
- Generar PDFs en backend (puppeteer)
- Usar Web Workers para cálculos pesados
- Implementar virtualización en tablas largas
- Guardar snapshots de métricas mensuales
- Considerar materializar equity curve para performance

---

## Fórmulas Importantes

### Sharpe Ratio
```
Sharpe = (Avg Return - Risk Free Rate) / Std Dev of Returns
```

### Profit Factor
```
Profit Factor = Gross Profit / Gross Loss
```

### Max Drawdown
```
Max Drawdown = Max(Peak Value - Trough Value) / Peak Value
```

### Kelly Criterion
```
Kelly % = (Win% × Avg Win - Loss% × Avg Loss) / Avg Win
```

### Recovery Factor
```
Recovery Factor = Net Profit / Max Drawdown
```

### Expectancy
```
Expectancy = (Win% × Avg Win) - (Loss% × Avg Loss)
```

---

## Métricas a Trackear del Sistema

- Tiempo de cálculo de métricas
- Uso de caché (hit rate)
- Exportaciones de reportes por día
- Métricas más vistas
- Tiempo en dashboard
- Filtros más usados

---

## Referencias

- [Investopedia - Sharpe Ratio](https://www.investopedia.com/terms/s/sharperatio.asp)
- [Kelly Criterion](https://www.investopedia.com/articles/trading/04/091504.asp)
- [Trading Metrics Best Practices](https://www.tradingview.com/support/solutions/43000594687-performance-summary/)
