---
id: "ANALISIS-INTEGRACION-ML"
title: "Análisis de Integración ML-Engine con Subproyectos"
type: "Análisis"
project: "trading-platform"
epic: "OQI-006"
fecha: "2026-01-07"
agente: "ML-Specialist + Architecture-Analyst"
status: "COMPLETO"
---

# Análisis de Integración: ML-Engine con Subproyectos

**Fecha:** 2026-01-07
**Agente:** ML-Specialist + Architecture-Analyst
**Estado:** ✅ COMPLETO

---

## 1. Resumen Ejecutivo

Este documento presenta un análisis completo de la integración del subproyecto `ml-engine` con los demás subproyectos de la plataforma trading-platform. Se identifican puntos de integración, problemas potenciales y recomendaciones para asegurar una correcta integración.

---

## 2. Arquitectura de Subproyectos

```
trading-platform/apps/
├── backend/          # API Gateway (NestJS/TypeScript) - Puerto 3081
├── data-service/     # Servicio de datos de mercado (FastAPI) - Puerto 3084
├── ml-engine/        # Motor de ML y predicciones (FastAPI) - Puerto 3083
├── trading-agents/   # Agentes de trading automático (FastAPI) - Puerto 3086
├── llm-agent/        # Agente LLM para análisis (FastAPI)
├── database/         # DDL y scripts PostgreSQL
├── frontend/         # UI React
└── mcp-*/            # Conectores MCP (MetaTrader, Binance)
```

---

## 3. Puntos de Integración Identificados

### 3.1 Backend → ML-Engine

**Archivo:** `apps/backend/src/shared/clients/ml-engine.client.ts`

**Endpoints consumidos:**

| Endpoint | Método | Descripción |
|----------|--------|-------------|
| `/health` | GET | Health check |
| `/api/v1/models` | GET | Listar modelos |
| `/api/v1/signals/predict` | POST | Obtener señal individual |
| `/api/v1/signals/batch` | POST | Señales en lote |
| `/api/v1/signals/latest/{symbol}` | GET | Última señal cacheada |
| `/api/v1/predictions/range/{symbol}` | GET | Predicciones de rango |
| `/api/v1/amd/analyze/{symbol}` | GET | Análisis AMD |
| `/api/v1/backtest/run` | POST | Ejecutar backtest |
| `/ws/signals` | WebSocket | Señales en tiempo real |

**Configuración:** `ML_ENGINE_URL` (default: `http://localhost:8001`)

---

### 3.2 ML-Engine → Data-Service

**Archivo:** `apps/ml-engine/src/data/data_service_client.py`

**Endpoints consumidos:**

| Endpoint | Método | Descripción |
|----------|--------|-------------|
| `/health` | GET | Health check |
| `/api/symbols` | GET | Lista de símbolos |
| `/api/ohlcv` | GET | Datos OHLCV históricos |
| `/api/snapshot/{symbol}` | GET | Ticker actual |

**Configuración:** `DATA_SERVICE_URL` (default: `http://localhost:8001`)

---

### 3.3 Trading-Agents → ML-Engine

**Archivo:** `apps/trading-agents/src/signals/ml_consumer.py`

**Integración:** Polling HTTP cada 5 segundos

**Métodos:**
- `get_signal(symbol)` - Señal por símbolo
- `get_signals_batch(symbols)` - Señales en lote
- `subscribe(symbol, callback)` - Suscripción a actualizaciones

---

### 3.4 Backend → Trading-Agents

**Archivo:** `apps/backend/src/shared/clients/trading-agents.client.ts`

**Endpoints consumidos:**

| Endpoint | Método | Descripción |
|----------|--------|-------------|
| `/api/v1/agents/{type}/start` | POST | Iniciar agente |
| `/api/v1/agents/{type}/stop` | POST | Detener agente |
| `/api/v1/agents/{type}/status` | GET | Estado del agente |
| `/api/v1/signals/broadcast` | POST | Difundir señal |

---

## 4. Bases de Datos

### 4.1 PostgreSQL Local (trading_platform)

**Puerto:** 5433
**Schemas verificados:**

