trading-platform/docs/02-definicion-modulos/OQI-003-trading-charts/requerimientos/RF-TRD-002-indicadores-tecnicos.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

284 lines
6.9 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-002"
title: "Indicadores Tecnicos"
type: "Requirement"
status: "Done"
priority: "Alta"
module: "trading"
epic: "OQI-003"
version: "1.0"
created_date: "2025-12-05"
updated_date: "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
```typescript
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
```typescript
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
```typescript
interface TradingSignal {
time: number;
type: 'bullish' | 'bearish';
indicator: string;
description: string;
strength: 'weak' | 'moderate' | 'strong';
}
```
---
## Reglas de Negocio
1. **Máximo de indicadores:** 5 indicadores simultáneos por chart
2. **Períodos mínimos:** SMA/EMA mínimo 2, RSI mínimo 2
3. **Cálculo histórico:** Calcular indicadores sobre últimas 500 velas mínimo
4. **Caché:** Cachear cálculos de indicadores por 1 minuto
5. **Performance:** Usar Web Workers para cálculos pesados
6. **Persistencia:** Guardar configuración de indicadores por usuario/símbolo
---
## Criterios de Aceptación
```gherkin
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)
---
## Referencias
- [Technical Analysis Library](https://github.com/anandanand84/technicalindicators)
- [Trading View Indicators](https://www.tradingview.com/support/solutions/43000502589-indicators-overview/)
- [Investopedia - Technical Indicators](https://www.investopedia.com/terms/t/technicalindicator.asp)