# PLAN DE EJECUCION: ML-ENHANCED-001 - Enhanced Range Predictor

**Agente:** ML-Specialist-Agent + Trading-Strategist
**Tipo de tarea:** Feature
**Prioridad:** P0
**Fecha creacion:** 2026-01-05
**Relacionado con:** [RF-ML-001], [RF-ML-004], [ET-ML-002], [ET-ML-003]

---

## VERIFICACION DE CATALOGO

```
OBLIGATORIO: Verificar @CATALOG_INDEX antes de implementar
Comando: grep -i "range-predictor" shared/catalog/CATALOG-INDEX.yml
```

**Funcionalidades a verificar:**
| Funcionalidad | Aplica? | Catalogo | Accion |
|---------------|---------|----------|--------|
| auth/login | No | @CATALOG_AUTH | N/A |
| sesiones | No | @CATALOG_SESSION | N/A |
| rate-limit | No | @CATALOG_RATELIMIT | N/A |
| notificaciones | No | @CATALOG_NOTIFY | N/A |
| multi-tenant | No | @CATALOG_TENANT | N/A |
| feature-flags | No | @CATALOG_FLAGS | N/A |
| websocket | No | @CATALOG_WS | N/A |
| pagos | No | @CATALOG_PAYMENTS | N/A |

**Resultado:** No aplica catalogo - Modulos ML especificos del proyecto

---

## OBJETIVO

Implementar un sistema mejorado de prediccion de rangos de precio basado en:
- Factor de volatilidad como unidad base (5 USD para XAUUSD)
- Atencion por sesion de trading y volatilidad
- Ensemble dual de horizontes (5 anos largo plazo + 3 meses corto plazo)
- Filtrado por ratio R:R minimo 2:1

**Criterios de Aceptacion:**
- [x] Predicciones en multiplos del factor base (no USD absolutos)
- [x] Targets calculados con formula corregida: MAX/MIN de horizon
- [x] Pesos de muestra basados en magnitud de movimiento
- [x] Pesos por sesion: London/NY overlap > London > NY > Tokyo > off-hours
- [x] Pesos por volatilidad: Alta ATR > Normal > Baja (lateral)
- [x] Modelo dual: largo plazo (patrones estructurales) + corto plazo (adaptacion)
- [x] Filtro R:R ratio minimo 2:1 para oportunidades validas
- [x] Script de entrenamiento CLI completo

---

## ANALISIS PREVIO

### Contexto
- El RangePredictor existente predice en USD absolutos
- No considera diferencias por sesion de trading ni volatilidad
- No distingue entre movimientos laterales y trending
- Usa un solo modelo sin adaptacion temporal

### Estado Actual (Pre-implementacion)
- RangePredictor en `models/range_predictor_factor.py` - parcialmente implementado
- MovementMagnitudePredictor - problemas de rendimiento
- TPSLClassifier - accuracy 68%
- Sin ponderacion por sesion ni volatilidad

### Problema Resuelto
- Predicciones mas precisas enfocadas en oportunidades de alto valor
- Menor ruido de mercados laterales
- Adaptacion a regimen actual del mercado
- Senales con ratio R:R favorable (minimo 2:1)

### Anti-Duplicacion
```bash
# Comandos ejecutados para verificar no-duplicacion
grep -rn "sample_weighting" apps/ml-engine/src/
grep -rn "session_volatility" apps/ml-engine/src/
grep -rn "dual_horizon" apps/ml-engine/src/

# Resultado: No existe - Modulos nuevos
```

---

## DISENO DE SOLUCION

### Approach Seleccionado
Sistema modular con 5 componentes independientes que se integran en un predictor unificado.

**Alternativas consideradas:**
1. Modificar RangePredictor existente - Descartado por alta complejidad y riesgo de regresion
2. Modelo unico con todas las features - Descartado por dificultad de mantenimiento

### Componentes Creados

**ML Engine - Data:**
- [x] `corrected_targets.py` - Calculo de targets con formula corregida

**ML Engine - Training:**
- [x] `sample_weighting.py` - Ponderacion por magnitud de movimiento
- [x] `session_volatility_weighting.py` - Ponderacion por sesion y ATR

**ML Engine - Models:**
- [x] `dual_horizon_ensemble.py` - Ensemble de modelos largo/corto plazo
- [x] `enhanced_range_predictor.py` - Integrador principal

**ML Engine - Scripts:**
- [x] `train_enhanced_model.py` - Script CLI de entrenamiento