| Schema | Tablas | Estado |
|--------|--------|--------|
| ml | 9 tablas | ✅ OK |
| trading | 10 tablas | ✅ OK |
| auth | 11 tablas | ✅ OK |
| education | 14 tablas | ✅ OK |
| financial | 10 tablas | ⚠️ Errores dependencia |
| investment | 7 tablas | ⚠️ Errores dependencia |
| llm | 5 tablas | ✅ OK |
| audit | 1 tabla | ✅ OK |

**Tablas ML relevantes:**
- `ml.models` - Registro de modelos
- `ml.model_versions` - Versiones de modelos
- `ml.predictions` - Predicciones generadas
- `ml.prediction_outcomes` - Resultados de predicciones
- `ml.feature_store` - Almacén de features

---

### 4.2 MySQL Remoto (db_trading_meta)

**Host:** 72.60.226.4:3306
**Propósito:** Datos históricos OHLCV (solo lectura)

**Tablas:**
- `tickers_agg_data` - Datos OHLCV agregados

**Nota:** Los datos BTCUSD actualizados en FASE 11 residen aquí.

---

## 5. Problemas Identificados

### 5.1 Críticos

| ID | Problema | Impacto | Componentes |
|----|----------|---------|-------------|
| P-001 | Puertos inconsistentes en configuración | Alto | Todos |
| P-002 | Conflicto URL Data Service (8001 vs 3084) | Alto | ml-engine, data-service |
| P-003 | Schemas financial/investment con errores DDL | Alto | database |

### 5.2 Importantes

| ID | Problema | Impacto | Componentes |
|----|----------|---------|-------------|
| P-004 | Sin cliente Data Service en Backend | Medio | backend |
| P-005 | Formato señales diferente ML/Agents | Medio | ml-engine, trading-agents |
| P-006 | Polling 5s puede ser agresivo | Medio | trading-agents |
| P-007 | Sin circuit breaker en clientes | Medio | Todos |

### 5.3 Menores

| ID | Problema | Impacto | Componentes |
|----|----------|---------|-------------|
| P-008 | Sin health check centralizado | Bajo | backend |
| P-009 | Sin deduplicación de señales | Bajo | trading-agents |
| P-010 | Sin cache Redis configurado | Bajo | ml-engine |

---

## 6. Configuración de Puertos

### 6.1 Estado Actual (Inconsistente)

| Servicio | .env.example | Código Default | Recomendado |
|----------|-------------|----------------|-------------|
| Backend | 3081 | 3081 | 3081 |
| ML Engine | 3083 | 8001 | 3083 |
| Data Service | 3084 | 8001 | 3084 |
| Trading Agents | 3086 | 8004 | 3086 |

### 6.2 Acción Requerida

Alinear todas las configuraciones al estándar definido en `.env.example`.

---

## 7. Contratos de Datos

### 7.1 MLSignal (ML-Engine Output)

```python
class MLSignal:
    symbol: str
    timeframe: str
    direction: Literal['long', 'short', 'neutral']
    confidence: float  # 0.0 - 1.0
    entry_price: float
    stop_loss: float
    take_profit: float
    risk_reward_ratio: float
    prob_tp_first: float
    amd_phase: str
    volatility_regime: str
    timestamp: datetime
    metadata: dict
```

### 7.2 SignalInput (Trading-Agents Input)

```python
class SignalInput:
    symbol: str
    action: Literal['buy', 'sell', 'hold']
    confidence: float
    price: float
    stop_loss: Optional[float]
    take_profit: Optional[float]
    metadata: Optional[dict]
```

### 7.3 Transformación Requerida

```python
def ml_signal_to_agent_input(ml_signal: MLSignal) -> SignalInput:
    action_map = {'long': 'buy', 'short': 'sell', 'neutral': 'hold'}
    return SignalInput(
        symbol=ml_signal.symbol,
        action=action_map[ml_signal.direction],
        confidence=ml_signal.confidence,
        price=ml_signal.entry_price,
        stop_loss=ml_signal.stop_loss,
        take_profit=ml_signal.take_profit,
        metadata=ml_signal.metadata
    )
```

---

## 8. Validación de ML-Engine

### 8.1 Modelos Entrenados

