--- id: "RF-TRD-001" title: "Charts y Visualizacion" 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-001: Charts y Visualización **Versión:** 1.0.0 **Fecha:** 2025-12-05 **Épica:** OQI-003 - Trading y Charts **Prioridad:** P0 **Story Points:** 8 --- ## Descripción El sistema debe proporcionar gráficos de velas (candlestick charts) profesionales que permitan a los usuarios visualizar el comportamiento del precio de diferentes activos en múltiples timeframes. --- ## Requisitos Funcionales ### RF-TRD-001.1: Renderizado de Velas El sistema debe: - Renderizar gráficos de velas japonesas (candlestick) - Mostrar datos OHLCV (Open, High, Low, Close, Volume) - Soportar colores personalizables para velas alcistas/bajistas - Mostrar eje Y con escala de precios automática - Mostrar eje X con fechas/horas según timeframe ### RF-TRD-001.2: Timeframes El sistema debe soportar los siguientes intervalos: | Timeframe | Label | Uso típico | |-----------|-------|------------| | 1m | 1 minuto | Scalping | | 5m | 5 minutos | Day trading | | 15m | 15 minutos | Intraday | | 1h | 1 hora | Swing trading | | 4h | 4 horas | Position trading | | 1D | 1 día | Análisis diario | | 1W | 1 semana | Análisis semanal | ### RF-TRD-001.3: Interactividad El sistema debe permitir: - Zoom in/out con scroll del mouse - Pan horizontal con drag - Tooltip con información al hover sobre vela - Crosshair siguiendo el cursor - Botones de zoom reset y fit to data ### RF-TRD-001.4: Datos en Tiempo Real El sistema debe: - Actualizar la última vela en tiempo real - Crear nueva vela automáticamente al cambiar el período - Mostrar precio actual con línea horizontal destacada - Indicar variación porcentual del día ### RF-TRD-001.5: Volumen El sistema debe: - Mostrar barras de volumen en panel inferior - Colorear volumen según dirección de la vela - Escala automática del eje Y de volumen --- ## Datos de Entrada | Campo | Tipo | Descripción | |-------|------|-------------| | symbol | string | Par de trading (ej: BTCUSDT) | | timeframe | enum | Intervalo temporal | | limit | number | Cantidad de velas (default: 500) | --- ## Datos de Salida ```typescript interface Candle { time: number; // Unix timestamp open: number; // Precio apertura high: number; // Precio máximo low: number; // Precio mínimo close: number; // Precio cierre volume: number; // Volumen } interface ChartData { symbol: string; timeframe: string; candles: Candle[]; currentPrice: number; priceChange24h: number; priceChangePercent24h: number; } ``` --- ## Reglas de Negocio 1. **Cantidad de velas:** Mínimo 100, máximo 1500 velas por request 2. **Símbolos válidos:** Solo los listados en configuración del sistema 3. **Caché:** Datos históricos se cachean por 1 minuto 4. **Tiempo real:** Updates cada 1 segundo para la vela actual --- ## Criterios de Aceptación ```gherkin Escenario: Usuario visualiza chart de BTCUSDT DADO que el usuario está autenticado Y está en la página de trading CUANDO selecciona el símbolo "BTCUSDT" ENTONCES se muestra un gráfico de velas Y el gráfico contiene al menos 100 velas Y se muestra el precio actual Y se muestra la variación del día Escenario: Usuario cambia timeframe DADO que el usuario está viendo un chart CUANDO cambia el timeframe a "1h" ENTONCES el chart se actualiza con velas de 1 hora Y mantiene el zoom/pan actual si es posible Escenario: Chart se actualiza en tiempo real DADO que el usuario está viendo un chart CUANDO pasa 1 segundo ENTONCES la última vela se actualiza con el nuevo precio Y el precio actual en el header se actualiza ``` --- ## Dependencias - Binance API para datos de mercado - Lightweight Charts library - WebSocket para actualizaciones --- ## Notas Técnicas - Usar Lightweight Charts v4 de TradingView - Implementar Web Workers para cálculos pesados - Considerar lazy loading para históricos grandes - Implementar debounce en zoom/pan --- ## Referencias - [Lightweight Charts Documentation](https://tradingview.github.io/lightweight-charts/) - [Binance API - Klines](https://binance-docs.github.io/apidocs/spot/en/#kline-candlestick-data)