trading-platform/docs/02-definicion-modulos/OQI-003-trading-charts/requerimientos/RF-TRD-008-metricas-estadisticas.md
rckrdmrd a7cca885f0 feat: Major platform documentation and architecture updates
Changes include:
- Updated architecture documentation
- Enhanced module definitions (OQI-001 to OQI-008)
- ML integration documentation updates
- Trading strategies documentation
- Orchestration and inventory updates
- Docker configuration updates

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 05:33:35 -06:00

517 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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/)