333 lines
10 KiB
Markdown
333 lines
10 KiB
Markdown
# DualEA Action Framework
| |||
| |||
## 3 Phases × 3 Cycles = 9 Iterative Layers
| |||
| |||
This framework operationalizes the red-team engineering process for the DualEA trading system.
| |||
| |||
---
| |||
| |||
## Phase 1: Codebase & Requirements Deep Dive
| |||
| |||
### Cycle 1: Structural Audit (Jailbreak Permitted)
| |||
| |||
**Purpose**: Full inspection of architecture, files, and components. Challenge structure, spot contradictions, uncover fragility.
| |||
| |||
**Deliverables**:
| |||
- Inventory gating paths: `strategy → selector → 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
| |||
- Audit map + risk log
| |||
| |||
**Key Questions**:
| |||
1. Does every strategy have a registered signal generator?
| |||
2. Are all file I/O operations non-blocking in `OnTick()`?
| |||
3. Is there a single source of truth for configuration?
| |||
4. Are risk gates (G1, G4, G7, G8) truly never skipped?
| |||
| |||
**Jailbreak Traces**:
| |||
- Challenge: "What if `insights.json` is corrupted mid-read?"
| |||
- Challenge: "What if `policy.json` is updated during execution?"
| |||
- Challenge: "What if two EAs write to `knowledge_base.csv` simultaneously?"
| |||
| |||
### Cycle 2: Requirements Mapping
| |||
| |||
**Purpose**: Trace every requirement to real code. Flag mismatches, absences, or unnecessary constraints.
| |||
| |||
**Deliverables**:
| |||
- Spec one-pagers per feature with inputs, data flow, telemetry, failure/rollback
| |||
- FR-01..FR-10 feature specification matrix
| |||
- Gap analysis: documented vs implemented
| |||
| |||
**Feature Specification Template**:
| |||
```
| |||
FR-XX: Feature Name
| |||
- Inputs: [list with types/defaults]
| |||
- Data Flow: [diagram or path]
| |||
- Telemetry: [event keys, severity]
| |||
- Failure Mode: [what happens on error]
| |||
- Rollback: [how to disable/revert]
| |||
- Acceptance: [test criteria]
| |||
```
| |||
| |||
### Cycle 3: Risk & Gaps Closure
| |||
| |||
**Purpose**: Uncover technical debt, overlaps, or unsafe abstractions. Redesign modules based on jailbreak findings.
| |||
| |||
**Deliverables**:
| |||
- Threat model: file races, stale artifacts, partial reloads
| |||
- Mitigations + rollback levers
| |||
- Updated lifecycle gates
| |||
| |||
**Known Risks**:
| |||
| Risk | Impact | Mitigation |
| |||
|------|--------|------------|
| |||
| Stale `insights.json` | Wrong gating decisions | Auto-reload with freshness check |
| |||
| Corrupt `policy.json` | Crash or wrong scaling | JSON validation + fallback |
| |||
| File lock on CSV | Write failure | FILE_SHARE_READ/WRITE |
| |||
| Memory leak | EA slowdown/crash | Destructor audit, smart pointers |
| |||
| Race condition | Duplicate trades | Per-minute de-duplication |
| |||
| |||
---
| |||
| |||
## Phase 2: Design, Build, Validate
| |||
| |||
### Cycle 1: Task Decomposition
| |||
| |||
**Purpose**: Translate all findings and objectives into granular engineering tasks.
| |||
| |||
**Deliverables**:
| |||
- Backlog with effort/risk/owner/sequence for FR-01..FR-10
| |||
- Definition of Ready checklist for each feature
| |||
| |||
**Acceptance Criteria**:
| |||
- [ ] Inputs defined with types, defaults, validation
| |||
- [ ] Data flow documented with telemetry points
| |||
- [ ] Failure modes identified with rollback behavior
| |||
- [ ] Test plan with deterministic validation
| |||
| |||
### Cycle 2: Code + Peer Review
| |||
| |||
**Purpose**: Implement fixes and improvements. Subject code to red team reviews and adversarial edge-case attacks.
| |||
| |||
**Review Checklist**:
| |||
- [ ] Feature flags (`Use*`) present and functional
| |||
- [ ] Shared includes under `Include/` (no duplication)
| |||
- [ ] Telemetry events match schema
| |||
- [ ] Memory management (no leaks, proper destructors)
| |||
- [ ] Error handling (graceful degradation)
| |||
| |||
**Peer Review Questions**:
| |||
1. "Can this be disabled without breaking other systems?"
| |||
2. "What happens if this file is missing/corrupt/locked?"
| |||
3. "Is this I/O on timer or tick? Should it be?"
| |||
4. "Does this respect CPU budgeting (P3)?"
| |||
| |||
### Cycle 3: QA + Fuzzing
| |||
| |||
**Purpose**: Extend test coverage, apply fuzzing, and simulate attack paths.
| |||
| |||
**Test Types**:
| |||
- Unit-like stubs for gate logic
| |||
- Deterministic sims for file I/O
| |||
- Log assertions for telemetry
| |||
- Fuzz: missing files, reload storms, high-tick
| |||
| |||
**Fuzz Scenarios**:
| |||
```python
| |||
# Example fuzz test patterns
| |||
fuzz_cases = [
| |||
("empty_policy_json", ""),
| |||
("truncated_insights", '{"version": "2.0",'), # incomplete
| |||
("locked_knowledge_base", "FILE_LOCKED"),
| |||
("high_tick_rate", 1000), # 1000 ticks/second
| |||
("stale_insights", "48_hours_old"),
| |||
("corrupt_csv", "malformed,row,here"),
| |||
]
| |||
```
| |||
| |||
---
| |||
| |||
## Phase 3: Polish, Lockdown, Final Scoring
| |||
| |||
### Cycle 1: Docs & Architecture Alignment
| |||
| |||
**Purpose**: Sync documentation with reality—including all discovered and undocumented logic.
| |||
| |||
**Deliverables**:
| |||
- README.md updated with current architecture
| |||
- KB-Schemas.md with all CSV formats
| |||
- PolicySchema.md with current JSON structure
| |||
- Operations.md with runbook procedures
| |||
| |||
**Documentation Checklist**:
| |||
- [ ] All inputs documented with defaults
| |||
- [ ] All telemetry events in schema
| |||
- [ ] File paths correct (Common Files)
| |||
- [ ] Build instructions tested
| |||
- [ ] Troubleshooting section covers known issues
| |||
| |||
### Cycle 2: Code Hygiene & Consistency
| |||
| |||
**Purpose**: Clean up the codebase: refactor names, eliminate dead weight, and harden modules against jailbreaks.
| |||
| |||
**Refactoring Targets**:
| |||
- Input naming consistency (`UseXxx` vs `EnableXxx`)
| |||
- Enum/log tag standardization
| |||
- Dead code elimination
| |||
- Include path cleanup
| |||
| |||
**Hardening Tasks**:
| |||
- Add `const` correctness where missing
| |||
- Validate all array bounds
| |||
- Replace magic numbers with constants
| |||
- Add assertions for invariants
| |||
| |||
### Cycle 3: Final Scoring + Roadmap
| |||
| |||
**Purpose**: Score components for completeness and quality. Debate priorities using insights from red-team cycles.
| |||
| |||
**Scoring Matrix**:
| |||
| Component | Completeness | Safety | Performance | Maintainability | Priority |
| |||
|-----------|-------------|--------|-------------|-----------------|----------|
| |||
| GateSystem | 90% | 85% | 80% | 75% | P1 |
| |||
| PolicyEngine | 85% | 80% | 85% | 70% | P2 |
| |||
| PositionManager | 75% | 70% | 75% | 65% | P3 |
| |||
| Telemetry | 80% | 90% | 85% | 80% | P1 |
| |||
| InsightsLoader | 85% | 85% | 80% | 75% | P2 |
| |||
| |||
**Roadmap to 100% Maturity**:
| |||
1. **Wave 1** (risk first): Circuit breakers, session filters, promotion gate
| |||
2. **Wave 2** (positioning): PositionManager, correlation caps, vol sizing
| |||
3. **Wave 3** (performance): Timer cadence, batching, caching
| |||
4. **Wave 4** (ML): Drift detection, A/B testing, auto-retrain
| |||
| |||
---
| |||
| |||
## Action Backlog (FR-01..FR-10)
| |||
| |||
### FR-01: Circuit Breakers
| |||
- **Inputs**: `UseCircuitBreakers`, `DailyLossLimit`, `DailyDrawdownLimit`, `CooldownMinutes`
| |||
- **Behavior**: Block entries, allow exits; cooldown after trigger
| |||
- **Telemetry**: `cb:*` events
| |||
- **DoD**: Day rollover sims pass
| |||
| |||
### FR-02: Session/Window Filter
| |||
- **Inputs**: `UseSessionFilter`, `SessionTZ`, `SessionWindows`
| |||
- **Behavior**: Pre-gate block outside trading hours
| |||
- **DoD**: DST/tz edge cases handled
| |||
| |||
### FR-03: News Filter
| |||
- **Inputs**: `UseNewsFilter`, `ImpactLevelMin`, `PreLockoutMin`, `PostLockoutMin`
| |||
- **Behavior**: Block around high-impact events
| |||
- **DoD**: Replay test with historical events
| |||
| |||
### FR-04: Position Manager (v1)
| |||
- **Inputs**: `UsePositionManager`, `ExitProfile`, `ClusterMinPts`, `PerSymbolMax`
| |||
- **Behavior**: Centralized exits/scaling hooks
| |||
- **DoD**: Backtest diffs acceptable
| |||
| |||
### FR-05: Correlation Exposure Caps
| |||
- **Inputs**: `UseCorrelationCaps`, `CorrLookbackDays`, `MaxGroupExposure`
| |||
- **Behavior**: Cap grouped exposure
| |||
- **DoD**: Deterministic calculation verified
| |||
| |||
### FR-06: Volatility Position Sizing
| |||
- **Inputs**: `UseVolSizing`, `ATRPeriod`, `RiskPerTrade`
| |||
- **Behavior**: ATR-adaptive lots
| |||
- **DoD**: Regime consistency, caps respected
| |||
| |||
### FR-07: Regime Detector Stub
| |||
- **Inputs**: `UseRegime`, `RegimeMethod`
| |||
- **Behavior**: Tag regime; optional gating modifier
| |||
- **DoD**: Stable tags across timeframes
| |||
| |||
### FR-08: Promotion Gate & Evaluator
| |||
- **Inputs**: Min trades/hit-rate/expectancy/DD/Sharpe thresholds
| |||
- **Artifact**: `Scripts/DualEA/AssessPromotion.mq5`
| |||
- **DoD**: Reproducible promotion decisions
| |||
| |||
### FR-09: Telemetry Standardization & Ops Views
| |||
- **Event Schema**: Standardized fields/severity
| |||
- **Rotation**: Size/time bounds
| |||
- **DoD**: Operator can diagnose from logs alone
| |||
| |||
### FR-10: Performance
| |||
- **Event Batching**: Reduce I/O pressure
| |||
- **Log Throttling**: Prevent spam
| |||
- **Timer Cadence**: Consistent scan intervals
| |||
- **DoD**: CPU/mem profile under stress
| |||
| |||
---
| |||
| |||
## Control Gates (Before Coding)
| |||
| |||
### Gate A: Specs Complete
| |||
- [ ] Inputs, flow, telemetry, rollback defined for FR-01..FR-10
| |||
- [ ] Security review complete
| |||
- [ ] Test plan approved
| |||
| |||
### Gate B: Test Plans Defined
| |||
- [ ] Unit stubs ready
| |||
- [ ] Deterministic sims configured
| |||
- [ ] Log assertions defined
| |||
| |||
### Gate C: Security + Fail-Safe Review
| |||
- [ ] LiveEA defaults conservative
| |||
- [ ] Rollback levers identified
| |||
- [ ] Circuit breakers in place
| |||
| |||
---
| |||
| |||
## Ownership & Sequencing
| |||
| |||
### Wave 1 (Risk First)
| |||
1. FR-01 Circuit Breakers
| |||
2. FR-02 Session Filter
| |||
3. FR-08 Promotion Gate
| |||
| |||
### Wave 2 (Exposure/Positioning)
| |||
4. FR-04 Position Manager
| |||
5. FR-05 Correlation Caps
| |||
6. FR-06 Volatility Sizing
| |||
| |||
### Wave 3 (Context/Performance)
| |||
7. FR-03 News Filter
| |||
8. FR-07 Regime Detector
| |||
9. FR-09 Telemetry
| |||
10. FR-10 Performance
| |||
| |||
**Note**: Features default-off in LiveEA until validated in PaperEA.
| |||
| |||
---
| |||
| |||
## Q&A Log Template
| |||
| |||
```markdown
| |||
## Q1: [Question]
| |||
- Context: [module(s)]
| |||
- Hypothesis: [expected behavior]
| |||
- Answer: [observed behavior]
| |||
- Evidence: [file refs, line ranges, logs]
| |||
- Outcome: pass | fail | needs-followup
| |||
```
| |||
| |||
## Rebuttal Template
| |||
| |||
```json
| |||
{
| |||
"id": "rb_XXXX",
| |||
"claim": "[red-team claim]",
| |||
"rebuttal": "[concise counterargument]",
| |||
"evidence_files": ["path/to/file.mqh"],
| |||
"decision_paths": ["Gate->Insights->Execute"],
| |||
"status": "open | resolved | needs-work",
| |||
"timestamp": "2026-01-15T00:00:00Z"
| |||
}
| |||
```
| |||
| |||
## Jailbreak Trace Template
| |||
| |||
```json
| |||
{
| |||
"ts": "2026-01-15T00:00:00Z",
| |||
"module": "[component]",
| |||
"file": "[path]",
| |||
"symbol": "[symbol]",
| |||
"timeframe": 60,
| |||
"case": "[test case]",
| |||
"mutation": "[input mutation]",
| |||
"expected": "[expected behavior]",
| |||
"observed": "[observed behavior]",
| |||
"outcome": "safe | unsafe | inconclusive",
| |||
"severity": "low | medium | high",
| |||
"artifacts": ["related files"],
| |||
"notes": "[free-form]"
| |||
}
| |||
```
| |||
| |||
---
| |||
| |||
## Related Documentation
| |||
- [README.md](README.md) - System overview
| |||
- [Phase3.md](Phase3.md) - LiveEA implementation
| |||
- [Operations.md](Operations.md) - Operational runbook
|