mql5/Experts/Advisors/DualEA/docs/UnifiedSystemGuide.md
2026-04-14 19:36:52 -04:00

200 lines
5.6 KiB
Markdown

# 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