using System; using System.Collections.Generic; namespace NT8.Core.Analytics { /// /// Dimensions used for PnL attribution analysis. /// public enum AttributionDimension { /// /// Strategy-level attribution. /// Strategy, /// /// Trade grade attribution. /// Grade, /// /// Volatility and trend regime attribution. /// Regime, /// /// Time-of-day attribution. /// Time, /// /// Symbol attribution. /// Symbol, /// /// Risk mode attribution. /// RiskMode } /// /// PnL and performance slice for one dimension value. /// public class AttributionSlice { /// /// Dimension display name. /// public string DimensionName { get; set; } /// /// Value of the dimension. /// public string DimensionValue { get; set; } /// /// Total PnL in the slice. /// public double TotalPnL { get; set; } /// /// Average PnL per trade. /// public double AvgPnL { get; set; } /// /// Number of trades in slice. /// public int TradeCount { get; set; } /// /// Win rate in range [0,1]. /// public double WinRate { get; set; } /// /// Profit factor ratio. /// public double ProfitFactor { get; set; } /// /// Contribution to total PnL in range [-1,+1] or more if negative totals. /// public double Contribution { get; set; } } /// /// Full attribution report for one dimension analysis. /// public class AttributionReport { /// /// Dimension used for the report. /// public AttributionDimension Dimension { get; set; } /// /// Report generation time. /// public DateTime GeneratedAtUtc { get; set; } /// /// Total trades in scope. /// public int TotalTrades { get; set; } /// /// Total PnL in scope. /// public double TotalPnL { get; set; } /// /// Attribution slices. /// public List Slices { get; set; } /// /// Additional metadata. /// public Dictionary Metadata { get; set; } /// /// Creates a new attribution report. /// public AttributionReport() { GeneratedAtUtc = DateTime.UtcNow; Slices = new List(); Metadata = new Dictionary(); } } /// /// Contribution analysis model for factor-level effects. /// public class ContributionAnalysis { /// /// Factor name. /// public string Factor { get; set; } /// /// Aggregate contribution value. /// public double ContributionValue { get; set; } /// /// Contribution percentage. /// public double ContributionPercent { get; set; } /// /// Statistical confidence in range [0,1]. /// public double Confidence { get; set; } } /// /// Drawdown period definition. /// public class DrawdownPeriod { /// /// Drawdown start time. /// public DateTime StartTime { get; set; } /// /// Drawdown trough time. /// public DateTime TroughTime { get; set; } /// /// Recovery time if recovered. /// public DateTime? RecoveryTime { get; set; } /// /// Peak equity value. /// public double PeakEquity { get; set; } /// /// Trough equity value. /// public double TroughEquity { get; set; } /// /// Drawdown amount. /// public double DrawdownAmount { get; set; } /// /// Drawdown percentage. /// public double DrawdownPercent { get; set; } /// /// Duration until trough. /// public TimeSpan DurationToTrough { get; set; } /// /// Duration to recovery. /// public TimeSpan? DurationToRecovery { get; set; } } /// /// Drawdown attribution details. /// public class DrawdownAttribution { /// /// Primary cause descriptor. /// public string PrimaryCause { get; set; } /// /// Trade count involved. /// public int TradeCount { get; set; } /// /// Worst symbol contributor. /// public string WorstSymbol { get; set; } /// /// Worst strategy contributor. /// public string WorstStrategy { get; set; } /// /// Grade-level contributors. /// public Dictionary GradeContributions { get; set; } /// /// Creates drawdown attribution model. /// public DrawdownAttribution() { GradeContributions = new Dictionary(); } } /// /// Aggregate drawdown report. /// public class DrawdownReport { /// /// Maximum drawdown amount. /// public double MaxDrawdownAmount { get; set; } /// /// Maximum drawdown percentage. /// public double MaxDrawdownPercent { get; set; } /// /// Current drawdown amount. /// public double CurrentDrawdownAmount { get; set; } /// /// Average drawdown percentage. /// public double AverageDrawdownPercent { get; set; } /// /// Number of drawdowns. /// public int NumberOfDrawdowns { get; set; } /// /// Longest drawdown duration. /// public TimeSpan LongestDuration { get; set; } /// /// Average recovery time. /// public TimeSpan AverageRecoveryTime { get; set; } /// /// Drawdown periods. /// public List DrawdownPeriods { get; set; } /// /// Creates a drawdown report. /// public DrawdownReport() { DrawdownPeriods = new List(); } } }