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>
517 lines
16 KiB
Markdown
517 lines
16 KiB
Markdown
---
|
||
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/)
|