ML Engine Updates: - Updated BTCUSD with Polygon API data (2024-2025): 215,699 new records - Re-trained all ML models: Attention (R²: 0.223), Base, Metamodel (87.3% confidence) - Backtest results: +176.71R profit with aggressive_filter strategy Documentation Consolidation: - Created docs/99-analisis/_MAP.md index with 13 new analysis documents - Consolidated inventories: removed duplicates from orchestration/inventarios/ - Updated ML_INVENTORY.yml with BTCUSD metrics and training results - Added execution reports: FASE11-BTCUSD, correction issues, alignment validation Architecture & Integration: - Updated all module documentation with NEXUS v3.4 frontmatter - Fixed _MAP.md indexes across all folders - Updated orchestration plans and traces Files: 229 changed, 5064 insertions(+), 1872 deletions(-) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
11 KiB
| id | title | type | status | priority | epic | project | story_points | created_date | updated_date |
|---|---|---|---|---|---|---|---|---|---|
| US-ML-006 | Integrar Señales en Chart | User Story | Done | Media | OQI-006 | trading-platform | 3 | 2025-12-05 | 2026-01-04 |
US-ML-006: Integrar Señales en Chart
Metadata
| Campo | Valor |
|---|---|
| ID | US-ML-006 |
| Épica | OQI-006 - Señales ML y Predicciones |
| Módulo | ml-signals + trading-charts |
| Prioridad | P0 |
| Story Points | 5 |
| Sprint | Sprint 7 |
| Estado | Pendiente |
| Asignado a | Por asignar |
Historia de Usuario
Como trader/inversor, quiero ver las señales de trading, niveles de TP/SL y predicciones directamente sobre el gráfico de velas, para visualizar de forma integrada el contexto del mercado y las recomendaciones del ML.
Descripción Detallada
El usuario debe poder visualizar directamente en el chart de TradingView/Lightweight Charts:
- Marcadores de señales BUY/SELL en el punto de entrada
- Líneas horizontales para TP1, TP2, TP3 y Stop Loss
- Rangos de predicción (High/Low esperados) como bandas
- Labels con información contextual
- Todo integrado de forma limpia y no invasiva
Mockups/Wireframes
┌─────────────────────────────────────────────────────────────────────┐
│ BTCUSDT $89,400.00 +2.34% ▲ [1h] [ML Signals ON 🔘] │
├─────────────────────────────────────────────────────────────────────┤
│ Chart + ML Overlay │
│ │
│ $92,000 ┼─────────────────────────────────────────────────────────│
│ │ │
│ $91,000 ┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ TP3: $89,900 ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ (Green) │
│ │╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ TP2: $89,775 ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ │
│ $90,000 ┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ TP1: $89,650 ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ │
│ │ ▲ │
│ │ ████ │ ████ ████ │
│ │ ████ │ ████ ████ ████ [Predicted High] │
│ $89,400 ┼──────────●──────────────────────────────────────────── │
│ │ ENTRY 🟢 BUY (75% conf) │
│ │ ████ ████ ████ │
│ │ ████ ████ ████ ████ [Predicted Low] │
│ $89,000 ┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ SL: $89,150 ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ (Red) │
│ │ │
│ $88,000 ┼─────────────────────────────────────────────────────────│
│ │
│ Legend: │
│ 🟢 BUY Signal 🔴 SELL Signal ─── Take Profit ─── Stop Loss │
│ ░░░ Predicted Range (30 min Scalping) │
│ │
└─────────────────────────────────────────────────────────────────────┘
Criterios de Aceptación
Escenario 1: Ver señal BUY en chart
DADO que existe una señal BUY activa para BTCUSDT
Y el usuario está viendo el chart de BTCUSDT
Y "ML Signals" está activado (toggle ON)
CUANDO el chart renderiza
ENTONCES se muestra:
- Marcador 🟢 en el precio de entrada (vela actual)
- Label "BUY 75%" junto al marcador
- Línea horizontal verde punteada para TP1
- Línea horizontal verde punteada para TP2
- Línea horizontal verde punteada para TP3
- Línea horizontal roja punteada para Stop Loss
- Labels en cada línea ("TP1: $89,650", "SL: $89,150")
Escenario 2: Ver rango de predicción
DADO que el usuario activó "Show Prediction Range"
Y existe una predicción para Scalping (30 min)
CUANDO el chart renderiza
ENTONCES se muestra:
- Banda superior en predicted_high (color verde transparente)
- Banda inferior en predicted_low (color rojo transparente)
- Fill entre bandas con color neutro (gris transparente)
- Label "30 min range (69% conf)" en la banda
Escenario 3: Toggle ON/OFF de señales
DADO que el usuario está viendo el chart
CUANDO hace click en el toggle "ML Signals"
ENTONCES:
- Si OFF → ON: Se muestran todas las overlays (señales, TP/SL, rangos)
- Si ON → OFF: Se ocultan todas las overlays
- El estado persiste en localStorage
Escenario 4: Señal SELL en chart
DADO que existe una señal SELL activa
CUANDO el chart renderiza con ML Signals ON
ENTONCES se muestra:
- Marcador 🔴 en el precio de entrada
- Label "SELL 68%"
- TP1, TP2, TP3 en precios MENORES (líneas verdes hacia abajo)
- Stop Loss en precio MAYOR (línea roja hacia arriba)
Escenario 5: Actualización en tiempo real
DADO que el usuario está viendo el chart con ML Signals ON
CUANDO se cierra una nueva vela de 5 minutos
Y se genera una nueva señal o actualiza la predicción
ENTONCES las overlays se actualizan automáticamente
Y se muestra una animación suave de transición
Y no se recarga todo el chart (solo las overlays)
Escenario 6: Hover sobre línea de TP/SL
DADO que el usuario está viendo el chart con señales
CUANDO pasa el cursor sobre una línea de TP1
ENTONCES se muestra tooltip con:
- "Take Profit 1"
- Precio: $89,650.00
- % desde entrada: +0.28%
- "Conservative target"
Criterios Adicionales
- Las overlays no deben interferir con las velas del chart
- Los colores deben ser consistentes con el tema de la app
- Debe funcionar en modo claro y oscuro
- Las líneas deben ser no editables (solo visualización)
- El toggle debe estar en el header del chart, bien visible
Tareas Técnicas
Backend:
- No requiere cambios (usa endpoints existentes)
Frontend:
- FE-ML-020: Crear
ChartMLOverlay.tsx(container de overlays) - FE-ML-021: Implementar
addSignalMarker()en Lightweight Charts - FE-ML-022: Implementar
addPriceLine()para TP/SL - FE-ML-023: Implementar
addPredictionBand()para rangos - FE-ML-024: Crear toggle "ML Signals" en ChartHeader
- FE-ML-025: Integrar WebSocket updates con chart overlays
- FE-ML-026: Implementar tooltips para líneas
- FE-ML-027: Persistir estado del toggle en localStorage
Tests:
- TEST-ML-010: Test unitario de posicionamiento de marcadores
- TEST-ML-011: Test de renderizado de overlays
- TEST-ML-012: Test E2E de toggle ML Signals ON/OFF
Dependencias
Depende de:
- US-TRD-001: Ver chart - Estado: ✅ Completado
- US-ML-001: Ver predicción - Estado: Pendiente
- US-ML-002: Ver señal - Estado: Pendiente
Bloquea:
- Ninguna (historia final de la cadena)
Notas Técnicas
Lightweight Charts API - Price Lines:
// Agregar línea de Take Profit
const tp1Line = series.createPriceLine({
price: 89650.00,
color: '#22c55e',
lineWidth: 2,
lineStyle: LineStyle.Dashed,
axisLabelVisible: true,
title: 'TP1: $89,650',
});
// Agregar línea de Stop Loss
const slLine = series.createPriceLine({
price: 89150.00,
color: '#ef4444',
lineWidth: 2,
lineStyle: LineStyle.Dashed,
axisLabelVisible: true,
title: 'SL: $89,150',
});
Lightweight Charts API - Markers:
// Agregar marcador de señal BUY
series.setMarkers([
{
time: currentTime,
position: 'belowBar',
color: '#22c55e',
shape: 'arrowUp',
text: 'BUY 75%',
}
]);
// Marcador de señal SELL
series.setMarkers([
{
time: currentTime,
position: 'aboveBar',
color: '#ef4444',
shape: 'arrowDown',
text: 'SELL 68%',
}
]);
Lightweight Charts API - Series de Bandas:
// Agregar banda de predicción
const predictionSeries = chart.addAreaSeries({
topColor: 'rgba(34, 197, 94, 0.2)',
bottomColor: 'rgba(239, 68, 68, 0.2)',
lineColor: 'rgba(156, 163, 175, 0.5)',
lineWidth: 1,
});
predictionSeries.setData([
{ time: currentTime + 300, value: predictedHigh },
{ time: currentTime + 1800, value: predictedHigh },
]);
Componentes UI:
ChartMLOverlay: Gestor de todas las overlays MLMLToggle: Switch para activar/desactivar overlaysSignalMarker: Lógica de marcadores de señalesPriceLevels: Lógica de líneas TP/SLPredictionBands: Lógica de bandas de predicción
Estado (Zustand) - Integración con Chart Store:
interface ChartStore {
// ... existing chart state
mlOverlaysEnabled: boolean;
activeSignal: TradingSignal | null;
prediction: Prediction | null;
toggleMLOverlays: () => void;
updateMLOverlays: () => void;
}
LocalStorage:
// Persistir estado del toggle
const ML_OVERLAYS_KEY = 'trading:ml-overlays-enabled';
localStorage.setItem(ML_OVERLAYS_KEY, String(enabled));
Definition of Ready (DoR)
- Historia claramente escrita (quién, qué, por qué)
- Criterios de aceptación definidos
- Story points estimados
- Dependencias identificadas
- Sin bloqueadores (depende de US-ML-001 y US-ML-002)
- Diseño/mockup disponible
- Documentación de Lightweight Charts API revisada
Definition of Done (DoD)
- Código implementado según criterios
- Tests unitarios escritos y pasando
- Tests E2E pasando
- Code review aprobado
- Documentación actualizada
- QA aprobado en staging
- Funciona en light/dark mode
- Toggle persiste estado correctamente
- Overlays no interfieren con interactividad del chart
- Desplegado en producción
Historial de Cambios
| Fecha | Cambio | Autor |
|---|---|---|
| 2025-12-05 | Creación | Requirements-Analyst |
Creada por: Requirements-Analyst Fecha: 2025-12-05 Última actualización: 2025-12-05