namespace KArtSell.Modules.ModelOperations.ShadowRun;
///
/// Immutable result of shadow run evaluation.
/// Includes performance metrics, phase attribution, and validation gates.
///
public sealed record ShadowRunResult(
Guid RunId,
Guid ModelId,
DateOnly WindowStartDate,
DateOnly WindowEndDate,
ShadowRunStatus Status,
ShadowRunMetrics Metrics,
PhaseBreakdown PhaseAnalysis,
CostAnalysis CostAnalysis,
FalseExitAnalysis FalseExitAnalysis,
ValidationGates ValidationGates,
string? ErrorMessage = null,
DateTimeOffset CreatedAt = default);
///
/// Execution status of shadow run.
///
public enum ShadowRunStatus
{
Pending = 0,
DataBackfill = 1,
Replay = 2,
EvaluationComplete = 3,
Failed = 4
}
///
/// Performance metrics for shadow run period.
///
public sealed record ShadowRunMetrics(
decimal TotalReturn, // % return over period
decimal SharpeRatio, // Daily Sharpe ratio
decimal CalmurRatio, // Calmar ratio (return / max drawdown)
decimal MaximumDrawdown, // Peak-to-trough % loss
decimal WinRate, // % of profitable days
decimal ProbOfBacktestOverfit, // PBO score (must be ≤ 20%)
decimal DailySharePercentile, // DSR percentile (must be ≥ 95%)
int TradingDays); // Actual trading days in period
///
/// Market phase segmentation: Bull, Bear, Sideways, Volatility.
///
public sealed record PhaseBreakdown(
PhaseMetrics BullMarket,
PhaseMetrics BearMarket,
PhaseMetrics Sideways,
PhaseMetrics HighVolatility);
public sealed record PhaseMetrics(
int TradingDays,
decimal Return,
decimal Sharpe,
decimal WinRate,
decimal MaxDrawdown);
///
/// Cost analysis: base scenario vs. 2x cost scenario.
///
public sealed record CostAnalysis(
decimal BaseScenarioReturn,
decimal TwoXCostReturn,
bool PassesTwoXPositive); // TwoXCostReturn > 0
///
/// False exit analysis: reentry success rate, duration out of position.
///
public sealed record FalseExitAnalysis(
int FalseExitCount,
int ReentrySuccessCount,
decimal ReentrySuccessRate,
decimal AverageDaysOutOfPosition);
///
/// Validation gates: pass/fail for production readiness.
///
public sealed record ValidationGates(
bool PboUnder20, // PBO ≤ 20%
bool DsrAbove95, // DSR ≥ 95th percentile
bool CostTwoXPositive, // 2x cost scenario profitable
bool AllGatesPassed); // AND of all above