# Unified System Guide ## Overview The DualEA system features a **Unified Architecture** that eliminates redundancy by consolidating insights management and gating pipeline into three core components: `ConfigManager`, `EventBus`, and `SystemMonitor`. ## Core Components ### 1. ConfigManager (`ConfigManager.mqh`) Singleton configuration manager providing centralized configuration for gates, insights, and system settings. ```cpp // Access the singleton instance CConfigManager* config = CConfigManager::GetInstance(); // Configure gate parameters config->SetGateThreshold("SignalRinse", 0.65); config->SetGateEnabled("MarketSoap", true); // Configure insights config->SetInsightsAutoReload(true); config->SetInsightsFreshnessMinutes(60); // System settings config->SetVerboseLogging(true); config->SetNoConstraintsMode(false); ``` **Key Features:** - Per-gate configuration (8 gates with individual thresholds) - Insights auto-reload settings - System-wide flags (NoConstraintsMode, verbose logging) - Thread-safe singleton pattern ### 2. EventBus (`EventBus.mqh`) Cross-component communication with priority-based event logging. ```cpp // Log events with priority EventBus.Info("strategy_signal", "ADXStrategy generated buy signal"); EventBus.Warning("gate_blocked", "RiskWash blocked entry: spread too high"); EventBus.Error("policy_load", "Failed to parse policy.json"); // Query recent events string recentErrors[]; int count = EventBus.GetRecentErrors(recentErrors, 10); ``` **Event Priorities:** - `LOG_ERROR` (0): Critical failures requiring immediate attention - `LOG_WARNING` (1): Anomalies and gating blocks - `LOG_INFO` (2): Normal operations and signals - `LOG_DEBUG` (3): Detailed diagnostics (verbose mode only) ### 3. SystemMonitor (`SystemMonitor.mqh`) Real-time health monitoring and performance metrics. ```cpp // Record gate processing time SystemMonitor.RecordGateTime("SignalRinse", elapsedMicroseconds); // Update health score SystemMonitor.UpdateHealthScore(gateSuccessRate); // Get status report string report = SystemMonitor.GetStatusReport(); ``` **Metrics Tracked:** - Gate success rates per slice - Average processing times - Memory usage - Health score (0.0 - 1.0) - System alerts ## Integration Architecture ### Unified Gate System ```cpp // Initialize unified system (enabled by default) CGateManager* gateManager = new CGateManager(symbol, timeframe, learning, true); // The unified system automatically: // 1. Loads configuration from ConfigManager // 2. Logs all events via EventBus // 3. Reports metrics to SystemMonitor ``` ### Backward Compatibility Legacy code continues to work with unified components: ```cpp // Old approach (still works) CGateManager* gateManager = new CGateManager(); gateManager.Initialize(config); // New unified approach (recommended) CConfigManager* config = CConfigManager::GetInstance(); CEfficientGateManagerEnhanced* gateManager = new CEfficientGateManagerEnhanced(); gateManager.InitializeUnified(); ``` ## Configuration Parameters ### Gate Configuration ```cpp // News filtering UseNewsFilter, NewsBufferBeforeMin, NewsBufferAfterMin, NewsImpactMin // Trading windows UsePromotionGate, PromoStartHour, PromoEndHour // Market regime detection UseRegimeGate, RegimeATRPeriod, RegimeMinATRPct, RegimeMaxATRPct // Circuit breakers and insights CircuitCooldownSec, NoConstraintsMode InsightsAutoReload, InsightsLiveFreshMinutes, InsightsStaleHours ``` ### Execution Pipeline 1. **Early Phase**: Market condition validation and news filtering 2. **8-Stage Gate Processing**: Signal refinement through unified gate system 3. **Risk Management**: Position sizing and portfolio risk assessment 4. **Execution**: Trade placement with full audit trail and telemetry ## Key Benefits 1. **Single Source of Truth**: All configuration in one place 2. **Event-Driven Architecture**: Unified logging with severity levels 3. **Real-Time Monitoring**: Health scoring and performance metrics 4. **Backward Compatibility**: Legacy mode support 5. **Cross-EA Consistency**: Identical behavior in PaperEA and LiveEA ## Migration Guide ### From Legacy GateManager **Before:** ```cpp #include "Include/GateManager.mqh" CGateManager* gateManager = new CGateManager(); gateManager.SetThreshold(0.6); ``` **After:** ```cpp #include "Include/ConfigManager.mqh" #include "Include/EventBus.mqh" CConfigManager* config = CConfigManager::GetInstance(); config->SetGateThreshold("SignalRinse", 0.6); EventBus.Info("init", "Gate system initialized"); ``` ### From Manual Logging **Before:** ```cpp if(verbose) Print("[DEBUG] Signal generated: ", signal); ``` **After:** ```cpp EventBus.Debug("signal_gen", "Signal generated", signal); ``` ## Best Practices 1. **Always use ConfigManager** for configuration changes 2. **Log all significant events** via EventBus for observability 3. **Monitor health scores** to detect system degradation 4. **Use appropriate log levels** (Error for failures, Warning for blocks) 5. **Enable verbose logging** only for debugging sessions ## Troubleshooting ### Events not appearing in logs - Check `Verbosity` setting (must be >= event priority) - Verify EventBus is initialized in `OnInit()` ### Config changes not taking effect - Ensure `CConfigManager::GetInstance()` is used - Check for conflicting direct gate configuration ### High memory usage - SystemMonitor caches recent events (configurable limit) - Reduce `TelemetryBufferMax` in inputs ## Related Documentation - [README.md](README.md) - Main system documentation - [ConfigManager.mqh](../Include/ConfigManager.mqh) - Implementation - [EventBus.mqh](../Include/EventBus.mqh) - Event system - [SystemMonitor.mqh](../Include/CSystemMonitor.mqh) - Monitoring