28 KiB
Configuration Reference — DualEA System
Actual input parameters from PaperEA_v2.mq5 and LiveEA.mq5
IMPORTANT: Previous versions of this document listed aspirational/planned inputs that do not exist in the code. This version documents only the actual
inputdeclarations found in the source files.
Quick Reference: Key Differences Between EAs
| Feature | PaperEA_v2 | LiveEA |
|---|---|---|
| NoConstraintsMode | default true |
default false |
| Policy Reload | Hot-reload via policy.reload + HTTP polling |
Load on init only (restart required) |
| Insights Rebuild | Input exists but not implemented | Requests rebuild via insights.reload |
| Signal Generation | 23 indicator signal generators | Strategy bridge (not called from OnTick) |
| Telemetry | TelemetryEnabled = true |
TelemetryEnabled = false |
| Exploration Caps | 100/100 (daily/weekly) | 100/100 (daily/weekly) |
PaperEA_v2 Input Parameters
Located in: PaperEA/PaperEA_v2.mq5
Basic Trading Parameters
| Input | Type | Default | Description |
|---|---|---|---|
LotSize |
double | 0.0 | Position size in lots (0 = use VolatilitySizer) |
MagicNumber |
int | 12345 | EA identification number |
StopLossPips_Input |
double | 150.0 | Initial SL in pips (adaptive) |
TakeProfitPips_Input |
double | 300.0 | Initial TP in pips (adaptive) |
MaxOpenPositions |
int | 0 | Max concurrent positions (0 = unlimited) |
Trailing Stop Configuration
input bool TrailEnabled = true; // Enable trailing stops
input int TrailType = 2; // 0=fixed points, 2=ATR-based
input int TrailActivationPoints = 30; // Profit points before trail activates
input int TrailDistancePoints = 20; // Distance from current price
input int TrailStepPoints = 5; // Minimum step for SL adjustment
input int TrailATRPeriod = 14; // ATR period for dynamic trailing
input double TrailATRMultiplier = 2.0; // ATR multiplier for trail distance
Gating System Configuration
Master Switches
input bool NoConstraintsMode = true; // Bypass many gates (circuit/memory/news still enforced)
input bool UseInsightsGating = true; // Enable insights-based gating
input int GateMinTrades = 0; // Minimum trades required in slice
input double GateMinWinRate = 0.00; // Minimum win rate (0 = no minimum)
input double GateMinExpectancyR = -10.0; // Minimum expectancy R
input double GateMaxDrawdownR = 1000000.0; // Maximum drawdown R
input double GateMinProfitFactor = 0.00; // Minimum profit factor
Note: The 8-stage gate system (G1_SignalRinse through G8_FinalVerify) described in earlier documentation was aspirational. The actual implementation uses:
NoConstraintsModeto bypass non-critical gatesUseInsightsGatingwith threshold inputs aboveUsePolicyGatingfor ML policy filtering- Risk gates (circuit breakers, news filter, regime detection) always enforced
Insights Gating Configuration
Thresholds
input double InsightsMinWinRate = 0.50; // Minimum win rate to pass insights gate
input int InsightsMinTotalTrades = 10; // Minimum trades required in insights
input double InsightsMinAvgR = 0.3; // Minimum average R-multiple
input double InsightsMinSharpe = 0.0; // Minimum Sharpe ratio (0=disabled)
Freshness & Auto-Reload
input bool InsightsAutoReload = true; // Input exists but auto-rebuild NOT IMPLEMENTED
input int InsightsStaleHours = 48; // Consider stale after this many hours
input int InsightsMinSourceAdvanceHours = 48; // Min hours source files must be ahead
input int InsightsMinIntervalHours = 24; // Minimum interval between rebuilds
input bool InsightsCheckOnTimer = true; // Enable timer-based staleness checks
input int InsightsRebuildTimeoutMs = 1800000; // Timeout for rebuild (30 min)
Note:
InsightsAutoReloadinput exists but the actual auto-rebuild logic is commented out inCheckInsightsReload(). UseScripts/InsightsRebuild.mq5to manually rebuild insights.
Exploration Mode Configuration
Caps & Limits
input int ExploreMaxPerSlicePerDay = 100; // Daily exploration cap per slice (default 100)
input int ExploreMaxPerSlice = 100; // Weekly exploration cap per slice (default 100)
input bool ExploreOnNoSlice = true; // Allow exploration when no slice exists
Note: Previous documentation listed defaults of 2/3. Actual code defaults are 100/100 for both daily and weekly caps, effectively unlimited for most practical purposes.
Policy Gating Configuration
Fallback Behavior
input bool DefaultPolicyFallback = true; // Enable fallback when policy missing
input bool FallbackDemoOnly = true; // Restrict fallback to demo accounts only
input bool FallbackWhenNoPolicy = true; // Fallback when policy.json not loaded
input bool FallbackWhenSliceMissing = true; // Fallback when specific slice missing
Policy Scaling & Hot-Reload
input bool UsePolicyGating = true; // Enable policy gating (minimal: checks min_confidence only)
input string PolicyServerUrl = ""; // HTTP endpoint for policy polling
input int PolicyHttpPollPercent = 20; // % chance to poll HTTP vs file
input int HotReloadIntervalSec = 10; // Timer interval for reload checks
Note: PaperEA_v2 supports policy hot-reload via
policy.reloadfile and HTTP polling. LiveEA loads policy on init only (restart required for updates).
Risk Management Configuration
Circuit Breakers
input bool UseCircuitBreakers = true; // Enable circuit breaker system
input double CBDailyLossLimitPct_Input = 5.0; // Max daily loss (% of starting balance)
input double CBDrawdownLimitPct = 10.0; // Max drawdown from peak (%)
input int CBCooldownMinutes = 60; // Cooldown period after breaker trips
input bool GuardsEnabled = true; // Enable trade guards
input double GuardMaxSpreadPoints = 0.0; // Max spread in points (0=disabled)
News Filtering
input bool UseNewsFilter = true; // Enable news blackout filtering
input int NewsBufferBeforeMin = 30; // Minutes before news to stop trading
input int NewsBufferAfterMin = 30; // Minutes after news to resume
input int NewsImpactMin = 2; // Minimum impact level (1=Low, 2=Med, 3=High)
input bool NewsUseFile = true; // Read news from CSV file
input string NewsFileRelPath = "DualEA\\news_blackouts.csv"; // News events CSV path
Regime Detection
input bool UseRegimeGate = true; // Enable market regime detection
input string RegimeMethod = "combined"; // ATR + ADX method
input int RegimeATRPeriod = 14; // ATR period for regime classification
input double RegimeMinATRPct = 0.5; // Low volatility threshold
input double RegimeMaxATRPct = 2.5; // High volatility threshold
input int RegimeADXPeriod = 14; // ADX period for trend strength
input double RegimeADXTrendThreshold = 25.0; // ADX trend threshold
input bool ATRRegimeEnable = false; // ATR regime filtering
input int ATRRegimePeriod = 14; // ATR period
input int ATRRegimeLookback = 100; // Lookback for percentile calc
input double ATRMinPercentile = 0.3; // Minimum ATR percentile
input double ATRMaxPercentile = 0.8; // Maximum ATR percentile
input double ATRRegimeMinATRPct = 0.5; // Low volatility threshold
input double ATRRegimeMaxATRPct = 2.5; // High volatility threshold
Session Management
input bool UseSessionManager = true; // Enable session management
input int SessionEndHour = 20; // Session end hour
input bool UsePromotionGate = false; // Enable promotion window
input bool PromoLiveOnly = false; // Apply only on live accounts
input int PromoStartHour = 0; // Promotion window start
input int PromoEndHour = 24; // Promotion window end
Correlation Management
input bool UseCorrelationManager = true; // Enable correlation-based gating
input double MaxCorrelationLimit = 0.7; // Max avg correlation in portfolio
input int CorrLookbackDays = 30; // Days for correlation calculation
Strategy Selector Configuration
Scoring & Selection
input bool UseStrategySelector = true; // Enable strategy selector
input double SelW_PF = 1.0; // Weight: profit factor
input double SelW_Exp = 1.0; // Weight: expectancy
input double SelW_WR = 0.5; // Weight: win rate
input double SelW_DD = 0.3; // Weight: drawdown
input bool SelStrictThresholds = false; // Use strict vs probabilistic thresholds
input bool SelUseRecency = true; // Weight recent performance
input int SelRecentDays = 14; // Recent performance lookback
input double SelRecAlpha = 0.5; // Recency decay factor
Note: Previous documentation listed inputs like
SelectorEnable,SelectorMinScore,SelectorTopNwhich do not exist in the code.
Knowledge Base Configuration
File Management
input string KBBasePath = "DualEA/"; // Base path in Common Files
input bool KBRotateFiles = true; // Enable file rotation
input int KBRotateSizeMB = 100; // Rotate after N MB
input bool KBCompressRotated = true; // Compress rotated files
Logging Options
input bool KBDebugInit = false; // Write INIT line to KB on startup
input int KBInitIntervalSec = 60; // Interval for INIT writes
Note: Knowledge Base is always enabled. Previous inputs like
KBEnable,KBLogEvents,KBLogFeaturesdo not exist as configurable inputs.
Telemetry & Monitoring Configuration
Telemetry System
input bool TelemetryEnabled = true; // Enable telemetry emission
input bool TelemetryVerbose = false; // Verbose telemetry logging
input int TelemetryFlushInterval = 300; // Flush interval in seconds
input bool TelemetryUseCSV = false; // Use CSV format (vs JSONL)
Note: System Monitor and Event Bus are initialized via
ConfigManagerwithout individual input toggles. Previous inputs likeMonitorEnable,EventBusEnabledo not exist.
Phase 5 Advanced Features
Auto-Disable / Auto-Reenable
input bool P5_AutoDisableEnable = true; // Auto-disable underperforming strategies
input double P5_MinPF_Input = 1.20; // Minimum profit factor threshold
input double P5_MinWR_Input = 0.45; // Minimum win rate threshold
input double P5_MinExpR = -0.05; // Minimum expectancy R
input int P5_AutoDisableCooldownM = 1440; // Cooldown minutes before re-enable
input bool P5_AutoReenable = true; // Auto-reenable after cooldown
Auto-Tune
input bool P5_AutoTuneEnable = true; // Auto-tune strategy parameters
input int P5_AutoTuneEveryMin = 60; // Auto-tune interval
Timer Rescore
input bool P5_TimerRescoreEnable = true; // Enable periodic rescoring
input int P5_TimerRescoreEveryMin = 60; // Rescoring interval
Correlation Pruning
input bool P5_CorrPruneEnable = true; // Enable correlation pruning
input double P5_CorrMax = 0.80; // Max correlation threshold
input int P5_CorrLookbackDays = 30; // Correlation lookback
MTF Confirmation
input bool P5_MTFConfirmEnable = true; // Enable MTF confirmation
input string P5_MTFHigherTFs = "H1,H4"; // Higher timeframe pairs
input int P5_MTFMinAgree = 1; // Minimum MTF confirmations
Stability Gate
input bool P5_StabilityGateEnable = false; // Enable stability filtering
input int P5_StabilityWindowDays = 14; // Stability window
input double P5_StabilityMaxStdR = 1.00; // Max std dev R for stability
Other
input bool P5_PersistLossCounters = false; // Persist loss counters
input bool P5_PickBestEnable = false; // Enable best strategy selection
input int GateAuditMinSignals = 100; // Min signals before audit alert
input int GateAuditMinUptimeMin = 60; // Min uptime before audit alert
input int GateAuditAlertCooldownMin = 5; // Audit alert cooldown
Note: Previous inputs for
AdaptiveOptimizerEnable,PolicyUpdaterEnable,PositionReviewerEnable, andGateLearningEnablewere aspirational and do not exist in the code.
Logging & Debug Configuration
Debug Flags
input bool DebugTrailing = false; // Debug trailing stop operations
input bool DebugGates = false; // Debug gate decisions
input bool DebugStrategies = false; // Debug strategy signals
input bool DebugPolicy = false; // Debug policy loading/application
input bool DebugInsights = false; // Debug insights loading
input bool DebugKB = false; // Debug KB writes
Log Levels
input int LogLevel = 2; // 0=None, 1=Error, 2=Warning, 3=Info, 4=Debug
input bool LogToFile = true; // Enable file logging
input bool LogToJournal = true; // Enable MT5 Journal logging
LiveEA Parameters
Located in: LiveEA/LiveEA.mq5
IMPORTANT: LiveEA does NOT inherit PaperEA parameters. It has its own independent input set shown below.
Core Settings
| Input | Type | Default | Description |
|---|---|---|---|
MagicNumber |
long | 123456 | EA identification number |
Verbosity |
int | 1 | 0=errors, 1=warn, 2=info, 3=debug |
TelemetryEnabled |
bool | false | Enable telemetry emission |
NoConstraintsMode |
bool | false | Shadow-gate only, do not block |
Telemetry
| Input | Type | Default | Description |
|---|---|---|---|
TelemetryExperiment |
string | "live" | Experiment name for telemetry |
TelemetryBufferMax |
int | 1000 | Max events before flush |
Risk Management
| Input | Type | Default | Description |
|---|---|---|---|
SpreadMaxPoints |
double | 0.0 | Max spread (0=disabled) |
SessionStartHour |
int | 0 | Trading session start |
SessionMaxTrades |
int | 0 | Max trades per session |
MaxDailyLossPct |
double | 0.0 | Max daily loss % (0=disabled) |
MaxDrawdownPct |
double | 0.0 | Max drawdown % (0=disabled) |
MinMarginLevel |
double | 0.0 | Min margin % (0=disabled) |
ConsecutiveLossLimit |
int | 0 | Max consecutive losses |
Insights Gating (same threshold names as PaperEA)
| Input | Type | Default | Description |
|---|---|---|---|
UseInsightsGating |
bool | true | Enable insights gating |
GateMinTrades |
int | 0 | Min trades in slice |
GateMinWinRate |
double | 0.00 | Min win rate |
GateMinExpectancyR |
double | -10.0 | Min expectancy R |
GateMaxDrawdownR |
double | 1000000.0 | Max drawdown R |
GateMinProfitFactor |
double | 0.00 | Min profit factor |
Exploration
| Input | Type | Default | Description |
|---|---|---|---|
ExploreOnNoSlice |
bool | true | Allow exploration when no slice |
ExploreMaxPerSlice |
int | 100 | Weekly cap |
ExploreMaxPerSlicePerDay |
int | 100 | Daily cap |
Policy Gating
| Input | Type | Default | Description |
|---|---|---|---|
UsePolicyGating |
bool | true | Enable policy gating |
DefaultPolicyFallback |
bool | true | Allow neutral when slice missing |
FallbackDemoOnly |
bool | true | Restrict fallback to demo |
FallbackWhenNoPolicy |
bool | true | Allow when policy absent |
Note: LiveEA loads policy on
OnInit()only. Restart required for policy updates (no hot-reload).
Auto-Reload Controls
| Input | Type | Default | Description |
|---|---|---|---|
InsightsAutoReload |
bool | true | Request rebuild when stale |
InsightsLiveFreshMinutes |
int | 10 | Consider fresh if < N min old |
InsightsReadyPollSec |
int | 5 | Poll frequency for ready signal |
News / Promotion / Regime
| Input | Type | Default | Description |
|---|---|---|---|
UseNewsFilter |
bool | false | Block around news windows |
NewsBufferBeforeMin |
int | 30 | Minutes before event |
NewsBufferAfterMin |
int | 30 | Minutes after event |
NewsImpactMin |
int | 2 | Min impact level |
NewsUseFile |
bool | true | Read from CSV |
NewsFileRelPath |
string | "DualEA\news_blackouts.csv" | CSV path |
UsePromotionGate |
bool | false | Allow only in windows |
PromoLiveOnly |
bool | false | Apply only on live |
PromoStartHour |
int | 0 | Window start |
PromoEndHour |
int | 24 | Window end |
UseRegimeGate |
bool | false | Filter by volatility |
RegimeATRPeriod |
int | 14 | ATR period |
RegimeMinATRPct |
double | 0.0 | 0=disabled |
RegimeMaxATRPct |
double | 1000.0 | 1000=disabled |
CircuitCooldownSec |
int | 0 | Cooldown (0=disabled) |
Session & Correlation
| Input | Type | Default | Description |
|---|---|---|---|
UseSessionManager |
bool | true | Enable session controls |
SessionEndHour |
int | 20 | Session end hour |
MaxTradesPerSession |
int | 10 | Max trades |
UseCorrelationManager |
bool | true | Enable correlation checks |
MaxCorrelationLimit |
double | 0.7 | Max correlation |
CorrLookbackDays |
int | 30 | Lookback period |
P5_CorrMax |
double | 1.0 | 1.0=no pruning |
P5_CorrLookbackDays |
int | 5 | Lookback if PM unavailable |
Position & Volatility
| Input | Type | Default | Description |
|---|---|---|---|
PMMaxOpenPositions |
int | 10 | Max open positions |
UsePositionManager |
bool | false | Enable PositionManager |
UseVolatilitySizer |
bool | false | ATR-based sizing |
VolSizerATRPeriod |
int | 14 | ATR period |
VolSizerBaseATRPct |
double | 1.0 | Base ATR % |
VolSizerMinMult |
double | 0.1 | Min lot multiplier |
Configuration Patterns
Pattern 1: Maximum Data Collection (PaperEA)
For initial data gathering phase:
input bool NoConstraintsMode = true; // Bypass non-critical gates
input int MaxOpenPositions = 0; // Unlimited positions
input bool UseInsightsGating = false; // Disable insights gating
input int ExploreMaxPerSlicePerDay = 100; // High exploration cap
input int ExploreMaxPerSlice = 100; // High weekly cap
// Still collect data
input bool TelemetryEnabled = true;
input bool TelemetryVerbose = true;
Pattern 2: Cautious Demo Trading
For demo trading with realistic constraints:
input bool NoConstraintsMode = false; // Enable gates
input int MaxOpenPositions = 5; // Reasonable limit
input bool UseInsightsGating = true;
input double GateMinWinRate = 0.50;
input int GateMinTrades = 10;
input int ExploreMaxPerSlicePerDay = 10;
input int ExploreMaxPerSlice = 20;
// Conservative risk
input double CBDailyLossLimitPct_Input = 3.0;
Pattern 3: Live Trading (Conservative)
For initial live deployment (using LiveEA):
// LiveEA inputs
input bool NoConstraintsMode = false; // All gates active
input int PMMaxOpenPositions = 3; // Very limited
input bool UseInsightsGating = true;
input double GateMinWinRate = 0.55; // Stricter than paper
input int GateMinTrades = 30; // More data required
input bool UsePolicyGating = true;
// Strict risk controls
input double MaxDailyLossPct = 2.0;
input double MaxDrawdownPct = 10.0;
input double MinMarginLevel = 200.0;
Pattern 4: ML Training Focus
Optimize for ML training data quality:
input bool NoConstraintsMode = true; // Max coverage
input bool TelemetryEnabled = true;
input bool TelemetryVerbose = true; // Capture all details
// Diverse strategy exposure
input bool UseStrategySelector = true;
// Policy fallback for coverage
input bool UsePolicyGating = true;
input bool DefaultPolicyFallback = true;
input bool FallbackDemoOnly = false; // Allow everywhere for data
Gate Configuration
Actual Gate Implementation
The DualEA system uses a simplified gate architecture compared to the aspirational 8-stage pipeline documented earlier:
Always-Enforced Gates (not bypassed by NoConstraintsMode):
- Circuit breaker checks (
UseCircuitBreakers) - Memory limit validation
- News filter (
UseNewsFilter)
Optional Gates (bypassed when NoConstraintsMode=true):
- Insights gating (
UseInsightsGatingwith threshold inputs) - Policy gating (
UsePolicyGating) - Session management (
UseSessionManager) - Correlation management (
UseCorrelationManager) - Regime detection (
UseRegimeGate)
Shadow Mode for Testing
Test gate decisions without blocking trades:
input bool NoConstraintsMode = true; // Enable shadow mode
input bool TelemetryVerbose = true; // Capture shadow decisions
// Gates still evaluate but don't block
// Check telemetry for shadow gating events
Best Practices
1. Start with NoConstraintsMode
Begin with unrestricted data collection:
- Set
NoConstraintsMode=true - Run for 2-4 weeks across multiple symbols/timeframes
- Generate comprehensive insights.json
2. Gradually Enable Gates
After data collection:
- Set
NoConstraintsMode=false - Enable gates one by one
- Monitor impact on trade count and quality
3. Use Exploration Wisely
Balance exploration vs exploitation:
- Start with higher caps (5/10) in paper
- Reduce caps as insights mature
- In live, use minimal caps (1/2)
4. Test in Strategy Tester First
Before live deployment:
- Run backtests with realistic spread/slippage
- Validate gate behavior with actual constraints
- Check exploration counter persistence
5. Monitor Health Scores
Track SystemMonitor health:
- Aim for >80 health score
- Investigate if dropping below 70
- Check gate success rates individually
6. Policy Fallback Strategy
For production live trading:
- Set
FallbackDemoOnly=trueinitially - Only disable after validating policy coverage
- Keep
DefaultPolicyFallback=trueas safety net
7. Risk Ladder Approach
Gradually increase risk exposure:
- Start: 0.5% risk per trade, 2% daily loss cap
- After 50 trades: 1.0% risk, 3% daily cap
- After 200 trades: 1.5% risk, 5% daily cap
- Review and adjust based on performance
Configuration Checklist
Before Going Live
NoConstraintsMode=false(gates active)- Insights gating thresholds validated
- Policy loaded and coverage checked
- Exploration caps set conservatively (1-2)
- Risk limits appropriate for account size
- Circuit breakers configured
- News calendar updated
- Position Manager tested
- Telemetry and logging working
- Strategy Tester validation completed
- Demo account forward test successful (minimum 2 weeks)
P0-P5 Advanced Hardening Inputs
Location: Include/PaperEA_v2_P0P5_Integration.mqh
All P0-P5 features can be enabled/disabled via input parameters for gradual rollout.
P0 - Production Risk Controls
input bool InpEnableNuclearRiskEngine = true; // Enable VaR/Kelly/CVaR risk engine
input bool InpEnableSQLiteKB = true; // Enable SQLite parallel KB
input int InpSQLiteMigrationDays = 30; // CSV migration period
input bool InpEnableShadowLogging = true; // Atomic CSV writes with checksums
input double InpMaxPortfolioRiskPct = 15.0; // Max portfolio risk %
input double InpMaxCorrelationForPruning = 0.70; // Correlation threshold for strategy pruning
P1 - Architectural Hardening
input bool InpEnableFeatureCache = true; // Pre-warmed indicator handles
input bool InpEnableSystemMonitor = true; // CPU/memory monitoring
input bool InpEnableVolatilityExits = true; // Trailing volatility exits
input int InpFeatureCacheSize = 100; // Cache size per indicator
P2 - Intelligence Enhancements
input bool InpEnableConceptDriftDetection = true; // Auto-adjust gate thresholds
input bool InpEnableAutoDriftAdjustment = true; // Welford's algorithm adjustment
input double InpDriftZScoreThreshold = 2.5; // Drift detection threshold
input bool InpEnableAutoPromotionSystem = true; // Paper to Live promotion
input bool InpEnableShadowTradingBridge = true; // Parallel demo execution
input bool InpEnableMTFConfirmationGate = true; // Multi-timeframe confirmation
input bool InpEnableCorrelationPruner = true; // Correlation-aware pruning
input int InpMTFConfirmationTimeframes = 2; // Number of TF confirmations required
P3 - Performance Optimizations
input bool InpEnableCPUBudgeting = true; // CPU fail-fast processing
input int InpCPUBudgetMsPerTick = 10; // Max CPU ms per tick
input bool InpEnableIndicatorCache = true; // Pre-warm indicator handles
input bool InpEnableRingBuffers = true; // Lock-free logging
input bool InpEnableBatchTelemetry = true; // Batched I/O writes
input int InpRingBufferSize = 8192; // Ring buffer capacity
input int InpTelemetryBatchSize = 100; // Batch write size
input bool InpEnableTimerStrategyScanner = true; // Timer-based scanning
input int InpStrategyScanIntervalSec = 60; // Scan interval
P4 - Strategic Evolution
input bool InpEnableGrpcMLBridge = false; // gRPC ML inference (disabled by default)
input string InpGrpcServerAddress = "localhost:50051"; // gRPC server
input bool InpEnableAdversarialFuzzer = false; // Jailbreak testing (debug only)
input bool InpEnableFeatureDriftDetector = true; // Distribution shift detection
Cross-Chart Coordination
input bool InpEnableSymbolCoordinator = false; // Redis coordination (disabled by default)
input string InpRedisServerAddress = "localhost:6379"; // Redis server
input int InpMaxPositionsPerSymbol = 5; // Per-symbol position cap
Key Design Decisions:
- Risk gates (G1, G4, G7, G8) are never skipped under CPU pressure
- Multi-symbol management remains chart-per-symbol with Redis coordination
- SQLite runs parallel to CSV for 30-day migration period
- gRPC ML Bridge disabled by default (local ONNX preferred)
- Redis coordination disabled by default (single-chart mode)
See Also:
- Execution-Pipeline.md - Detailed execution flow
- Observability-Guide.md - Monitoring and telemetry
- Policy-Exploration-Guide.md - Policy and exploration details