- Restore EntriesPerDirection=2 so runner leg can enter alongside scaler.
Replay burst protection is now handled by the State.Realtime guard in
ProcessStrategyIntent rather than by limiting entries per direction.
- Set MaxOpenPositions=2 in SimpleORBNT8 to match scaler+runner structure.
Previous value of 1 caused PortfolioRiskManager to block the runner.
- Confirm RiskPerTrade=100 and MaxContracts=3 as live defaults.
The /9-contract configuration was a one-off backtest experiment and
must not be the deployed default.
- _realtimeBarSeen field and OnBarUpdate guard confirmed present and correct.
ProcessStrategyIntent guard: if (State == State.Realtime && !_realtimeBarSeen)
allows backtest (State.Historical) to execute normally while blocking
replay bars in live/SIM mode.
Backtest validation: Jan 2026 - Mar 2026, NQ, trail=20ticks
PF=7.00, win=75%, avg winner=, avg loser=-, max DD=-
- Move SetStopLoss/SetProfitTarget before EnterLong/EnterShort in
SubmitOrderToNT8(). NT8 requires stop/target pre-registered to the
signal name before entry fires — calling after caused silent fallback
to strategy defaults in backtest, nullifying all dynamic target scaling.
Add [dynamic] tag to SUBMIT log line for observability.
- Wire OnPositionUpdate() in NT8StrategyBase to call
_riskManager.OnPnLUpdate() and PortfolioRiskManager.ReportPnL() on
every position change. Daily loss limit checks were evaluating against
PnL permanently — safety net now live.
- Fix BasicRiskManager.CheckEmergencyConditions() hardcoded 1000 limit.
Add dailyLossLimit constructor overload; emergency halt now fires at
90% of the configured DailyLossLimit, not a hardcoded .
- Add AVWAP slope hard veto in SimpleORBStrategy.OnBar(). Trend=0.00
(AVWAP working against trade direction) can no longer pass grade
filter. Pre-scoring veto prevents high gap/volume scores from masking
a directionally broken setup.
- Raise default MinTradeGrade from 4 (B) to 5 (A) in both
SimpleORBStrategy and SimpleORBNT8 defaults.
- Scale TargetTicks dynamically in CreateIntent() based on ORB/ATR
ratio (0.75x-1.75x of base target). Tight ORBs get extended targets;
wide ORBs get tightened. Hard floor at stopTicks+4.
- Add NarrowRange, OrbRangeVsAtr, GapDirectionAlignment,
BreakoutVolumeStrength, PriorDayCloseStrength default weights in
ConfluenceScorer constructor. All 10 factors now registered.
- Fix session_open_price tracking for GapDirectionAlignment factor.
TodayOpen in DailyBarContext now reflects first RTH bar open, not
the breakout bar open.
- Log all 10 factor scores at signal acceptance for observability.
- Fix BreakoutVolumeStrength: was always 0.50 due to self-referential volume comparison
- Fix VolatilityRegime: was always ~0.50 due to single-bar value area baseline
- Fix multi-trade-per-day: session reset now compares trading date not session timestamp
- Add NT8.Strategies.dll to deploy script (was missing from every deployment)
- Fix grade filter minimum from C to B (MinTradeGrade=4)
- Add MinTradeGrade as configurable NinjaScript property
- Fix confluence_score metadata: now stores full ConfluenceScore object not double
- Baseline: B-grade long-only 30min ORB on ES, Jan 2025-Mar 2026
120 trades, 35.8% win rate, PF=1.12, Sharpe=0.18, MaxDD=
Current state: Strategy builds and loads correctly, passes 240+ tests,
backtest (Strategy Analyzer) works but zero trades execute on live/SIM.
Root cause identified: NT8OrderAdapter.ExecuteInNT8() is a stub - it logs
to an internal list but never calls EnterLong/EnterShort/SetStopLoss/
SetProfitTarget. Fix is ready in TASK_01_WIRE_NT8_EXECUTION.md.
Task files added (ready for Kilocode):
- TASK_01_WIRE_NT8_EXECUTION.md (CRITICAL - INT8ExecutionBridge + wiring)
- TASK_02_EMERGENCY_KILL_SWITCH.md (CRITICAL - kill switch + verbose logging)
- TASK_03_WIRE_CIRCUIT_BREAKER.md (HIGH - wire ExecutionCircuitBreaker)
Build Status: All 240+ tests passing, zero errors
Next: Run Kilocode against TASK_01, TASK_02, TASK_03 in order
- Add OrderModels with all enums and records
- Implement IOrderManager interface
- Create BasicOrderManager with thread-safe state machine
- Add INT8OrderAdapter interface for NT8 integration
- Implement MockNT8OrderAdapter for testing
- Add comprehensive unit tests (34 tests, all passing)
- Full C# 5.0 compliance
- >95% code coverage
- Zero build warnings for new code
Closes Phase 1 OMS implementation