# 02-ANÁLISIS: Mejora Integral de Modelos ML para Trading **Task ID:** TASK-2026-01-25-ML-TRAINING-ENHANCEMENT **Fase:** A - Análisis **Estado:** Completada **Fecha:** 2026-01-25 --- ## 1. COMPORTAMIENTO DESEADO (Perspectiva de Negocio) ### 1.1 Visión del Sistema ``` ┌─────────────────────────────────────────────────────────────────────────────────┐ │ SISTEMA ML DE TRADING OBJETIVO │ ├─────────────────────────────────────────────────────────────────────────────────┤ │ │ │ [Datos de Mercado] → [5 Estrategias ML] → [Metamodelo Ensemble] → [LLM Agent] │ │ ↓ ↓ │ │ [Atención sobre [Decisión │ │ Variación Precio] de Trading] │ │ ↓ │ │ [Ejecución MT4] │ │ ↓ │ │ [80%+ Efectividad] │ │ │ └─────────────────────────────────────────────────────────────────────────────────┘ ``` ### 1.2 Comportamientos Esperados | ID | Comportamiento | Descripción | |----|----------------|-------------| | B1 | Predicción Multi-Estrategia | El sistema genera predicciones desde 5 estrategias independientes | | B2 | Atención Dinámica | El modelo aprende a enfocarse en patrones de variación de precio relevantes | | B3 | Especialización por Activo | Cada activo tiene su propio modelo entrenado | | B4 | Síntesis Ensemble | Un metamodelo combina las predicciones de todas las estrategias | | B5 | Decisión LLM Informada | El LLM recibe señales procesadas para tomar decisiones | | B6 | Agnóstico Temporal | Las predicciones no dependen del horario específico | | B7 | Efectividad Verificable | Cada operación se puede rastrear a la predicción que la generó | --- ## 2. ANÁLISIS DE ARQUITECTURAS EXISTENTES ### 2.1 Proyecto Antiguo (WorkspaceOld/trading) #### Fortalezas - **Ensemble XGBoost + GRU**: Combina gradiente boosting con redes recurrentes - **22 indicadores técnicos** bien calibrados - **Horizontes múltiples** (0, 1, 2, 4 períodos) - **Predicción triple** (high, close, low) - **Datos históricos extensos** (10+ años) #### Debilidades - Sin mecanismos de atención explícitos - Modelos no especializados por activo - Sin integración LLM - Arquitectura monolítica #### Conocimiento a Migrar ```yaml indicadores_tecnicos: momentum: - MACD (12/26/9) - RSI (periodo 14) - ROC (Rate of Change) volatilidad: - ATR (periodo 10) - Bollinger Bands volumen: - OBV (On-Balance Volume) - MFI (Money Flow Index, periodo 14) - CMF (Chaikin Money Flow, periodo 20) - volume_z (Z-score, rolling 20) - volume_anomaly (binario) estructura: - SAR (Parabolic SAR) - Fractal_Alcista (5-bar) - Fractal_Bajista (5-bar) - AD (Accumulation/Distribution) medias: - SMA_10, SMA_20 ventanas_rodantes: - 15m (3 velas de 5min) - 60m (12 velas de 5min) - 120m (24 velas de 5min) targets: - target_pct_hour: (close_hour_final - close) / close ``` ### 2.2 Proyecto Actual (trading-platform) #### Fortalezas - **Arquitectura jerárquica** (Level 0/1/2) - **Mecanismos de atención** implementados (Level 0) - **15 modelos especializados** - **Integración LLM** existente - **Backtesting engine** funcional - **Walk-forward validation** #### Debilidades - Solo 1 año de datos (469K bars) - Level 2 (AssetMetamodel) incompleto - Accuracy actual ~65-70% - Estrategia única (no diversificada) #### Modelos Existentes a Mejorar ```yaml level_0_attention: - AttentionScoreModel (flujo de mercado) - 12 modelos entrenados por símbolo+timeframe level_1_prediction: - AMDDetector (fases Smart Money) - RangePredictor v1/v2 (high/low) - SignalGenerator (señales trading) - EnhancedRangePredictor - TPSLClassifier level_2_synthesis: - AssetMetamodel (PENDIENTE) - DualHorizonEnsemble - StrategyEnsemble - NeuralGatingMetamodel ``` --- ## 3. DISEÑO DE 5 ESTRATEGIAS DE MODELOS ### 3.1 Estrategia 1: PRICE-VARIATION-ATTENTION (PVA) **Enfoque:** Atención sobre variación de precio pura, agnóstica al tiempo y activo. ```yaml nombre: "Price Variation Attention" codigo: "PVA" arquitectura: tipo: "Transformer Encoder + XGBoost Head" attention_mechanism: "Self-Attention sobre secuencias de retornos" features: primarios: - returns_1: (close[t] - close[t-1]) / close[t-1] - returns_5: (close[t] - close[t-5]) / close[t-5] - returns_10: (close[t] - close[t-10]) / close[t-10] - returns_20: (close[t] - close[t-20]) / close[t-20] derivados: - acceleration: returns_1[t] - returns_1[t-1] - volatility_returns: std(returns_5, window=20) - skewness_returns: skew(returns_10, window=50) - kurtosis_returns: kurt(returns_10, window=50) attention_scores: - attention_weight_1 a attention_weight_seq_len (aprendidos) targets: - future_return_1h: (close[t+12] - close[t]) / close[t] # 12 velas de 5min = 1h - future_volatility: std(returns próximos 12 períodos) - direction_confidence: softmax([-1, 0, +1]) entrenamiento: sequence_length: 100 # velas de contexto batch_size: 256 learning_rate: 0.0001 epochs: 100 early_stopping: 10 modelo_por_activo: true ignorar_horario: true # No usar features de sesión ``` ### 3.2 Estrategia 2: MOMENTUM-REGIME-DETECTION (MRD) **Enfoque:** Detectar régimen de mercado (tendencia/rango) y predecir continuación. ```yaml nombre: "Momentum Regime Detection" codigo: "MRD" arquitectura: tipo: "Hidden Markov Model + LSTM + XGBoost" hmm_states: 3 # Trend Up, Range, Trend Down features: momentum: - rsi_14, rsi_28 - macd, macd_signal, macd_histogram - roc_5, roc_10, roc_20 - adx, +di, -di tendencia: - ema_crossover_9_21: sign(ema_9 - ema_21) - ema_crossover_21_50: sign(ema_21 - ema_50) - price_vs_ema_200: (close - ema_200) / ema_200 regimen: - hmm_state: [0, 1, 2] # Detectado por HMM - regime_probability: softmax de HMM - regime_duration: velas desde último cambio targets: - next_regime: estado HMM en t+12 - regime_duration_prediction: cuántas velas durará el régimen - momentum_continuation: bool (momentum sigue en misma dirección) entrenamiento: hmm_iterations: 100 lstm_units: 128 dropout: 0.3 modelo_por_activo: true incluir_sesion: false # Régimen es agnóstico ``` ### 3.3 Estrategia 3: VOLATILITY-BREAKOUT-PREDICTOR (VBP) **Enfoque:** Predecir breakouts basados en compresión de volatilidad. ```yaml nombre: "Volatility Breakout Predictor" codigo: "VBP" arquitectura: tipo: "CNN 1D + Attention + XGBoost" cnn_filters: [32, 64, 128] kernel_sizes: [3, 5, 7] features: volatilidad: - atr_5, atr_10, atr_20, atr_50 - bb_width: (bb_upper - bb_lower) / bb_middle - bb_squeeze: bool(bb_width < bb_width.rolling(50).quantile(0.2)) - keltner_squeeze: bb dentro de keltner channels - historical_volatility: std(returns, window=20) * sqrt(252) rango: - hl_range: (high - low) / close - hl_range_vs_atr: hl_range / atr_10 - compression_score: min(hl_range últimas 10 velas) / max(hl_range últimas 50) expansion: - expansion_imminent: compression_score < 0.3 - breakout_direction_bias: sign(close - open de la compresión) targets: - breakout_next_12: bool(max(high[t:t+12]) - min(low[t:t+12]) > 2*atr) - breakout_direction: [-1, 0, +1] (down, no breakout, up) - breakout_magnitude: (high_max - low_min) / close si breakout entrenamiento: imbalanced_sampling: true # Breakouts son raros oversample_breakouts: 3x modelo_por_activo: true ``` ### 3.4 Estrategia 4: MARKET-STRUCTURE-ANALYSIS (MSA) **Enfoque:** Análisis de estructura de mercado (ICT/SMC concepts). ```yaml nombre: "Market Structure Analysis" codigo: "MSA" arquitectura: tipo: "Graph Neural Network + XGBoost" gnn_layers: 4 node_features: swing_points features: estructura: - swing_high: high mayor que 2 altos anteriores y posteriores - swing_low: low menor que 2 bajos anteriores y posteriores - higher_high: swing_high > swing_high anterior - lower_low: swing_low < swing_low anterior - bos_up: Break of Structure alcista - bos_down: Break of Structure bajista - choch: Change of Character (cambio de tendencia) zonas: - order_block_bullish: última vela bajista antes de BOS alcista - order_block_bearish: última vela alcista antes de BOS bajista - fvg_bullish: Fair Value Gap alcista - fvg_bearish: Fair Value Gap bajista - liquidity_sweep: barrido de liquidez posicion: - price_vs_poi: distancia a Point of Interest más cercano - poi_type: [order_block, fvg, swing, none] - premium_discount: precio en zona premium (>50%) o discount (<50%) targets: - next_bos_direction: [-1, +1] próximo BOS - poi_reaction: bool (precio reacciona al POI) - structure_continuation: bool (estructura continúa) entrenamiento: graph_attention: true node_aggregation: "mean" modelo_por_activo: true ``` ### 3.5 Estrategia 5: MULTI-TIMEFRAME-SYNTHESIS (MTS) **Enfoque:** Síntesis de señales de múltiples timeframes con ponderación dinámica. ```yaml nombre: "Multi-Timeframe Synthesis" codigo: "MTS" arquitectura: tipo: "Hierarchical Attention Network" timeframes: [5m, 15m, 1h, 4h] attention_per_tf: true features_por_timeframe: 5m: - all_base_features (momentum, volatility, volume) - micro_structure (last 50 bars) 15m: - aggregated_features - trend_alignment_5m 1h: - session_context - intraday_trend 4h: - swing_structure - major_trend synthesis: - tf_alignment_score: concordancia entre timeframes - dominant_tf: timeframe con señal más fuerte - conflict_score: nivel de conflicto entre TFs targets: - unified_direction: [-1, 0, +1] consenso de TFs - confidence_by_alignment: 0-1 basado en concordancia - optimal_entry_tf: cuál TF da mejor entry entrenamiento: hierarchical_loss: true tf_weights: learnable modelo_por_activo: true ``` --- ## 4. ARQUITECTURA DE ATENCIÓN PROPUESTA ### 4.1 Price-Focused Attention Mechanism ``` ┌─────────────────────────────────────────────────────────────────────────────────┐ │ PRICE-FOCUSED ATTENTION ARCHITECTURE │ ├─────────────────────────────────────────────────────────────────────────────────┤ │ │ │ Input: Secuencia de Retornos [r_1, r_2, ..., r_T] │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ Positional Encoding (Learnable) │ │ │ │ SIN usar información temporal real │ │ │ │ Solo posición relativa en secuencia │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ Self-Attention Layer x 4 │ │ │ │ │ │ │ │ Q = W_q * X K = W_k * X V = W_v * X │ │ │ │ │ │ │ │ Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) * V │ │ │ │ │ │ │ │ Multi-Head: 8 heads, d_model=256, d_k=32 │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ Feed-Forward Network │ │ │ │ FFN(x) = ReLU(xW_1 + b_1)W_2 + b_2 │ │ │ │ d_ff = 1024 │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ Attention Score Extraction │ │ │ │ scores = mean(attention_weights, dim=heads) │ │ │ │ top_k_positions = argsort(scores)[-k:] │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ XGBoost Prediction Head │ │ │ │ Input: [attended_features, attention_scores, raw] │ │ │ │ Output: [direction, magnitude, confidence] │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────┘ ``` ### 4.2 Características Clave 1. **Sin Información Temporal Explícita:** No usa features de hora/día/sesión 2. **Solo Variación de Precio:** Features basados únicamente en retornos y derivados 3. **Atención Aprendida:** El modelo aprende qué variaciones son relevantes 4. **Agnóstico al Activo:** Arquitectura idéntica para todos los activos (pesos diferentes) --- ## 5. ARQUITECTURA DE METAMODELO ENSEMBLE ### 5.1 Neural Gating Metamodel ``` ┌─────────────────────────────────────────────────────────────────────────────────┐ │ NEURAL GATING METAMODEL │ ├─────────────────────────────────────────────────────────────────────────────────┤ │ │ │ Inputs: │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ PVA │ │ MRD │ │ VBP │ │ MSA │ │ MTS │ │ │ │ pred,conf│ │ pred,conf│ │ pred,conf│ │ pred,conf│ │ pred,conf│ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ │ │ └────────────┴────────────┴────────────┴────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ Gating Network │ │ │ │ Input: [all_predictions, all_confidences, market_ctx] │ │ │ │ Output: weights = softmax(gate_logits) │ │ │ │ Architecture: 3-layer MLP (256, 128, 5) │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ Weighted Ensemble │ │ │ │ final_pred = sum(weights * predictions) │ │ │ │ final_conf = weighted_confidence(weights, confs) │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ Output │ │ │ │ - direction: [-1, 0, +1] │ │ │ │ - magnitude: expected % move │ │ │ │ - confidence: 0-1 │ │ │ │ - strategy_attribution: which strategy dominated │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────┘ ``` ### 5.2 Lógica de Gating ```python class NeuralGatingMetamodel: def forward(self, strategy_outputs, market_context): # Concatenar outputs de todas las estrategias features = torch.cat([ strategy_outputs['PVA'], # [pred, conf] strategy_outputs['MRD'], strategy_outputs['VBP'], strategy_outputs['MSA'], strategy_outputs['MTS'], market_context, # volatility, regime, etc. ], dim=-1) # Gating network decide pesos gate_logits = self.gate_network(features) weights = F.softmax(gate_logits, dim=-1) # Ensemble ponderado predictions = torch.stack([ strategy_outputs[s]['prediction'] for s in STRATEGIES ], dim=-1) final_prediction = (weights * predictions).sum(dim=-1) return { 'prediction': final_prediction, 'weights': weights, 'confidence': self.confidence_head(features), } ``` --- ## 6. INTEGRACIÓN LLM PROPUESTA ### 6.1 Flujo de Decisión ``` ┌─────────────────────────────────────────────────────────────────────────────────┐ │ LLM DECISION INTEGRATION │ ├─────────────────────────────────────────────────────────────────────────────────┤ │ │ │ 1. ML Engine genera predicciones │ │ ↓ │ │ 2. Metamodel sintetiza señal final │ │ ↓ │ │ 3. Signal Formatter prepara prompt para LLM │ │ ↓ │ │ 4. LLM analiza contexto + predicciones │ │ ↓ │ │ 5. LLM decide: TRADE / NO_TRADE / WAIT │ │ ↓ │ │ 6. Si TRADE: LLM define entry, SL, TP │ │ ↓ │ │ 7. Trading Agent ejecuta │ │ ↓ │ │ 8. Signal Logger registra resultado │ │ ↓ │ │ 9. Fine-tuning loop (feedback) │ │ │ └─────────────────────────────────────────────────────────────────────────────────┘ ``` ### 6.2 Prompt Structure para LLM ```python TRADING_DECISION_PROMPT = """ ## Market Analysis for {symbol} ### ML Predictions (Ensemble) - Direction: {direction} (confidence: {confidence}%) - Predicted Move: {magnitude}% - Dominant Strategy: {dominant_strategy} - Strategy Agreement: {agreement_score}/5 ### Individual Strategy Signals | Strategy | Direction | Confidence | Weight | |----------|-----------|------------|--------| {strategy_table} ### Current Market Context - Volatility Regime: {volatility_regime} - Market Structure: {market_structure} - Key Levels: {key_levels} ### Risk Parameters - Account Balance: {balance} - Max Risk per Trade: {max_risk}% - Current Open Positions: {open_positions} ### Task Analyze the above information and decide: 1. Should we take this trade? (YES/NO/WAIT) 2. If YES, provide: - Entry price (or MARKET) - Stop Loss level - Take Profit level(s) - Position size (% of balance) 3. Reasoning (brief) Response Format: DECISION: [YES|NO|WAIT] ENTRY: [price] STOP_LOSS: [price] TAKE_PROFIT: [price1, price2] POSITION_SIZE: [%] REASONING: [text] """ ``` --- ## 7. OBJETOS IMPACTADOS ### 7.1 Base de Datos (PostgreSQL) | Schema | Tabla | Cambio | |--------|-------|--------| | ml | model_registry | Agregar campos para 5 estrategias | | ml | predictions | Agregar columnas por estrategia | | ml | strategy_weights | NUEVA - pesos del gating | | ml | training_runs | Agregar metadata de estrategia | | ml | backtest_results | Agregar resultados por estrategia | | ml | attention_weights | NUEVA - scores de atención guardados | ### 7.2 Backend (ml-engine) | Archivo/Directorio | Cambio | |-------------------|--------| | `src/models/` | Agregar 5 nuevos modelos de estrategia | | `src/models/attention/` | Implementar Price-Focused Attention | | `src/models/metamodel/` | Implementar Neural Gating Metamodel | | `src/training/` | Agregar trainers por estrategia | | `src/pipelines/` | Nuevo pipeline multi-estrategia | | `src/api/` | Nuevos endpoints para predicciones ensemble | | `config/` | Configuración por estrategia | ### 7.3 Documentación | Archivo | Cambio | |---------|--------| | `docs/02-definicion-modulos/OQI-006-ml-signals/_MAP.md` | Actualizar con nuevas estrategias | | `docs/02-definicion-modulos/OQI-006-ml-signals/README.md` | Documentar arquitectura ensemble | | `docs/02-definicion-modulos/OQI-006-ml-signals/especificaciones/` | Nuevas specs técnicas | | `orchestration/inventarios/ML_INVENTORY.yml` | NUEVO - inventario de modelos | --- ## 8. DEPENDENCIAS IDENTIFICADAS ### 8.1 Dependencias Técnicas ```yaml dependencias_tecnicas: python: - torch>=2.0.0 # Para Transformers - xgboost>=2.0.0 # Gradient Boosting - hmmlearn>=0.3.0 # Hidden Markov Models - torch-geometric>=2.4.0 # Graph Neural Networks (opcional) - einops>=0.7.0 # Tensor operations datos: - Migración de datos históricos de WorkspaceOld (5.6 GB) - Al menos 5 años de datos para entrenamiento robusto infraestructura: - GPU con 16GB+ VRAM (disponible) - PostgreSQL con espacio para modelos serializados ``` ### 8.2 Dependencias de Tareas ```yaml orden_ejecucion: fase_1_infraestructura: - TASK-ML-DATA-PIPELINE # Migrar datos históricos - TASK-ML-ATTENTION-ARCHITECTURE # Implementar attention base fase_2_estrategias: # Pueden ejecutarse en paralelo - TASK-ML-STRATEGY-1-PVA - TASK-ML-STRATEGY-2-MRD - TASK-ML-STRATEGY-3-VBP - TASK-ML-STRATEGY-4-MSA - TASK-ML-STRATEGY-5-MTS fase_3_integracion: - TASK-ML-METAMODEL-ENSEMBLE # Requiere fase 2 completa - TASK-ML-LLM-INTEGRATION # Requiere metamodel fase_4_validacion: - TASK-ML-BACKTESTING-VALIDATION # Requiere todo lo anterior ``` --- ## 9. RIESGOS IDENTIFICADOS | ID | Riesgo | Probabilidad | Impacto | Mitigación | |----|--------|--------------|---------|------------| | R1 | Overfitting en modelos complejos | Alta | Alto | Walk-forward validation, regularization | | R2 | Datos insuficientes para 5 estrategias | Media | Alto | Migrar datos históricos, data augmentation | | R3 | Latencia excesiva en inference | Media | Medio | Batch prediction, model optimization | | R4 | Conflicto entre estrategias | Alta | Medio | Gating network aprende a ponderar | | R5 | LLM toma decisiones incorrectas | Media | Alto | Fine-tuning con feedback, safety limits | | R6 | Régimen de mercado no visto | Baja | Alto | Ensemble diversificado, fallback rules | --- ## 10. ESTIMACIÓN DE RECURSOS ### 10.1 Cómputo | Componente | GPU Hours | RAM | Storage | |------------|-----------|-----|---------| | Data Pipeline | 0 | 32GB | 10GB | | PVA Training | 100h | 16GB | 2GB | | MRD Training | 50h | 16GB | 2GB | | VBP Training | 30h | 16GB | 1GB | | MSA Training | 80h | 16GB | 2GB | | MTS Training | 120h | 16GB | 3GB | | Metamodel | 20h | 16GB | 1GB | | Backtesting | 10h | 32GB | 5GB | | **TOTAL** | **410h** | **32GB** | **26GB** | ### 10.2 Desarrollo (Story Points) | Subtarea | SP | |----------|-------| | Data Pipeline | 8 | | Attention Architecture | 13 | | Strategy 1-5 (cada una) | 8 × 5 = 40 | | Metamodel Ensemble | 13 | | LLM Integration | 8 | | Backtesting Validation | 8 | | **TOTAL** | **90 SP** | --- **Siguiente Fase:** 03-PLANEACION.md