| Símbolo | Attention | Base | Metamodel | Backtest | Estado |
|---------|-----------|------|-----------|----------|--------|
| XAUUSD | ✅ | ✅ | ✅ | ✅ Rentable | COMPLETO |
| EURUSD | ✅ | ✅ | ✅ | ✅ Rentable | COMPLETO |
| GBPUSD | ✅ | ✅ | ✅ | ✅ Rentable | COMPLETO |
| USDJPY | ✅ | ✅ | ✅ | ✅ Rentable | COMPLETO |
| BTCUSD | ✅ | ✅ | ✅ | ✅ Rentable | COMPLETO (FASE 11) |

### 8.2 Features Pipeline

- **Total features:** 50 (sin attention) / 52 (con attention)
- **Arquitectura:** Hierarchical Pipeline (Attention → Base → Metamodel)
- **Estrategias:** 7 estrategias de backtest implementadas

---

## 9. Recomendaciones de Integración

### 9.1 Prioridad Alta

| # | Acción | Responsable | Esfuerzo |
|---|--------|-------------|----------|
| 1 | Unificar configuración de puertos | DevOps | 2h |
| 2 | Corregir errores DDL (financial, investment) | Database | 4h |
| 3 | Crear convertidor MLSignal→SignalInput | ML-Engine | 2h |
| 4 | Implementar health check centralizado | Backend | 3h |

### 9.2 Prioridad Media

| # | Acción | Responsable | Esfuerzo |
|---|--------|-------------|----------|
| 5 | Crear cliente Data Service en Backend | Backend | 4h |
| 6 | Implementar circuit breaker en clientes | Backend/Agents | 4h |
| 7 | Cambiar polling a WebSocket | Trading-Agents | 6h |
| 8 | Configurar Redis cache | DevOps/ML | 4h |

### 9.3 Prioridad Baja

| # | Acción | Responsable | Esfuerzo |
|---|--------|-------------|----------|
| 9 | Deduplicación de señales | Trading-Agents | 2h |
| 10 | Tests de integración E2E | Testing | 8h |
| 11 | Documentar OpenAPI specs | Todos | 4h |

---

## 10. Diagrama de Flujo de Señales

```
┌─────────────┐    ┌──────────────┐    ┌─────────────────┐
│ Data Source │───▶│ Data Service │───▶│    ML Engine    │
│ (MySQL/API) │    │  (FastAPI)   │    │    (FastAPI)    │
└─────────────┘    └──────────────┘    └────────┬────────┘
                                                │
                            ┌───────────────────┼───────────────────┐
                            │                   │                   │
                            ▼                   ▼                   ▼
                    ┌───────────────┐   ┌───────────────┐   ┌───────────────┐
                    │    Backend    │   │Trading Agents │   │   Frontend    │
                    │   (NestJS)    │   │   (FastAPI)   │   │   (React)     │
                    └───────────────┘   └───────┬───────┘   └───────────────┘
                                                │
                                                ▼
                                        ┌───────────────┐
                                        │  PostgreSQL   │
                                        │ (Predictions) │
                                        └───────────────┘
```

---

## 11. Conclusiones

### 11.1 Estado de Integración

| Componente | Integración | Calificación |
|------------|-------------|--------------|
| ML-Engine ↔ Data-Service | Funcional | ⭐⭐⭐⭐ |
| Backend ↔ ML-Engine | Funcional | ⭐⭐⭐⭐ |
| Trading-Agents ↔ ML-Engine | Funcional (polling) | ⭐⭐⭐ |
| Database DDL | Parcialmente funcional | ⭐⭐⭐ |

### 11.2 Resumen

- **ML-Engine** está correctamente implementado con modelos entrenados para 5 símbolos
- **Integración con Backend** funciona pero requiere unificación de puertos
- **Trading-Agents** consume señales pero podría mejorar con WebSocket
- **Base de datos ML** correctamente estructurada, otros schemas requieren corrección

---

## 12. Referencias

- [PLAN-IMPLEMENTACION-FASES.md](./PLAN-IMPLEMENTACION-FASES.md)
- [ML_INVENTORY.yml](../90-transversal/inventarios/ML_INVENTORY.yml)
- [REPORTE-ENTREGA-FASE11-BTCUSD.md](./REPORTE-ENTREGA-FASE11-BTCUSD.md)
- Backend Client: `apps/backend/src/shared/clients/ml-engine.client.ts`
- ML API: `apps/ml-engine/src/api/main.py`

---

*Generado: 2026-01-07 | Sistema: SIMCO | Agentes: ML-Specialist, Architecture-Analyst*