---

## CICLOS DE EJECUCION

### Ciclo 1: Modulos de Ponderacion
**Duracion estimada:** 2 horas
**Objetivo:** Crear sistema de pesos para muestras de entrenamiento

**Tareas:**
1. Implementar SampleWeighter con ponderacion por magnitud
2. Implementar SessionVolatilityWeighter con pesos por sesion
3. Crear features de sesion (hour_sin, hour_cos, etc.)

**Artefactos generados:**
- `apps/ml-engine/src/training/sample_weighting.py`
- `apps/ml-engine/src/training/session_volatility_weighting.py`

**Validacion:**
```bash
cd apps/ml-engine
python -m src.training.sample_weighting
python -m src.training.session_volatility_weighting
```

**Criterios de exito:**
- [x] Tests de modulo ejecutan sin errores
- [x] Distribucion de pesos correcta por sesion

---

### Ciclo 2: Targets Corregidos
**Duracion estimada:** 1 hora
**Objetivo:** Implementar formula de targets correcta

**Tareas:**
1. Implementar CorrectedTargetBuilder
2. Formula: target_high = MAX(high[t+1:t+H]) - close[t]
3. Formula: target_low = close[t] - MIN(low[t+1:t+H])
4. Calculo de R:R ratios

**Artefactos generados:**
- `apps/ml-engine/src/data/corrected_targets.py`

**Validacion:**
```bash
cd apps/ml-engine
python -m src.data.corrected_targets
```

**Criterios de exito:**
- [x] Targets siempre no-negativos
- [x] R:R ratios calculados correctamente

---

### Ciclo 3: Ensemble Dual Horizon
**Duracion estimada:** 2 horas
**Objetivo:** Crear modelo ensemble con dos horizontes temporales

**Tareas:**
1. Modelo largo plazo (5 anos): patrones estructurales
2. Modelo corto plazo (3 meses): adaptacion a regimen actual
3. Ajuste dinamico de pesos por rendimiento
4. Reentrenamiento periodico del modelo corto

**Artefactos generados:**
- `apps/ml-engine/src/models/dual_horizon_ensemble.py`

**Validacion:**
```bash
cd apps/ml-engine
python -m src.models.dual_horizon_ensemble
```

**Criterios de exito:**
- [x] Ambos modelos entrenan correctamente
- [x] Pesos se ajustan dinamicamente
- [x] Serialización/deserializacion funciona

---

### Ciclo 4: Predictor Integrado
**Duracion estimada:** 2 horas
**Objetivo:** Integrar todos los componentes

**Tareas:**
1. EnhancedRangePredictor integrando todos los modulos
2. Pipeline: OHLCV -> Targets -> Features -> Weights -> Ensemble -> Prediccion
3. get_trading_signal() con entry/TP/SL
4. Confianza basada en acuerdo entre modelos

**Artefactos generados:**
- `apps/ml-engine/src/models/enhanced_range_predictor.py`

**Validacion:**
```bash
cd apps/ml-engine
python -m src.models.enhanced_range_predictor
```

**Criterios de exito:**
- [x] Pipeline completo funciona
- [x] Predicciones en multiplos del factor
- [x] Senales de trading generadas

---

### Ciclo 5: Script de Entrenamiento
**Duracion estimada:** 1 hora
**Objetivo:** CLI para entrenamiento y validacion

**Tareas:**
1. Argumentos CLI (--symbol, --timeframe, --base-factor, etc.)
2. Walk-forward validation
3. Generacion de reporte en Markdown
4. Guardado de modelo

**Artefactos generados:**
- `apps/ml-engine/scripts/train_enhanced_model.py`

**Validacion:**
```bash
python scripts/train_enhanced_model.py --help
python scripts/train_enhanced_model.py --symbol XAUUSD --timeframe 15m --validate
```

**Criterios de exito:**
- [x] CLI funcional con todos los argumentos
- [x] Reporte generado correctamente
- [x] Modelo guardado y cargable

---

### Ciclo 6: Documentacion
**Duracion estimada:** 1 hora
**Objetivo:** Documentar segun estandares

**Tareas:**
1. Este documento PLAN
2. Especificacion tecnica ET-ML-006
3. Actualizar _MAP.md de OQI-006
4. Actualizar inventarios si aplica

**Artefactos generados:**
- `docs/.../PLAN-ENHANCED-RANGE-PREDICTOR.md`
- `docs/.../ET-ML-006-enhanced-range-predictor.md`

