# ET-ML-009: Arquitectura Multi-Strategy Ensemble **Versión:** 1.0.0 **Fecha:** 2026-01-25 **Estado:** PLANIFICADO **Prioridad:** P0 **Tarea Relacionada:** TASK-2026-01-25-ML-TRAINING-ENHANCEMENT --- ## 1. RESUMEN EJECUTIVO Esta especificación técnica define la arquitectura de un sistema multi-estrategia con Neural Gating Metamodel para predicciones de trading. El objetivo es alcanzar **80% de efectividad** en operaciones mediante la combinación de 5 estrategias diversificadas. --- ## 2. ARQUITECTURA GENERAL ``` ┌─────────────────────────────────────────────────────────────────────────────────┐ │ MULTI-STRATEGY ENSEMBLE ARCHITECTURE │ ├─────────────────────────────────────────────────────────────────────────────────┤ │ │ │ [Market Data] → [Feature Engineering] → [5 Strategies] → [Metamodel] → [LLM] │ │ │ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │ │ LEVEL 0: Attention Base │ │ │ │ Price-Focused Attention (sin información temporal) │ │ │ └────────────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │ │ LEVEL 1: Strategy Models (5) │ │ │ │ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ │ │ │ │ PVA │ │ MRD │ │ VBP │ │ MSA │ │ MTS │ │ │ │ │ └───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘ │ │ │ └──────┼─────────┼─────────┼─────────┼─────────┼────────────────────────┘ │ │ └─────────┴─────────┴─────────┴─────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │ │ LEVEL 2: Neural Gating Metamodel │ │ │ │ - Weighted Ensemble │ │ │ │ - Confidence Calibration │ │ │ └────────────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │ │ LEVEL 3: LLM Decision Integration │ │ │ │ - Signal Formatting │ │ │ │ - Trading Decision (TRADE/NO_TRADE/WAIT) │ │ │ └────────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 3. ESTRATEGIAS DETALLADAS ### 3.1 Strategy 1: PVA (Price Variation Attention) **Objetivo:** Capturar patrones en variación de precio pura, agnóstica al tiempo. | Aspecto | Especificación | |---------|----------------| | **Arquitectura** | Transformer Encoder (4 layers) + XGBoost Head | | **Input** | Secuencia de retornos [r_1, r_2, ..., r_T], T=100 | | **Features** | returns (1,5,10,20), acceleration, volatility_returns, skewness, kurtosis | | **Attention** | Multi-head (8 heads), d_model=256, d_k=32 | | **Output** | direction [-1,0,+1], magnitude (%), confidence (0-1) | | **Entrenamiento** | Walk-forward, batch=256, lr=0.0001, epochs=100 | | **Modelos** | 6 (uno por activo) | **Archivos:** - `src/models/strategies/pva/transformer_encoder.py` - `src/models/strategies/pva/xgb_head.py` - `src/features/returns_features.py` ### 3.2 Strategy 2: MRD (Momentum Regime Detection) **Objetivo:** Detectar régimen de mercado (tendencia/rango) y predecir continuación. | Aspecto | Especificación | |---------|----------------| | **Arquitectura** | HMM (3 estados) + LSTM (128 units) + XGBoost | | **Input** | Indicadores de momentum + estado HMM | | **Features** | RSI, MACD, ROC, ADX, +DI, -DI, EMA crossovers | | **HMM States** | [Trend Up, Range, Trend Down] | | **Output** | next_regime, regime_duration, momentum_continuation | | **Entrenamiento** | HMM fit + LSTM supervised + XGBoost ensemble | | **Modelos** | 6 (uno por activo) | **Archivos:** - `src/models/strategies/mrd/hmm_regime.py` - `src/models/strategies/mrd/lstm_predictor.py` - `src/features/momentum_features.py` ### 3.3 Strategy 3: VBP (Volatility Breakout Predictor) **Objetivo:** Predecir breakouts basados en compresión de volatilidad. | Aspecto | Especificación | |---------|----------------| | **Arquitectura** | CNN 1D (filters [32,64,128]) + Attention + XGBoost | | **Input** | Features de volatilidad y compresión | | **Features** | ATR, BB_width, BB_squeeze, Keltner_squeeze, compression_score | | **Output** | breakout_next_12 (bool), direction, magnitude | | **Entrenamiento** | Imbalanced sampling (oversample breakouts 3x) | | **Modelos** | 6 (uno por activo) | **Archivos:** - `src/models/strategies/vbp/cnn_encoder.py` - `src/models/strategies/vbp/breakout_classifier.py` - `src/features/volatility_features.py` ### 3.4 Strategy 4: MSA (Market Structure Analysis) **Objetivo:** Análisis de estructura de mercado (ICT/SMC concepts). | Aspecto | Especificación | |---------|----------------| | **Arquitectura** | XGBoost (con opción de GNN para relaciones) | | **Input** | Swing points, BOS, CHoCH, FVG, Order Blocks | | **Features** | swing_high/low, higher_high/lower_low, bos_up/down, choch, fvg, ob | | **Output** | next_bos_direction, poi_reaction, structure_continuation | | **Entrenamiento** | Supervised con labels de estructura | | **Modelos** | 6 (uno por activo) | **Archivos:** - `src/models/strategies/msa/structure_detector.py` - `src/models/strategies/msa/structure_predictor.py` - `src/features/structure_features.py` ### 3.5 Strategy 5: MTS (Multi-Timeframe Synthesis) **Objetivo:** Síntesis de señales de múltiples timeframes. | Aspecto | Especificación | |---------|----------------| | **Arquitectura** | Hierarchical Attention Network | | **Input** | Features agregados de 5m, 15m, 1h, 4h | | **Features** | All base features + tf_alignment_score + conflict_score | | **Output** | unified_direction, confidence_by_alignment, optimal_entry_tf | | **Entrenamiento** | Hierarchical loss con TF weights aprendibles | | **Modelos** | 6 (uno por activo) | **Archivos:** - `src/models/strategies/mts/hierarchical_attention.py` - `src/models/strategies/mts/tf_aggregator.py` - `src/features/multitf_features.py` --- ## 4. NEURAL GATING METAMODEL ### 4.1 Arquitectura ```python class NeuralGatingMetamodel(nn.Module): def __init__(self, n_strategies=5, d_input=10, d_hidden=256): super().__init__() self.gate_network = nn.Sequential( nn.Linear(n_strategies * d_input + d_context, d_hidden), nn.BatchNorm1d(d_hidden), nn.ReLU(), nn.Dropout(0.3), nn.Linear(d_hidden, d_hidden // 2), nn.ReLU(), nn.Linear(d_hidden // 2, n_strategies) ) self.confidence_head = nn.Sequential( nn.Linear(d_hidden // 2, 1), nn.Sigmoid() ) def forward(self, strategy_outputs, market_context): # Concatenar outputs de estrategias + contexto features = torch.cat([ *[s['pred_conf'] for s in strategy_outputs.values()], market_context ], dim=-1) # Gating network gate_logits = self.gate_network(features) weights = F.softmax(gate_logits, dim=-1) # Weighted ensemble predictions = torch.stack([ s['prediction'] for s in strategy_outputs.values() ], dim=-1) final_pred = (weights * predictions).sum(dim=-1) return { 'prediction': final_pred, 'weights': weights, 'confidence': self.confidence_head(features[:, :256]) } ``` ### 4.2 Entrenamiento del Gating - **Loss:** Weighted cross-entropy + KL divergence para regularización - **Regularización:** Entropy bonus para evitar colapso a una estrategia - **Datos:** Predicciones de las 5 estrategias en validation set --- ## 5. INTEGRACIÓN LLM ### 5.1 Signal Formatter ```python def format_signal_for_llm(metamodel_output, strategy_outputs, market_context): return f""" ## ML Prediction Summary for {market_context['symbol']} ### Ensemble Prediction - Direction: {metamodel_output['direction']} (confidence: {metamodel_output['confidence']:.1%}) - Predicted Move: {metamodel_output['magnitude']:.2%} - Strategy Agreement: {calculate_agreement(strategy_outputs)}/5 ### Individual Strategies | Strategy | Direction | Confidence | Weight | |----------|-----------|------------|--------| {format_strategy_table(strategy_outputs, metamodel_output['weights'])} ### Market Context - Volatility Regime: {market_context['volatility_regime']} - Current Trend: {market_context['trend']} - Key Levels: {market_context['key_levels']} """ ``` ### 5.2 Decision Parsing ```python def parse_llm_decision(response: str) -> TradingDecision: """Parse LLM response into structured trading decision.""" lines = response.strip().split('\n') decision = {} for line in lines: if line.startswith('DECISION:'): decision['action'] = line.split(':')[1].strip() elif line.startswith('ENTRY:'): decision['entry'] = float(line.split(':')[1].strip()) elif line.startswith('STOP_LOSS:'): decision['stop_loss'] = float(line.split(':')[1].strip()) elif line.startswith('TAKE_PROFIT:'): decision['take_profit'] = parse_tp_levels(line.split(':')[1]) elif line.startswith('POSITION_SIZE:'): decision['position_size'] = float(line.split(':')[1].strip().rstrip('%')) return TradingDecision(**decision) ``` --- ## 6. MÉTRICAS Y VALIDACIÓN ### 6.1 Métricas por Estrategia | Métrica | Objetivo | Medición | |---------|----------|----------| | Direction Accuracy | ≥60% | Validation set | | MAE (Magnitude) | ≤1% | Validation set | | Sharpe Ratio | ≥1.0 | Backtesting | | Max Drawdown | ≤20% | Backtesting | ### 6.2 Métricas del Ensemble | Métrica | Objetivo | Medición | |---------|----------|----------| | Efectividad Operaciones | ≥80% | Backtesting con LLM | | Sharpe Ratio | ≥1.5 | Backtesting | | Max Drawdown | ≤15% | Backtesting | | Calibration Error | ≤5% | Reliability diagram | ### 6.3 Backtesting Protocol 1. **Walk-Forward Validation:** 80% train, 10% val, 10% test 2. **Out-of-Sample Period:** Últimos 6 meses 3. **Slippage:** 0.5 pips para forex, 0.1% para crypto 4. **Commission:** 0.1% por trade 5. **Position Sizing:** Kelly criterion con max 2% --- ## 7. CONFIGURACIÓN ### 7.1 Config por Estrategia ```yaml # config/strategies/pva.yaml strategy_name: "PVA" architecture: encoder: type: "transformer" n_layers: 4 n_heads: 8 d_model: 256 d_ff: 1024 dropout: 0.1 head: type: "xgboost" n_estimators: 500 max_depth: 6 learning_rate: 0.05 features: returns_periods: [1, 5, 10, 20] include_derivatives: true sequence_length: 100 training: batch_size: 256 learning_rate: 0.0001 epochs: 100 early_stopping_patience: 10 walk_forward_folds: 5 ``` ### 7.2 Config del Metamodel ```yaml # config/metamodel.yaml metamodel_name: "NeuralGating" architecture: n_strategies: 5 d_hidden: 256 dropout: 0.3 training: batch_size: 128 learning_rate: 0.001 epochs: 50 entropy_regularization: 0.01 calibration: method: "isotonic" cv_folds: 5 ``` --- ## 8. ENDPOINTS API ### 8.1 Prediction Endpoint ``` POST /api/ml/predict/ensemble Request: { "symbol": "XAUUSD", "timeframe": "5m", "include_strategies": true } Response: { "prediction": { "direction": 1, "magnitude": 0.0032, "confidence": 0.78 }, "weights": { "PVA": 0.25, "MRD": 0.20, "VBP": 0.15, "MSA": 0.25, "MTS": 0.15 }, "strategies": { "PVA": {"direction": 1, "confidence": 0.72}, "MRD": {"direction": 1, "confidence": 0.65}, "VBP": {"direction": 0, "confidence": 0.55}, "MSA": {"direction": 1, "confidence": 0.80}, "MTS": {"direction": 1, "confidence": 0.70} }, "timestamp": "2026-01-25T12:00:00Z" } ``` ### 8.2 Strategy Detail Endpoint ``` GET /api/ml/strategy/{strategy_name}/{symbol} Response: { "strategy": "PVA", "symbol": "XAUUSD", "prediction": {...}, "attention_scores": [...], "feature_importance": {...}, "model_version": "1.0.0", "last_trained": "2026-01-25" } ``` --- ## 9. DEPENDENCIAS ### 9.1 Python Packages ``` torch>=2.0.0 xgboost>=2.0.0 hmmlearn>=0.3.0 scikit-learn>=1.3.0 pandas>=2.0.0 numpy>=1.24.0 einops>=0.7.0 ``` ### 9.2 Infraestructura - GPU: NVIDIA con 16GB+ VRAM - PostgreSQL: Para almacenar modelos y predicciones - Redis: Para caché de predicciones --- ## 10. ROADMAP DE IMPLEMENTACIÓN | Fase | Descripción | Dependencia | |------|-------------|-------------| | 1 | Data Pipeline + Attention Architecture | - | | 2a | Strategy PVA | Fase 1 | | 2b | Strategy MRD | Fase 1 | | 2c | Strategy VBP | Fase 1 | | 2d | Strategy MSA | Fase 1 | | 2e | Strategy MTS | Fase 1 | | 3a | Neural Gating Metamodel | Fase 2 (todas) | | 3b | LLM Integration | Fase 3a | | 4 | Backtesting Validation | Fase 3b | --- ## 11. REFERENCIAS - **Tarea:** TASK-2026-01-25-ML-TRAINING-ENHANCEMENT - **Documentación existente:** ET-ML-001 a ET-ML-008 - **Proyecto antiguo:** C:\Empresas\WorkspaceOld\Projects\trading --- **Estado:** PLANIFICADO **Próximo paso:** Aprobación del plan e inicio de implementación