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>
6.9 KiB
6.9 KiB
| id | title | type | status | priority | module | epic | version | created_date | updated_date |
|---|---|---|---|---|---|---|---|---|---|
| RF-TRD-002 | Indicadores Tecnicos | Requirement | Done | Alta | trading | OQI-003 | 1.0 | 2025-12-05 | 2026-01-04 |
RF-TRD-002: Indicadores Técnicos
Versión: 1.0.0 Fecha: 2025-12-05 Épica: OQI-003 - Trading y Charts Prioridad: P1 Story Points: 13
Descripción
El sistema debe proporcionar un conjunto de indicadores técnicos populares que los usuarios puedan aplicar sobre los gráficos para realizar análisis técnico avanzado. Los indicadores deben calcularse en tiempo real y ser completamente configurables.
Requisitos Funcionales
RF-TRD-002.1: Indicadores de Tendencia
El sistema debe soportar:
| Indicador | Descripción | Parámetros |
|---|---|---|
| SMA | Simple Moving Average | Período (default: 20, 50, 200) |
| EMA | Exponential Moving Average | Período (default: 12, 26, 50) |
| MACD | Moving Average Convergence Divergence | Fast (12), Slow (26), Signal (9) |
| Bollinger Bands | Bandas de volatilidad | Período (20), Desviaciones (2) |
RF-TRD-002.2: Indicadores de Momentum
El sistema debe soportar:
| Indicador | Descripción | Parámetros |
|---|---|---|
| RSI | Relative Strength Index | Período (default: 14) |
| Stochastic | Oscilador estocástico | %K (14), %D (3) |
| ADX | Average Directional Index | Período (default: 14) |
RF-TRD-002.3: Indicadores de Volumen
El sistema debe soportar:
| Indicador | Descripción | Parámetros |
|---|---|---|
| Volume MA | Media móvil de volumen | Período (default: 20) |
| OBV | On-Balance Volume | Ninguno |
RF-TRD-002.4: Gestión de Indicadores
El sistema debe permitir:
- Añadir múltiples indicadores simultáneamente (máximo 5)
- Configurar parámetros de cada indicador
- Personalizar colores y estilos de líneas
- Mostrar/ocultar indicadores con toggle
- Eliminar indicadores individualmente
- Guardar configuración de indicadores por usuario
RF-TRD-002.5: Renderizado
El sistema debe:
- Renderizar indicadores overlay (sobre el chart principal)
- Renderizar indicadores en paneles separados (RSI, MACD, etc.)
- Actualizar indicadores en tiempo real con nuevas velas
- Mostrar leyenda con valores actuales
- Aplicar auto-escala a paneles de indicadores
RF-TRD-002.6: Señales Visuales
El sistema debe mostrar:
- Cruces de medias móviles (golden cross, death cross)
- Niveles de sobrecompra/sobreventa (RSI > 70, < 30)
- Divergencias alcistas/bajistas
- Señales de MACD (cruce de línea señal)
Datos de Entrada
Añadir Indicador
interface AddIndicatorDto {
chartId: string;
type: IndicatorType;
params: Record<string, number>;
style?: IndicatorStyle;
}
enum IndicatorType {
SMA = 'sma',
EMA = 'ema',
RSI = 'rsi',
MACD = 'macd',
BOLLINGER = 'bollinger',
STOCHASTIC = 'stochastic',
ADX = 'adx',
VOLUME_MA = 'volume_ma',
OBV = 'obv'
}
interface IndicatorStyle {
color?: string;
lineWidth?: number;
lineStyle?: 'solid' | 'dashed' | 'dotted';
}
Datos de Salida
Indicador Calculado
interface Indicator {
id: string;
type: IndicatorType;
params: Record<string, number>;
style: IndicatorStyle;
data: IndicatorData[];
panel: 'main' | 'separate';
visible: boolean;
}
interface IndicatorData {
time: number;
value: number | MultiValue;
}
interface MultiValue {
// Para MACD
macd?: number;
signal?: number;
histogram?: number;
// Para Bollinger
upper?: number;
middle?: number;
lower?: number;
// Para Stochastic
k?: number;
d?: number;
}
Señal de Trading
interface TradingSignal {
time: number;
type: 'bullish' | 'bearish';
indicator: string;
description: string;
strength: 'weak' | 'moderate' | 'strong';
}
Reglas de Negocio
- Máximo de indicadores: 5 indicadores simultáneos por chart
- Períodos mínimos: SMA/EMA mínimo 2, RSI mínimo 2
- Cálculo histórico: Calcular indicadores sobre últimas 500 velas mínimo
- Caché: Cachear cálculos de indicadores por 1 minuto
- Performance: Usar Web Workers para cálculos pesados
- Persistencia: Guardar configuración de indicadores por usuario/símbolo
Criterios de Aceptación
Escenario: Usuario añade SMA al chart
DADO que el usuario está viendo chart de BTCUSDT
CUANDO añade indicador SMA con período 50
ENTONCES se muestra línea SMA(50) sobre el chart
Y la leyenda muestra "SMA(50): 50,234"
Y el valor se actualiza en tiempo real
Escenario: Usuario configura RSI
DADO que el usuario está viendo un chart
CUANDO añade indicador RSI con período 14
ENTONCES se crea panel separado debajo del chart
Y se muestra línea RSI entre 0-100
Y se marcan niveles 30 (sobreventa) y 70 (sobrecompra)
Y se muestra valor actual en leyenda
Escenario: RSI detecta sobrecompra
DADO que el usuario tiene RSI activo
CUANDO el RSI supera 70
ENTONCES se muestra señal visual de sobrecompra
Y se notifica al usuario (opcional)
Escenario: Usuario alcanza límite de indicadores
DADO que el usuario tiene 5 indicadores activos
CUANDO intenta añadir un sexto indicador
ENTONCES el sistema muestra mensaje "Máximo 5 indicadores"
Y no se añade el nuevo indicador
Escenario: Configuración se persiste
DADO que el usuario configuró SMA(50) y RSI(14)
CUANDO cierra y vuelve a abrir el chart del mismo símbolo
ENTONCES los indicadores se cargan automáticamente
Y mantienen sus configuraciones
Fórmulas de Cálculo
SMA (Simple Moving Average)
SMA = Σ(Close prices) / n
EMA (Exponential Moving Average)
EMA = (Close - EMA_prev) × (2 / (n + 1)) + EMA_prev
RSI (Relative Strength Index)
RS = Average Gain / Average Loss
RSI = 100 - (100 / (1 + RS))
MACD
MACD Line = EMA(12) - EMA(26)
Signal Line = EMA(9) of MACD Line
Histogram = MACD Line - Signal Line
Bollinger Bands
Middle Band = SMA(20)
Upper Band = Middle + (2 × StdDev)
Lower Band = Middle - (2 × StdDev)
Dependencias
- RF-TRD-001: Charts (datos de velas)
- Biblioteca: ta-lib o tulind para cálculos
- WebSocket para actualizaciones en tiempo real
Notas Técnicas
- Implementar cálculos en Web Workers para no bloquear UI
- Usar ta-lib.js o tulind.js para fórmulas probadas
- Cachear resultados para optimizar performance
- Implementar lazy calculation (solo calcular indicadores visibles)
- Considerar usar OffscreenCanvas para renderizado
- Validar parámetros antes de calcular
- Manejar datos insuficientes (ej: SMA(200) con 100 velas)