**Validacion:**
- [x] Documentos siguen templates estandar
- [x] Referencias actualizadas

---

## DEPENDENCIAS

### Depende de:
- [OQI-006]: Arquitectura ML existente
- [RF-ML-001]: Prediccion de precios

### Bloquea:
- [OQI-007]: LLM Agent puede usar estas predicciones mejoradas

### Requerimientos externos:
- Datos historicos OHLCV (5 anos para modelo largo plazo)
- XGBoost >= 2.0
- Python >= 3.11

---

## RIESGOS IDENTIFICADOS

| Riesgo | Probabilidad | Impacto | Mitigacion |
|--------|-------------|---------|------------|
| Datos insuficientes para 5 anos | Media | Alto | Usar datos disponibles, ajustar horizon |
| Overfitting modelo corto plazo | Media | Medio | Regularizacion, depth bajo, retrain periodico |
| Pesos extremos en sesiones | Baja | Medio | Normalizacion a media=1 |
| Performance lenta en prediccion | Baja | Medio | Modelos optimizados, cache |

---

## ESTIMACIONES

**Tiempo total estimado:** 10 horas

**Desglose:**
- Analisis: 1h
- Desarrollo: 7h
- Testing: 1h
- Documentacion: 1h
- Buffer (15%): 1.5h

**Recursos necesarios:**
- Agentes: ML-Specialist, Trading-Strategist
- Herramientas: Python, XGBoost, Pandas

---

## DOCUMENTACION GENERADA

**Durante ejecucion:**
- [x] Codigo documentado con docstrings
- [x] Comentarios inline en secciones complejas

**Post-ejecucion:**
- [x] PLAN-ENHANCED-RANGE-PREDICTOR.md (este documento)
- [x] ET-ML-006-enhanced-range-predictor.md
- [ ] Actualizacion de _MAP.md
- [ ] Reporte de entrenamiento (generado por script)

---

## CRITERIOS DE EXITO

La tarea se considera **COMPLETADA** cuando:

- [x] Todos los ciclos ejecutados exitosamente
- [x] 6 modulos creados y funcionales
- [x] Documentacion completa segun estandares
- [ ] Inventarios actualizados
- [x] Sin errores de ejecucion
- [x] Tests de modulo pasan
- [x] Cumple estandares de codigo

---

## ARCHIVOS CREADOS

| Archivo | Tipo | Lineas | Proposito |
|---------|------|--------|-----------|
| `src/training/sample_weighting.py` | Python | 345 | Ponderacion por magnitud |
| `src/training/session_volatility_weighting.py` | Python | 422 | Ponderacion por sesion/ATR |
| `src/data/corrected_targets.py` | Python | 441 | Targets con formula corregida |
| `src/models/dual_horizon_ensemble.py` | Python | 452 | Ensemble largo/corto plazo |
| `src/models/enhanced_range_predictor.py` | Python | 510 | Integrador principal |
| `scripts/train_enhanced_model.py` | Python | 380 | CLI de entrenamiento |

**Total:** ~2,550 lineas de codigo

---

## ARCHIVOS MODIFICADOS (Integracion v2.0)

| Archivo | Cambios | Proposito |
|---------|---------|-----------|
| `src/models/range_predictor.py` | +80 lineas | Integracion sample/session weighting |
| `src/models/movement_magnitude_predictor.py` | +90 lineas | Integracion sample/session weighting |
| `src/models/amd_detector_ml.py` | +100 lineas | Integracion sample/session weighting |

**Cambios en modelos existentes:**
- Import de modulos de weighting con fallback graceful
- Nuevos parametros: `use_sample_weighting`, `use_session_weighting`
- Metodo `compute_sample_weights()` para calculo combinado
- Modificacion de `fit()`/`train()` para usar `sample_weight` en XGBoost

**Total adicional:** ~270 lineas de codigo

---

## REFERENCIAS

**Documentacion del proyecto:**
- RF-ML-001: docs/02-definicion-modulos/OQI-006-ml-signals/requerimientos/RF-ML-001-predicciones.md
- ET-ML-002: docs/02-definicion-modulos/OQI-006-ml-signals/especificaciones/ET-ML-002-modelos.md
- Vision: docs/00-vision-general/VISION-PRODUCTO.md

**Templates usados:**
- TEMPLATE-PLAN.md: orchestration/templates/TEMPLATE-PLAN.md

---

**Version:** 1.0
**Ultima actualizacion:** 2026-01-05
**Estado:** Completado
