53 KiB
DualEA — Production Multi-Strategy Trading System
Paper EA + Live EA with ML Policy Engine
System Overview
DualEA is a production-ready, multi-strategy Expert Advisor ecosystem for MetaTrader 5 that combines:
- PaperEA_v2 (2793 lines) - Executes real MT5 orders on demo accounts with 8-stage gate filtering, 23 signal generators, ML integration
- LiveEA (1702 lines) - Real trading implementation with insights/policy gating from PaperEA
- ML Pipeline - Python-based TensorFlow/Keras training with LSTM models and policy export
- Knowledge Base - Shared CSV/JSON data store in Common Files for cross-system communication
Compilation Status: ✅ 0 errors, 0 warnings (MQL5 Build 5572+ compatible)
Core Architecture
MQL5/
├── Experts/
│ └── Advisors/
│ └── DualEA/
│ ├── PaperEA/ # PaperEA_v2 System (Demo Execution)
│ │ ├── PaperEA_v2.mq5 # Enhanced Paper EA with 8-stage gates
│ │ └── PaperEA_backtest.ini
│ ├── LiveEA/ # Live Trading System
│ │ ├── LiveEA.mq5 # Live EA with advanced gating
│ │ ├── LiveEA_StrategyBridge.mqh
│ │ ├── Telemetry.mqh
│ │ └── build_liveea.bat
│ ├── Include/ # Core System Components
│ │ ├── IStrategy.mqh # Strategy interface
│ │ ├── StrategySelector.mqh # Strategy selection & scoring
│ │ ├── TradeManager.mqh # Trade execution management
│ │ ├── PositionManager.mqh # Position management
│ │ ├── KnowledgeBase.mqh # Data persistence layer
│ │ ├── GateManager.mqh # 8-stage gate system
│ │ ├── LearningBridge.mqh # Learning data bridge
│ │ ├── Telemetry.mqh # Telemetry system
│ │ ├── TelemetryStandard.mqh # Standard telemetry
│ │ ├── InsightsLoader.mqh # Insights JSON loader
│ │ ├── SessionManager.mqh # Session management
│ │ ├── CorrelationManager.mqh # Correlation analysis
│ │ ├── VolatilitySizer.mqh # Volatility-based sizing
│ │ ├── Strategies/ # Strategy Implementations
│ │ │ ├── Registry.mqh # Strategy registry
│ │ │ ├── ADXStrategy.mqh
│ │ │ ├── BollAveragesStrategy.mqh
│ │ │ ├── MeanReversionBBStrategy.mqh
│ │ │ ├── SuperTrendADXKamaStrategy.mqh
│ │ │ ├── RSI2BBReversionStrategy.mqh
│ │ │ ├── DonchianATRBreakoutStrategy.mqh
│ │ │ └── ... (17 more strategies)
│ │ └── Indicators/ # Technical Indicators
│ │ ├── ATR.mqh
│ │ ├── Donchian.mqh
│ │ ├── KAMA.mqh
│ │ └── ... (7 more indicators)
│ ├── ML/ # Machine Learning Pipeline
│ │ ├── train.py # Model training script
│ │ ├── policy_export.py # Policy generation
│ │ ├── dataset.py # Data loading utilities
│ │ ├── features.py # Feature engineering
│ │ ├── model.py # Model definitions
│ │ ├── policy.py # Policy utilities
│ │ ├── artifacts/ # Model artifacts
│ │ │ ├── tf_model.keras # Trained model
│ │ │ ├── scaler.pkl # Feature scaler
│ │ │ └── features.json # Feature definitions
│ │ └── requirements.txt # Python dependencies
│ ├── Scripts/ # Utility Scripts
│ │ ├── InsightsRebuild.mq5 # Rebuild insights from data
│ │ └── PolicyDump.mq5 # Policy debugging
│ ├── docs/ # Documentation
│ │ ├── README.md # This file
│ │ ├── CORE_IMPLEMENTATION_PLAN.md
│ │ ├── DualEA_Handbook.md
│ │ └── ... (11 more docs)
│ ├── config/ # Configuration
│ │ └── learning_config.json
│ ├── logs/ # Log files
│ ├── results/ # Test results
│ └── build_*.bat # Build scripts
Common Files Structure (Shared Data)
Terminal/Common/Files/DualEA/
├── features.csv # Feature data from strategies (with rotation)
├── knowledge_base.csv # Trade execution records
├── insights.json # Performance analytics per strategy/symbol/timeframe
├── policy.json # ML-generated trading policy with confidence thresholds
├── insights.reload # Trigger file for insights reload (LiveEA uses this to request rebuilds)
└── policy.reload # Trigger file for policy reload (PaperEA_v2 uses this; LiveEA requires restart)
Current Implementation Status
✅ Fully Implemented & Working
PaperEA v2 System (2793 lines)
- 8-stage gate system with unified configuration (ConfigManager, EventBus, SystemMonitor)
- 23 indicator-based signal generators (e.g.,
ADXStrategy,RSIStrategy,MACDStrategy) with asset-class registry - Real MT5 order execution on demo accounts via
CTradeManager::ExecuteOrder() - Advanced optimization: AdaptiveSignalOptimizer, PolicyUpdater, PositionReviewer, GateLearningSystem
- Comprehensive input parameters (180+ settings for fine-tuning)
- Circuit breakers, news filtering, regime detection, session management
- Knowledge Base with CFeaturesKB (features.csv) and CKnowledgeBase (knowledge_base.csv)
- Real-time telemetry with TelemetryStandard wrapper
- UnifiedTradeLogger for JSON lifecycle tracking
- TradeManager with market/pending orders, ATR/fixed trailing stops
LiveEA System (1702 lines)
- Complete insights gating from insights.json (strategy/symbol/TF performance metrics)
- ML policy gating from policy.json with confidence thresholds and SL/TP/trail scaling
- Risk gating: spread, session, daily loss, drawdown, margin, consecutive losses
- News blackout filtering with CSV-based event calendar
- Exploration mode for strategies with insufficient historical data
- Position/Session/Correlation/Volatility managers fully integrated
- InsightsLoader for DRY insights parsing
- Strategy bridge for live execution
ML Pipeline (Python)
- train.py: TensorFlow/Keras classifier + LSTM with TimeSeriesSplit validation
- policy_export.py: Converts trained models to policy.json with slice-based probabilities
- features.py: Yahoo Finance enrichment, technical indicators, scaling
- dataset.py: CSV loading with label generation from R-multiples
- File rotation and compression for large artifacts
- artifacts/: Saved models (.keras), scalers (.pkl), metadata (.json)
Supporting Systems
- GateManager: 8 gates with learning-based threshold adjustment
- LearningBridge: Bidirectional data flow between Paper/Live, CSignalDecision records
- StrategySelector: Performance-based strategy scoring with recency weighting
- InsightsRebuild.mq5: One-click insights.json generation from features.csv
- Test suite: 8 test files for integration, gates, managers, system health
🔄 Implemented with Minor Gaps
- Insights auto-reload: LiveEA watches for
insights.reloadrequest and polls forinsights.readyto auto-reload. PaperEA'sCheckInsightsReload()exists but only deletes the file (rebuild logic commented out). - LSTM sequence training: Code exists but needs min sequence validation
- Multi-timeframe confirmation: P5_MTFConfirmEnable parameter exists, needs gate implementation
🔴 Not Implemented (Future Enhancements)
- Real-time Insights Auto-Rebuild: Automatic background InsightsRebuild trigger when features.csv is stale
- LiveEA Policy Hot-Reload: Watch
policy.reloadto refresh ML policy without EA restart (PaperEA already supports this) - Multi-timeframe MTF Gate: P5_MTFConfirmEnable parameter exists but gate logic needs implementation
- Advanced Correlation Pruning: More sophisticated portfolio correlation algorithms beyond Pearson
- Distributed Training: Multi-machine ML training for large datasets
<EFBFBD>️ P0-P5 Advanced Hardening & Intelligence (NEW)
The EA now includes a comprehensive hardening and intelligence upgrade with P0 through P5 priority levels:
P0 (Production Risk) - CRITICAL
- Nuclear Risk Engine: VaR 95%, CVaR, Kelly Criterion, correlation matrix monitoring
- SQLite Knowledge Base: Parallel CSV migration with 30-day transition period
- Shadow Logging: Atomic CSV writes with checksums and file locking
P1 (Architectural Hardening)
- Feature Cache: Pre-warmed indicator handles (ADX, ATR, RSI) to eliminate redundant calculations
- System Monitor: Real-time CPU and memory tracking with automatic circuit breakers
- Volatility Exits: Trailing stop system with volatility-adjusted sizing
P2 (Intelligence Enhancements)
- Concept Drift Detector: Welford's Algorithm-based gate threshold auto-adjustment
- Auto-Promotion System: Performance-based strategy promotion from PaperEA to LiveEA
- Shadow Trading Bridge: Parallel demo execution to detect slippage
- Multi-Timeframe Confirmation Gate: MTF entry validation to reduce false signals
- Correlation-Aware Pruner: Prevents strategy over-concentration (0.70 max correlation)
P3 (Performance Optimizations)
- CPU Budgeting: 10ms fail-fast with risk gate protection (G1/G4/G7/G8 never skipped)
- Indicator Cache: Pre-warmed handles for all technical indicators
- Lock-Free Ring Buffers: 8192-element capacity for zero-contention logging
- Batch Telemetry Writes: Batched I/O to reduce disk pressure
- Timer Strategy Scanner: Centralized low-tick strategy scanning
P4 (Strategic Evolution)
- gRPC ML Bridge: Real-time ML inference with latency monitoring
- Adversarial Fuzzer: Automated jailbreak testing for robustness validation
- Nuclear Risk Engine (comprehensive): VaR, Kelly, correlation-based circuit breakers
- Feature Drift Detector: Real-time distribution shift detection
Integration Architecture
// P0-P5 systems are managed by CDualEAController singleton
// Integrated via PaperEA_v2_P0P5_Integration.mqh
// OnInit:
InitializeP0P5Systems(); // Initializes all P0-P5 subsystems
// OnTick:
OnTickP0P5(); // Processes drift detection, CPU budgeting, risk checks
// OnTimer:
OnTimerP0P5(); // Periodic maintenance (telemetry flush, shadow trades)
// OnDeinit:
ShutdownP0P5Systems(); // Clean shutdown of all P0-P5 components
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
- All P0-P5 features have enable/disable input parameters for gradual rollout
<EFBFBD>🔧 Unified System Architecture (NEW)
The DualEA system features a Unified Architecture that eliminates redundancy by consolidating insights management and gating pipeline into three core components:
Core Components:
- ConfigManager: Centralized configuration for gates, insights, and system settings
- EventBus: Cross-component communication with priority-based event logging
- SystemMonitor: Real-time health monitoring and performance metrics
Key Benefits:
- Single source of truth for configuration and monitoring
- Event-driven architecture with unified logging
- Real-time performance tracking and health scoring
- Backward compatibility with legacy mode support
Quick Start:
// Initialize unified system (enabled by default)
CGateManager* gateManager = new CGateManager(symbol, timeframe, learning, true);
// Access unified components for advanced configuration
CConfigManager* config = CConfigManager::GetInstance();
config->SetVerboseLogging(true);
config->SetNoConstraintsMode(false);
See UnifiedSystemGuide.md for detailed integration documentation.
Key Features
8-Stage Gate System (PaperEA v2)
- Signal Rinse: Basic signal validation and confidence filtering
- Market Soap: Market context analysis (volatility, correlation, regime)
- Strategy Scrub: Strategy-specific validation and parameter adjustment
- Risk Wash: Risk-based position sizing and validation
- Performance Wax: Backtest-based performance validation
- ML Polish: Machine learning confidence scoring
- Live Clean: Live market condition validation
- Final Verify: Final trade validation before execution
Machine Learning Pipeline
- Feature Engineering: 50+ technical indicators and market features
- Model Training: TensorFlow/Keras with LSTM and Dense model support
- Policy Generation: Automated policy.json creation with confidence thresholds
- Yahoo Finance Integration: Market data enrichment for training
- Time Series Validation: Proper temporal splits for backtesting
Strategy Library (23 Signal Generators in PaperEA, 21 IStrategies in LiveEA)
PaperEA_v2 uses 23 indicator-based signal generators via StrategySignalGenerators.mqh:
- ADX, RSI, MACD, Stochastic, CCI, Momentum, Williams %R, DeMarker, Force Index
- Bears Power, Bulls Power, RVI, OsMA, TriX, Accelerator Oscillator, Awesome Oscillator
- Alligator, Gator, Ichimoku, Fractals, ZigZag, Ultimate Oscillator, Moving Average
LiveEA includes 21 IStrategy implementations via LiveEA_StrategyBridge.mqh (available for external orchestration):
- ADXStrategy, SuperTrendADXKamaStrategy, DonchianATRBreakoutStrategy, ForexTrendStrategy, AlligatorStrategy
- BollAveragesStrategy, MeanReversionBBStrategy, RSI2BBReversionStrategy, VWAPReversionStrategy
- AwesomeOscillatorStrategy, AcceleratorOscillatorStrategy, BearsPowerStrategy, BullsPowerStrategy, KeltnerMomentumStrategy, AroonStrategy
- GoldVolatilityStrategy, IndicesEnergiesStrategy, OpeningRangeBreakoutStrategy
- MultiIndicatorStrategy, EMAPullbackStrategy, StochasticOscillatorStrategy
Data Management
- Knowledge Base: Centralized trade logging with CSV rotation
- Features Export: Long-format feature data for ML training
- Insights Generation: Performance analytics per strategy/symbol/timeframe
- Common Files: Cross-EA data sharing via MT5 Common Files directory
System Configuration and Monitoring
Gate Configuration Parameters
The unified system supports comprehensive gate configuration through ConfigManager:
// 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
- Early Phase: Market condition validation and news filtering
- 8-Stage Gate Processing: Signal refinement through unified gate system
- Risk Management: Position sizing and portfolio risk assessment
- Execution: Trade placement with full audit trail and telemetry
Observability Features
- Event-Driven Logging: All system events flow through
EventBuswith priority levels - Real-time Metrics: Gate success rates, processing times, and system health scoring
- Performance Tracking: Automated threshold optimization based on historical success rates
- Cross-EA Compatibility: Identical configuration and behavior between PaperEA and LiveEA
System Capabilities
PaperEA_v2 Core Features
-
Real MT5 Execution: Places real orders on demo accounts via
CTradeManager::ExecuteOrder()(not simulation) -
CTradeManager: Market/pending orders, trailing stops (fixed-points & ATR)
-
23 Signal Generators: Indicator-based registry via
StrategySignalGenerators.mqh -
8-Stage Gates: ConfigManager/EventBus/SystemMonitor unified architecture
-
Optimization: AdaptiveSignalOptimizer, PolicyUpdater, PositionReviewer, GateLearningSystem
-
Data Export: features.csv (CFeaturesKB), knowledge_base.csv (CKnowledgeBase), JSON logs (UnifiedTradeLogger)
-
Inputs (PaperEA):
- Position and risk:
LotSize,MagicNumber,StopLossPips,TakeProfitPips,MaxOpenPositions(0=unlimited) - Trailing defaults (used if a strategy doesn't set them):
TrailEnabled,TrailType=0(fixed),TrailActivationPoints,TrailDistancePoints,TrailStepPoints - Mode toggles:
NoConstraintsMode(bool, default true) — bypasses many constraints for maximum data collection; critical safety checks (circuit breaker, memory) remain enforced - Logging:
KBDebugInit(writes INIT line),DebugTrailing(reserved)
- Position and risk:
-
Modules:
- Position Manager (see
Include/PositionManager.mqh) — available behindUsePositionManager. Defaults: PaperEA=true, LiveEA=false. Current integration initializes the manager and supports caps/correlation hooks; advanced exits/brackets will be integrated next.
- Position Manager (see
MQL5 Compatibility Notes
All code has been verified MQL5-compatible with the following syntax adjustments:
| C++ Syntax | MQL5 Syntax | Files Updated |
|---|---|---|
-> operator |
. operator |
PaperEA_v2.mq5, AdaptiveSignalOptimizer.mqh, CInsightGateBridge.mqh |
& references |
Direct array access | CInsightGateBridge.mqh, CInsightsRealtime.mqh |
IsTradeAllowed() |
Custom implementation | PaperEA_v2.mq5 (lines 4663-4694) |
| Non-existent methods | Commented out | PaperEA_v2.mq5 (RecordSanitizationEvent, PerformBatchLearning) |
| Implicit type casts | Explicit (double) casts |
CSQLiteKnowledgeBase.mqh, PaperEA_v2.mq5 |
See MQL5_Migration_Notes.md for detailed migration documentation.
Critical Runtime Fixes (February 2026)
Recent tester log analysis identified and resolved critical runtime issues:
| Issue | Root Cause | Fix Location |
|---|---|---|
| V0.00 Volume | Signal field mismatch: generators set signal.sl, gates read signal.stop_loss (0.0) |
EnhancedEfficientGateSystem.mqh lines 1006-1071 |
| 3+ Second Delays | ShadowLogger reading 488MB file into memory for every write | CShadowLogger.mqh - direct append mode |
| Signal Optimization Failed | Invalid SL/TP (0.0) caused position sizing to return 0 volume | Signal field fallback logic added |
Key Fix - Signal Field Alignment:
// Fixed: Check both field names with fallback
decision.final_sl = (signal.stop_loss > 0) ? signal.stop_loss : signal.sl;
decision.final_tp = (signal.take_profit > 0) ? signal.take_profit : signal.tp;
decision.final_volume = (signal.volume > 0) ? signal.volume : 0.1;
Key Fix - ShadowLogger Efficiency:
// BEFORE: Read entire file + append + write back (3000ms+)
// AFTER: Direct append with FILE_WRITE|SEEK_END (<10ms)
// Added: Memory buffer fallback, progressive backoff, skip locking in tester
Latest Fixes (February 15, 2026)
| Issue | Root Cause | Fix Location |
|---|---|---|
| No Sell Orders | Overly restrictive MA crossover conditions | PaperEA_v2.mq5 lines 3467-3508 |
| Position Count 0 | CPositionManager not synced with MT5 positions | PaperEA_v2.mq5 lines 1791-1797 |
| Memory Leaks | Double deletion of MasterController objects | PaperEA_v2.mq5 lines 1830-1854 |
| Wrong Position Limit | Counted all MT5 positions instead of EA's | PaperEA_v2.mq5 lines 3085-3106 |
| Insight Bridge Stats 0 | Bridge never queried in trading flow | PaperEA_v2.mq5 lines 4239-4250 |
Key Fix - Sell Signal Generation:
// OLD (broken):
if(fast_ma > slow_ma && fast_ma < current_price) // Buy - worked
else if(fast_ma < slow_ma && fast_ma > current_price) // Sell - rarely triggered
// NEW (fixed):
if(fast_ma > slow_ma) // Buy when fast > slow (uptrend)
else if(fast_ma < slow_ma) // Sell when fast < slow (downtrend)
Key Fix - Position Sync:
if(CheckPointer(g_position_manager) != POINTER_INVALID)
{
g_position_manager.SyncPositions(MagicNumber);
LOG(StringFormat("[PositionManager] Synced with %d positions for magic=%d",
g_position_manager.GetPositionCount(), MagicNumber));
}
See RECENT_MODIFICATIONS.md for detailed ongoing changes.
LiveEA Inputs (New)
- Policy fallback and gating:
UsePolicyGating,DefaultPolicyFallback,FallbackWhenNoPolicy,FallbackDemoOnly.- Log reasons:
fallback_no_policy(no slices loaded),fallback_policy_miss(slice not found). Both bypass exploration caps and use neutral scaling; demo-only unlessFallbackDemoOnly=false.
- Insights auto-reload controls:
InsightsAutoReload,InsightsLiveFreshMinutes,InsightsReadyPollSec(inputs present; wiring for automated reload is being expanded in LiveEA).
- Position management:
UsePositionManager(default false) andPMMaxOpenPositionsfor portfolio caps; enables integration withInclude/PositionManager.mqhwhere available.
Policy scaling keys
- LiveEA expects trailing scaling under the key
trail_scale. - PaperEA’s
PolicyEngineanddocs/PolicySchema.mdusetrail_atr_multfor ATR-based trailing. Exporters may emit both keys for compatibility until the schema is unified.
Where Files Are Written
We target the MT5 Common Files area so Strategy Tester, Demo/Paper, and Live share the same outputs.
- Typical path:
C:\Users\<you>\AppData\Roaming\MetaQuotes\Terminal\Common\Files\DualEA\ - Alternative (some installs):
C:\ProgramData\MetaQuotes\Terminal\Common\Files\DualEA\
Files produced:
knowledge_base.csv(header created at init)knowledge_base_events.csvfeatures.csv(per-trade feature rows for ML)explore_counts.csv(weekly exploration usage)explore_counts_day.csv(daily exploration usage)insights.json(aggregated performance by strategy/symbol/timeframe)policy.json(exported by trainer) andpolicy.reload(touch file to trigger hot-reload)
Documentation
Knowledge Base Schemas
knowledge_base.csv- Columns:
timestamp,symbol,type,entry_price,stop_loss,take_profit,close_price,profit,strategy_id
- Columns:
knowledge_base_events.csv- Columns:
timestamp,strategy,retcode,deal,order
- Columns:
How To Build
- Use the provided batch scripts:
- PaperEA: open a terminal in
MQL5/Experts/Advisors/DualEA/PaperEA/and runbuild_paperea.bat - LiveEA: open a terminal in
MQL5/Experts/Advisors/DualEA/LiveEA/and runbuild_liveea.bat
- PaperEA: open a terminal in
- Or compile from MetaEditor (
PaperEA.mq5/LiveEA.mq5).
How To Run (Strategy Tester)
- Open Strategy Tester and select
PaperEA. - On the Inputs tab, click Reset to load the latest defaults.
- Adjust
LotSize,SL/TP, and trailing inputs as needed. - Run a backtest; outputs will be in
Common\Files\DualEA\and visible in the Journal.
Trainer Workflow (Windows)
- Requirements: Python 3, internet access (for pip + Yahoo enrichment).
- Steps:
- Open a terminal in
MQL5/Experts/DualEA/ML/. - Run:
run_train_and_export.bat
- Open a terminal in
- What it does:
- Creates
.venv/, installsML/requirements.txt. - Runs
train.pyto produceML/artifacts/tf_model.keras,scaler.pkl,features.json. - Runs
policy_export.py --min_conf 0.45to writeCommon\Files\DualEA\policy.jsonwith per-slicep_winand scaling fields:sl_scale,tp_scale,trail_scale(LiveEA) ortrail_atr_mult(PaperEA). - Touches
Common\Files\DualEA\policy.reload.
- Creates
- EA behavior:
PaperEAcallsCheckPolicyReload()in bothOnTimer()andOnTick(); whenpolicy.reloadexists, it reloadspolicy.jsonand logsPolicy gating: min_conf=..., slices=N.- On trade execution, if policy is loaded, the EA applies per-slice scaling before sending the order.
Rebuilding Insights (without rerunning trades)
- Use the provided script to recompute
insights.jsonfrom the currentfeatures.csv:- In MT5 Navigator → Scripts → run
InsightsRebuild. - Check
Common\Files\DualEA\insights.jsonand Journal for status.
- In MT5 Navigator → Scripts → run
Troubleshooting
- “No CSVs in MQL5/Files”: Expected. Tester and Live now write to
Common\Files\DualEAusingFILE_COMMON. - “Error 5004 opening file”: First‑run read attempts can fail if the file doesn’t exist; the constructor now creates the file and header without logging an error.
- “Inputs not showing in Tester”: Click Inputs → Reset; MT5 caches previous inputs.
PaperEA
- Purpose: primary data-collection EA for backtests and demo/paper runs. Logs features, events, and trades to the shared Knowledge Base for ML and insights.
- Execution model:
- OnInit/OnTick drive the scan→gate→execute path; logs to KB on every decision and execution.
- Policy reload via
DualEA/policy.reloadchecked inCheckPolicyReload(); telemetry flush after scans. - Timer-based scanning per Phase 6 design may be enabled as parity with LiveEA (see Phase 6) where implemented.
- Gating and exploration caps:
NoConstraintsMode(default true) bypasses many gates/caps for unrestricted exploration; critical safety checks (circuit breaker, memory guard, news filter) remain enforced.- Exploration caps persist in Common Files:
DualEA/explore_counts_day.csv,DualEA/explore_counts.csv. - No‑slice‑only bypass: exploration only bypasses when a slice truly doesn’t exist; existing under‑threshold slices remain gated.
- Reset by deleting the above CSVs in
Common\Files\DualEA.
- Policy integration and fallback:
- Inputs:
UsePolicyGating,DefaultPolicyFallback,FallbackWhenNoPolicy,FallbackDemoOnly. - When policy is loaded and slice exists,
ApplyPolicyGating()checks confidence (per-slice scaling currently minimal in PaperEA; LiveEA has full scaling). - On fallback (no policy or slice missing), trades use neutral scaling, do not consume exploration quotas, and bypass caps (demo‑only by default).
- Inputs:
- Persistence paths (MT5 Common Files):
knowledge_base.csv,knowledge_base_events.csv,features.csv,insights.json, exploration CSVs underCommon\Files\DualEA.
- CI hooks (insights freshness + coverage):
- Use
kb_check.batto rebuild and validateinsights.jsonheadlessly; fails on stale/empty slices and on missing required coverage. - Example:
kb_check.bat --build-insights --attempt-run-script --run-validate --fail-on-stale --fail-on-empty-slices --require-symbols=USDCNH --require-timeframes=60 --require-strategies=BollAverages,DonchianATRBreakout,RSI2BBReversion --fail-on-missing-required --show-report
- Use
Roadmap (Phased)
This roadmap aligns with the implementation plan.
For detailed Phase 3 guidance (docs, hygiene, scoring, roadmap), see:
docs/Phase3.md
Action Framework — 3 Phases × 3 Cycles (Merged)
-
Source:
docs/DualEA_Action_Framework.md(full details and templates) -
Phase 1 — Codebase & Requirements Deep Dive
- Cycle 1: Structural Audit (jailbreak permitted)
- Inventory gating paths (strategy → policy → insights → execution)
- Trace file I/O and timers:
CheckPolicyReload(),CheckInsightsReload(), staleness checks - Identify insertion points: circuit breakers, session/news filters, PositionManager, correlation, vol sizing, regime
- Deliverables: audit map + risk log
- Cycle 2: Requirements Mapping
- Spec one‑pagers per feature with inputs, data flow, telemetry, failure/rollback
- Cycle 3: Risk & Gaps Closure
- Threat model: file races, stale artifacts, partial reloads; decide LiveEA fail‑safe defaults
- Deliverables: mitigations + rollback levers; updated lifecycle gates
- Cycle 1: Structural Audit (jailbreak permitted)
-
Phase 2 — Design, Build, Validate
- Cycle 1: Task Decomposition
- Backlog with effort/risk/owner/sequence for FR‑01..FR‑10
- Cycle 2: Code + Peer Review
- Definition of Ready: inputs defined, telemetry standardized, rollback behavior set
- Guidelines: feature flags (
Use*), shared includes underInclude/
- Cycle 3: QA + Fuzzing
- Unit‑like stubs, deterministic sims, log assertions; fuzz missing files/reload storms/high‑tick
- Cycle 1: Task Decomposition
-
Phase 3 — Polish, Lockdown, Final Scoring
- Cycle 1: Docs & architecture alignment (README + lifecycle + operator runbooks)
- Cycle 2: Code hygiene & consistency (inputs/enums/log tags; dead‑code purge)
- Cycle 3: Final scoring (correctness/safety/observability/perf) + next roadmap
Action Backlog (Pre‑Implementation Specs)
- FR‑01 Circuit Breakers — Inputs:
UseCircuitBreakers,DailyLossLimit,DailyDrawdownLimit,CooldownMinutes; block entries, allow exits; telemetrycb:*; DoD: day rollover sims - FR‑02 Session/Window Filter — Inputs:
UseSessionFilter,SessionTZ,SessionWindows; pre‑gate block; DoD: DST/tz edges - FR‑03 News Filter — Inputs:
UseNewsFilter,ImpactLevelMin,PreLockoutMin,PostLockoutMin; offline‑safe fallback; DoD: replay test - FR‑04 Position Manager (v1) — Inputs:
UsePositionManager,ExitProfile,ClusterMinPts,PerSymbolMax; centralized exits/scaling hooks; DoD: backtest diffs. (Core module implemented inInclude/PositionManager.mqh; integration behind flag pending.) - FR‑05 Correlation Exposure Caps — Inputs:
UseCorrelationCaps,CorrLookbackDays,MaxGroupExposure; cap grouped exposure; DoD: deterministic calc - FR‑06 Volatility Position Sizing — Inputs:
UseVolSizing,ATRPeriod,RiskPerTrade; ATR‑adaptive lots; DoD: regime consistency, caps respected - FR‑07 Regime Detector Stub — Inputs:
UseRegime,RegimeMethod; tag regime; optional gating modifier; DoD: stable tags - FR‑08 Promotion Gate & Evaluator — Inputs: min trades/hit‑rate/expectancy/DD/Sharpe; artifact:
Scripts/DualEA/AssessPromotion.mq5; DoD: reproducible - FR‑09 Telemetry Standardization & Ops Views — Event schema/fields/severity; rotate/size bounds; optional ops notebooks
- FR‑10 Performance — Event batching, log throttling, timer cadence review; DoD: CPU/mem profile under stress
Control Gates (Before Coding)
- Gate A: Specs complete (inputs, flow, telemetry, rollback) for FR‑01..FR‑10
- Gate B: Test plans defined; simulators/log assertions ready
- Gate C: Security + fail‑safe review; LiveEA defaults conservative
Ownership & Sequencing (Draft)
- Wave 1 (risk first): FR‑01, FR‑02, FR‑08
- Wave 2 (exposure/positioning): FR‑04, FR‑05, FR‑06
- Wave 3 (context/perf): FR‑03, FR‑07, FR‑09, FR‑10
- Note: Features default‑off in LiveEA until validated in PaperEA
Status Dashboard
- Completed:
- Phase 1: Data & Insights Foundation (insights builder, headless rebuild, validator, CI flags, Common Files outputs)
- Phase 2: ML/LSTM Pipeline (trainer + policy export + batch runner; PaperEA policy hot‑reload integrated)
- Phase 2a: PaperEA Execution & Telemetry (baseline complete; timer-scan parity tracked under Phase 6)
- Phase 3 (core): LiveEA core loop with policy gating/fallbacks and scaling
LiveEA/LiveEA.mq5: policy loaded from file on init;ApplyPolicyScaling()applies SL/TP/trailing (trailing viatrail_scale), fallback gating (fallback_no_policy,fallback_policy_miss, demo‑only by default), heartbeat with fallback flags
- In Progress:
- Phase 3: LiveEA hardening (risk gates, stricter caps, optional shadow‑mode, per‑minute de‑dup)
- Phase 6: Low‑Latency Minutely Scanner & ML‑Enriched Orchestration
- Phase 6: Low‑Latency Minutely Scanner & Orchestration (central
ScanStrategies, minute de‑dup, parity with OnTick) - Phase 2a → P1C1 (ACTIVE): Structural Audit for PaperEA (gating/caps persistence, telemetry, KB writes, insights staleness, CI validators)
- Phase 4/7/8: Risk/Telemetry/Adversarial hardening — partial primitives present
- Ops/CI TODOs (remaining):
- Add
kb_check.batfor headless insights rebuild+validate and wire into CI (fail on stale/coverage). - Add
scripts/RunInsightsValidation.ps1andScheduleInsightsValidation.ps1for scheduled validation. - Optional CI trainer job: run
ML/run_train_and_export.baton schedule/data‑change; publishpolicy.jsonand touchpolicy.reload. - Operator runbook: KB rebuild/validate flows and artifact paths under
Common\\Files\\DualEA. - Telemetry: concise summaries for insights rebuild/validation outcomes.
- Add
- Not Implemented:
- Phase 5, 9, 10, 11
Phase 1: Data & Insights Foundation
- TODOs (hardening and ops):
- CI integration: add
kb_check.batand wireScripts/ValidateInsights.mq5to CI to fail on staleinsights.json, empty/missing slices, and unmet required coverage (symbols/TFs/strategies). - Headless rebuild wrapper: provide a batch/PowerShell entry point to run
Scripts/InsightsRebuild.mq5non‑interactively (for CI/scheduled tasks). - Schema versioning: version
insights.jsonand add compatibility checks inInclude/StrategySelector.mqh; document version indocs/KB-Schemas.md. - I/O hardening: ensure
FolderCreate("DualEA", FILE_COMMON)is called by all writers; prefer robust readers (FILE_TXT|FILE_ANSI), skip malformed rows, and log/continue. - Validator enhancements: expand
ValidateInsightsto assert non‑empty required metrics per slice and configurable thresholds; surface a concise report. - Ops scheduling: optionally add
scripts/RunInsightsValidation.ps1andScheduleInsightsValidation.ps1to run validation on a cadence.
- CI integration: add
Phase 2: ML/LSTM Pipeline
- TODOs (ops/hardening):
- CI trainer job: run
ML/run_train_and_export.baton schedule or data‑change; publishpolicy.jsonto Common Files and touchpolicy.reload. - Provenance & signing: include model hash, train window, metrics in
policy.json; sign/hash for integrity; keep last‑known‑good for rollback. - Shadow eval & A/B: support dual policies in PaperEA (shadow mode) prior to promotion to LiveEA.
- Calibration & thresholds: reliability diagrams, Brier, per‑slice min_conf calibration; document acceptance bands.
- Monitoring: log SHAP/feature importance drift signals; alert on material drift.
- Rollback guardrails: auto‑rollback to last‑known‑good on parse/plausibility failure during hot‑reload.
- CI trainer job: run
Note (sequencing): core ML training/export and PaperEA policy load are implemented. The structured 3×3 audit for Phase 2 will begin after Phase 3 — Cycle 3.
- Suggestions:
- Use walk‑forward splits; track ROC‑AUC, Brier, Expected‑R; calibrate probabilities and thresholds per slice.
- Export
policy.jsonwith provenance (model hash, train window, metrics); sign/hash for integrity. - Run A/B policies and shadow evaluation in PaperEA before promotion to LiveEA.
- Log SHAP/feature importance to monitor drift and potential leakage.
Phase 2a: PaperEA Execution & Telemetry
- TODOs (remaining):
- CI wiring: integrate
Scripts/ValidateInsights.mq5into CI and addkb_check.batto fail on staleinsights.json, empty/missing slices, and missing required coverage. - Headless operations: add
scripts/RunInsightsValidation.ps1andScheduleInsightsValidation.ps1for scheduled rebuild/validation. - Ops docs: add a short operator runbook covering rebuild/validate flows and artifact locations in
Common\\Files\\DualEA. - Explore caps ops: provide a lightweight reset helper and a smoke test that verifies daily/weekly counters persist and increment as expected.
- Telemetry polish: emit concise summaries for insights rebuild/validation outcomes.
- CI wiring: integrate
- Status:
- Baseline implemented (modular strategies, exploration caps/gating,
NoConstraintsMode, policy hot‑reload/fallbacks, Common Files persistence). - Timer‑based scanning parity with LiveEA is tracked under Phase 6.
- Baseline implemented (modular strategies, exploration caps/gating,
Phase 3: LiveEA & Feedback Loop
- Implement
LiveEA.mq5with the same strategies but stricter gating (policy + risk limits). - LiveEA logs to the same KB; trainer merges Paper+Live data.
- Feedback loop: Paper adapts based on Live outcomes via retrained policy.
- TODOs (remaining):
- LiveEA shadow‑mode: log candidate decisions; execute only top ML‑ranked passing min_conf and risk budget.
- Tighter gates vs PaperEA: stricter min_conf, spread/news/session caps, lower exploration caps.
- Enforce risk/circuit‑breakers: max daily loss, session drawdown, stricter spread/news/session caps.
- One‑execution‑per‑slice‑per‑minute de‑dup; deterministic tie‑breakers.
- Full timer‑scan parity (Phase 6): centralize ScanStrategies; consistent OnTick/Timer paths.
- Policy hot‑reload guardrails with rollback to last‑known‑good on parse/plausibility failure.
- Integrate
Include/PositionManager.mqhbehindUsePositionManager; route sizing/exits through it. - Prep hooks for Phase 6 parity: shared scanner entrypoints and per‑minute dedup state.
Red‑Team Execution Plan (3×3) — Current focus
- Phase 1: Codebase & Requirements Deep Dive
- Cycle 1 Structural Audit for LiveEA
- Cycle 2: Requirements Mapping to concrete code paths and artifacts; close gaps
- Cycle 3: Risk & Gaps Closure; redesign fragile modules as needed
- Phase 2: Design, Build, Validate
- Cycle 1: Task decomposition for LiveEA hardening; define acceptance criteria
- Cycle 2: Implement fixes; peer review and adversarial edge‑case tests
- Cycle 3: QA + fuzzing of IO/races; enforce CI gates
- Phase 3: Polish, Lockdown, Final Scoring
- Cycle 1: Docs & architecture alignment (README + docs/Phase3.md)
- Cycle 2: Code hygiene & consistency; refactors; dead‑code purge
- Cycle 3: Final scoring + roadmap
Next: Upon completing Phase 3 — Cycle 3 above, begin Phase 2 — Cycle 1 (ML/LSTM Pipeline) as the next 3×3 plan.
Phase 4: Risk & Safety Systems
Phase 4 TODO checklist
- Run Strategy Tester to trigger each Phase 4 gate and confirm risk4_* telemetry + margin_level reason
Phase 4 Telemetry: risk4_* events and reason strings
risk4_spread: spread cap gating.- Shadow (NoConstraintsMode=true):
LogGatingShadow(strategy, symbol, tf, "risk4_spread", ok, reason, true) - Enforced:
[RISK4] blocked <strategy> on <symbol>/<tf> reason=<spread_reason>andLogGating(symbol, tf, strategy, "risk4_spread", allow, reason)
- Shadow (NoConstraintsMode=true):
Phase 5: Dynamic Strategy/Indicator Selection
- Status: In progress — merged into LiveEA: cooldown + auto re-enable + dynamic auto‑tuning with telemetry (
underperf_auto_disabled,p5_cooldown,p5_auto_reenabled,p5_auto_tune).- New (LiveEA): Phase 5 telemetry completed for
p5_refresh,p5_rescore, andp5_selector_cfg.
- New (LiveEA): Phase 5 telemetry completed for
- TODO (prioritized)
- Selector wiring parity in both EAs (OnInit): thresholds, recency overlay, strict thresholds, and per‑symbol/timeframe strategy registration.
- Acceptance: strategies register per symbol/TF; logs/telemetry confirm thresholds/recency overlays applied.
- Correlation‑aware pruning within selector/gating to retain a diversified subset per symbol/timeframe.
- Emit
p5_corrtelemetry; cap per symbol/TF.
- Emit
- Multi‑timeframe confirmations in selector/gating with inputs (e.g.,
EnableMTFConfirmations,MTFConfirmTF,MTFConfirmMinScore) and telemetry (p5_mtf). - Parameter stability tracking in selector; compute stability score and gate via (
P5_StabilityGateEnable,P5_StabilityWindowDays,P5_StabilityMaxStdR) with telemetry (p5_stability). - Policy integration for subset selection/weighting from ML policy (beyond neutral scaling); document and gate safely.
- Feature/telemetry export parity after exec in both EAs (ATR, spread, TF, trailing params, strategy features).
- Telemetry consistency across both EAs: standardize remaining
p5_*event keys and shadow logging underNoConstraintsMode(PaperEA parity). - Test plan: backtests (walk‑forward), forward/demo runs, and monitoring to validate selector and gating behavior.
- Selector wiring parity in both EAs (OnInit): thresholds, recency overlay, strict thresholds, and per‑symbol/timeframe strategy registration.
Phase 6: Low‑Latency Minutely Scanner & ML‑Enriched Orchestration
-
Status: Partial — OnTimer heartbeat/reload present; centralized
ScanStrategieswith minute de‑dup not yet implemented. -
Guarantee both EAs "look" for trades at least every minute, independent of tick arrival.
- Add inputs:
TimerScanEnabled(bool, defaulttrue),TimerScanSeconds(int, default60). OnInit(): configureEventSetTimer(TimerScanSeconds)whenTimerScanEnabled.OnTimer(): run aScanStrategies()routine that performs the same Refresh → CheckSignal → gating (selector + insights + policy + caps) path asOnTick().- Deduplicate within a minute per
symbol|timeframe|strategyusing a rollingLastScanMinutemap to avoid duplicate triggers if ticks also arrive. - Preserve existing behavior: always
CheckPolicyReload()andTelemetry.Flush()on timer.
- Add inputs:
-
Performance & reliability hardening
- Pre‑create and reuse indicator handles for all registered strategies/timeframes to avoid reallocation overhead per scan.
- Cache policy and insights in memory; throttle file I/O to timer ticks; batch telemetry writes.
- Optional:
EventSetMillisecondTimer(250–1000ms)for ultra‑low‑latency scanning in LiveEA; gate by CPU budget.
-
LiveEA enrichment path
- Consume trained ML outputs for per‑slice
min_conf, expected‑R, and dynamic sizing; apply viaApplyPolicyScaling(). - Maintain exploration caps and detailed
LogGating/LogGatingShadowfor full auditability.
- Consume trained ML outputs for per‑slice
-
Test & validation plan
- Backtests: walk‑forward with OOS across 3–5y per symbol/TF, including realistic spread/slippage/commission; parameter stability and FDR controls.
- Forward tests: parallel demo/real, M1 granularity logs, latency SLO (<250ms scan→gate→exec where broker allows), missed‑opportunity audits.
- Monitoring: 60s heartbeat, exploration cap summaries, and per‑slice gating counters.
-
Suggestions:
- Guard
OnTimer()with a re‑entrancy flag to prevent overlapping scans; prefer non‑blocking work. - Expose
TimerScanSecondsoverrides (e.g., 30s) and optionalEventSetMillisecondTimerfor LiveEA with CPU budget guard. - Record scan→gate latency metrics; emit to telemetry for SLO tracking.
- Pre‑warm indicator handles in
OnInit(); refresh/rebuild on symbol/period change; cache policy/insights in memory. - Centralize gating in a reusable
EvaluateAndMaybeExecute()path used by bothOnTick()and timer scans.
- Guard
Phase 7: Monitoring & Telemetry
-
Emit telemetry CSV/JSON (tick latency, SL moves, trades/sec, error rates).
-
Optional lightweight dashboard (HTML/JS) or notebook to visualize metrics.
-
Suggestions:
- Define SLOs: scan→gate latency, missed‑opportunity rate, per‑reason gating counts.
- Alerts for policy/insights read failures and staleness; log rotation and retention policy.
- Optional dashboard/notebook; per‑slice counters and trend lines for drift/anomaly detection.
Phase 8: Adversarial/Jailbreak Hardening
-
Fuzz file I/O (empty/corrupt/locked
policy.json/insights.json/CSV) and assert safe fallbacks, halts, or rollbacks. -
Timing/race tests: low-tick periods, bar-boundary races, clock skew; verify de-dup and single-exec semantics.
-
Resource pressure: very large CSVs, slow disk; ensure
OnTick()remains non-blocking, heavy I/O on timer. -
Produce Q&A logs, expert rebuttals, and jailbreak traces mapped to files/modules per @/greep.
-
Suggestions:
- Add
SafeModeinput to force conservative gating on anomalies; persist last‑known‑goodpolicy.json/insights.jsoncaches. - Create a fuzz harness (script/test) that mutates JSON/CSV and asserts expected EA behavior and logs.
- Store jailbreak trace logs in
Common\Files\DualEA\jailbreak\with timestamps and module references. - Automate adversarial tests in CI; fail the pipeline on missing fallbacks or unsafe behavior.
- Add
Phase 9: MLOps & Continuous Training
-
Data/versioning (DVC/Git LFS), model registry, and feature/label drift detection with alerts.
-
Scheduled retraining and policy export with provenance (model hash, data window, metrics).
-
Canary deployment of
policy.jsonand automatic rollback on degradation or plausibility failures. -
Suggestions:
- Define acceptance criteria (min ROC‑AUC/Brier, uplift vs baseline) before policy promotion to LiveEA.
- Build reproducible training pipelines (seeded, environment‑pinned) and artifact signing.
- Add drift detectors on features/labels; trigger retrain or quarantine when thresholds are exceeded.
- Maintain a data catalog of
features.csvschema versions and TTL/retention policies.
Phase 10: Multi‑Symbol/TF Orchestration (Optional)
-
Option A: one EA per symbol/TF (simple, robust). Option B: single orchestrator scanning a configured portfolio.
-
Central registry of symbols/TFs; per-slice de‑dup and CPU budget/load shedding to maintain latency SLOs.
-
Consistent telemetry across all slices; portfolio‑level risk budget enforcement.
-
Suggestions:
- For orchestrator mode: implement per‑slice schedule, backpressure, and fairness to avoid starving symbols.
- Throttle scanning and degrade gracefully under CPU load; prioritize LiveEA executions.
- Guard broker API calls; exponential backoff on transient errors; per‑symbol error budgets.
- Keep robust chart‑per‑slice mode as default until orchestrator proves reliability.
Phase 11: Performance & Resilience
-
Avoid heavy file I/O in
OnTick(); defer to timer/batched writes; useFILE_SHARE_*and rotate logs. -
Pre‑allocate buffers, reuse indicator handles; cap log verbosity on hot paths.
-
Watchdog for timer and safe‑mode fallbacks on parse errors (use last‑known‑good caches).
-
Suggestions:
- Implement log rotation (daily/size‑based) and retention; compress archives.
- Add a timer watchdog that re‑initializes the timer if missed deadlines are detected.
- Use re‑entrancy guards around critical sections (order placement, persistence writes).
- Ensure
OnDeinit()flushes telemetry and persists counters atomically.
Next Milestones
- Add features.csv export and insights.json aggregation.
- Provide Python ML trainer and batch launcher (writes policy.json).
- Add
policy.jsonloader in PaperEA and gating/scaling application. - Skeleton
LiveEA.mq5with circuit breaker checks.
LiveEA: PositionManager — Correlation Sizing + Dynamic Risk Caps
This section documents the LiveEA wiring of Include/PositionManager.mqh for correlation‑aware sizing and dynamic risk caps. All features are behind UsePositionManager and new PM inputs.
Inputs (LiveEA)
- PositionManager switches
UsePositionManager(bool)PM_EnableCorrelationSizing(bool, default true)PM_EnableAdaptiveSizing(bool),PM_MinSizeMult(double),PM_MaxSizeMult(double)PM_ScalingProfile(int: 0=Aggressive, 1=Moderate, 2=Conservative)PM_EnableVolatilityExit(bool),PM_VolatilityExitATRMult(double)
- Dynamic risk caps (optional)
PM_EnableDynamicRiskCaps(bool)PM_MaxDailyDDPct(double),PM_MaxPosRiskPct(double),PM_MaxPortfolioRiskPct(double),PM_RiskDecay(double 0..1)
- Correlation sizing floors
PM_CorrMinMult(double) — minimum fraction of base lots allowed after correlation dampeningPM_CorrMinLots(double) — absolute minimum lots floor after dampening
Behavior
- New entries: after policy scaling (
ApplyPolicyScaling), LiveEA applies correlation‑adjusted sizing viaCPositionManager.CalculateCorrelationAdjustedVolume(symbol, base_lots).- Floors:
PM_CorrMinMult * base_lotsandPM_CorrMinLotsare enforced to avoid over‑dampening.
- Floors:
- Scale‑ins: when PositionManager proposes
vol_scaled, LiveEA applies the same correlation dampening and floors before overridingorder.lots. - Dynamic risk caps: configured in
OnInit()viaCPositionManager.SetDynamicRisk(...). Internally caps additional size growth (implementation advisory, subject to future expansion).
Telemetry & Logs
- Events:
pm_corr_sizing,pm_corr_floor,pm_corr_scale_in,pm_corr_floor_scale_inwith correlation value and before/after lots. - Init log:
[PM] Initialized (...)includes adaptive, profile, volatility exit, and dynamic risk params.
Validation
- Enable
UsePositionManager=true,PM_EnableCorrelationSizing=true. - Open a correlated position (e.g., EURUSD) and then trade a related pair (e.g., GBPUSD). Expect reduced lots and
pm_corr_sizingevent. - Trigger a scale‑in via PositionManager; expect
pm_corr_scale_inand floor events if dampening is severe. - Toggle
PM_CorrMinMult/PM_CorrMinLotsto observe floors applying (logs show before/after + floor values).
License
Copyright 2025, Windsurf Engineering.
If you truly need low-latency sync later, consider:
- Named pipes or local TCP with a lightweight Python service
- A minimal REST loopback server
Note: These add failure modes and deployment friction; file-based I/O is simpler and reliable for MT5. Prefer file-based until a concrete latency SLO requires otherwise.
Appendix A: Red‑Team Artifacts (Q&A, Rebuttals, Jailbreak Traces)
To operationalize the 3×3 red‑team process, store artifacts in MT5 Common Files for both Tester and Live to access.
- Base path:
Common\\Files\\DualEA\\jailbreak\\ - Run layout:
jailbreak\\runs\\YYYYMMDD_HHMMSS/qna.md— Q&A log for the sessionrebuttals.jsonl— Expert rebuttals (JSONL)traces.jsonl— Jailbreak traces (JSONL)summary.md— Short session summary with outcomes and follow‑ups
jailbreak\\latest/— optional symlink/copy of most recent run for dashboards
A.1 Q&A Log (Markdown)
Minimal, structured template capturing prompts, answers, and references to code.
# Red‑Team Q&A — <YYYY‑MM‑DD HH:MM:SS>
## Q1: <question>
- Context: <module(s) e.g., `Experts/Advisors/DualEA/PaperEA/PaperEA.mq5`>
- Hypothesis: <expected behavior>
- Answer: <observed behavior/decision>
- Evidence: <file refs, line ranges, logs>
- Outcome: pass | fail | needs‑followup
## Q2: ...
A.2 Expert Rebuttals (JSONL)
One JSON per line with explicit links to files/modules and decisions.
{"id":"rb_0001","claim":"Exploration bypass triggers with existing slice","rebuttal":"Bypass is no‑slice‑only; existing under‑threshold slices are gated","evidence_files":["Experts/Advisors/DualEA/PaperEA/PaperEA.mq5"],"decision_paths":["Gate->Insights->ExploreCaps"],"status":"resolved","timestamp":"2025-08-17T00:00:00Z"}
Fields:
id: stable idclaim: red‑team claimrebuttal: concise counterargumentevidence_files: array of repository pathsdecision_paths: e.g.,Scan->Selector->Gate->Executestatus: open | resolved | needs‑worktimestamp: ISO8601
A.3 Jailbreak Traces (JSONL)
Record adversarial tests, input mutations, expected vs observed behavior, and severity.
{"ts":"2025-08-17T00:00:00Z","module":"PolicyLoader","file":"Experts/Advisors/DualEA/Include/StrategySelector.mqh","symbol":"EURUSD","timeframe":60,"case":"corrupt_policy_json","mutation":"truncated file","expected":"fallback to last‑known‑good policy with log and no crash","observed":"fallback engaged; neutral scaling applied","outcome":"safe","severity":"low","artifacts":["Common/Files/DualEA/policy.json","Common/Files/DualEA/policy.backup.json"],"notes":"Validated timer reload path and guardrails"}
Fields:
ts: timestampmodule,file: component and path under reposymbol,timeframe: slice context when applicablecase,mutation: short names for catalogingexpected,observed: behaviorsoutcome: safe | unsafe | inconclusiveseverity: low | medium | highartifacts: related files (Common Files paths allowed)notes: free‑form
A.4 Traceability Rules
- Always reference concrete files/paths (e.g.,
Experts/Advisors/DualEA/LiveEA/LiveEA.mq5). - Map each finding to a decision path:
OnTick()->ScanStrategies()->Gating()->TradeManager.Execute(). - Prefer JSONL for machine‑readable aggregation; keep Markdown summaries for humans.
- Attach log snippets (Journal) and KB rows when relevant.
A.5 CI Hooks
- Copy the latest run into
jailbreak\\latest/after each session. - Optional validator can assert that for each
caseseen in traces there is at least oneoutcome=safeor an open issue. - Include red‑team artifacts in reports alongside insights validation.
A.6 Operational Notes
- PaperEA and LiveEA do not read from
jailbreak/; it is a write‑only audit area. - Keep PII/broker identifiers out of logs; sanitize before sharing.
- Large artifacts (CSV/JSON) should be rotated/compressed if size grows beyond operational limits.