using System; using System.Collections.Generic; using NT8.Core.Common.Models; using NT8.Core.Intelligence; namespace NT8.Core.Analytics { /// /// Time period used for analytics aggregation. /// public enum AnalyticsPeriod { /// /// Daily period. /// Daily, /// /// Weekly period. /// Weekly, /// /// Monthly period. /// Monthly, /// /// Lifetime period. /// AllTime } /// /// Represents one complete trade lifecycle. /// public class TradeRecord { /// /// Trade identifier. /// public string TradeId { get; set; } /// /// Trading symbol. /// public string Symbol { get; set; } /// /// Strategy name. /// public string StrategyName { get; set; } /// /// Entry timestamp. /// public DateTime EntryTime { get; set; } /// /// Exit timestamp. /// public DateTime? ExitTime { get; set; } /// /// Trade side. /// public OrderSide Side { get; set; } /// /// Quantity. /// public int Quantity { get; set; } /// /// Average entry price. /// public double EntryPrice { get; set; } /// /// Average exit price. /// public double? ExitPrice { get; set; } /// /// Realized PnL. /// public double RealizedPnL { get; set; } /// /// Unrealized PnL. /// public double UnrealizedPnL { get; set; } /// /// Confluence grade at entry. /// public TradeGrade Grade { get; set; } /// /// Confluence weighted score at entry. /// public double ConfluenceScore { get; set; } /// /// Risk mode at entry. /// public RiskMode RiskMode { get; set; } /// /// Volatility regime at entry. /// public VolatilityRegime VolatilityRegime { get; set; } /// /// Trend regime at entry. /// public TrendRegime TrendRegime { get; set; } /// /// Stop distance in ticks. /// public int StopTicks { get; set; } /// /// Target distance in ticks. /// public int TargetTicks { get; set; } /// /// R multiple for the trade. /// public double RMultiple { get; set; } /// /// Trade duration. /// public TimeSpan Duration { get; set; } /// /// Metadata bag. /// public Dictionary Metadata { get; set; } /// /// Creates a new trade record. /// public TradeRecord() { Metadata = new Dictionary(); } } /// /// Per-trade metrics. /// public class TradeMetrics { /// /// Trade identifier. /// public string TradeId { get; set; } /// /// Gross PnL. /// public double PnL { get; set; } /// /// R multiple. /// public double RMultiple { get; set; } /// /// Maximum adverse excursion. /// public double MAE { get; set; } /// /// Maximum favorable excursion. /// public double MFE { get; set; } /// /// Slippage amount. /// public double Slippage { get; set; } /// /// Commission amount. /// public double Commission { get; set; } /// /// Net PnL. /// public double NetPnL { get; set; } /// /// Whether trade is a winner. /// public bool IsWinner { get; set; } /// /// Hold time. /// public TimeSpan HoldTime { get; set; } /// /// Return on investment. /// public double ROI { get; set; } /// /// Custom metrics bag. /// public Dictionary CustomMetrics { get; set; } /// /// Creates a trade metrics model. /// public TradeMetrics() { CustomMetrics = new Dictionary(); } } /// /// Point-in-time portfolio performance snapshot. /// public class PerformanceSnapshot { /// /// Snapshot time. /// public DateTime Timestamp { get; set; } /// /// Equity value. /// public double Equity { get; set; } /// /// Cumulative PnL. /// public double CumulativePnL { get; set; } /// /// Drawdown percentage. /// public double DrawdownPercent { get; set; } /// /// Open positions count. /// public int OpenPositions { get; set; } } /// /// PnL attribution breakdown container. /// public class AttributionBreakdown { /// /// Attribution dimension. /// public string Dimension { get; set; } /// /// Total PnL. /// public double TotalPnL { get; set; } /// /// Dimension values with contribution amount. /// public Dictionary Contributions { get; set; } /// /// Creates a breakdown model. /// public AttributionBreakdown() { Contributions = new Dictionary(); } } /// /// Aggregate performance metrics for a trade set. /// public class PerformanceMetrics { /// /// Total trade count. /// public int TotalTrades { get; set; } /// /// Win count. /// public int Wins { get; set; } /// /// Loss count. /// public int Losses { get; set; } /// /// Win rate [0,1]. /// public double WinRate { get; set; } /// /// Loss rate [0,1]. /// public double LossRate { get; set; } /// /// Gross profit. /// public double GrossProfit { get; set; } /// /// Gross loss absolute value. /// public double GrossLoss { get; set; } /// /// Net profit. /// public double NetProfit { get; set; } /// /// Average win. /// public double AverageWin { get; set; } /// /// Average loss absolute value. /// public double AverageLoss { get; set; } /// /// Profit factor. /// public double ProfitFactor { get; set; } /// /// Expectancy. /// public double Expectancy { get; set; } /// /// Sharpe ratio. /// public double SharpeRatio { get; set; } /// /// Sortino ratio. /// public double SortinoRatio { get; set; } /// /// Max drawdown percent. /// public double MaxDrawdownPercent { get; set; } /// /// Recovery factor. /// public double RecoveryFactor { get; set; } } /// /// Trade outcome classification. /// public enum TradeOutcome { /// /// Winning trade. /// Win, /// /// Losing trade. /// Loss, /// /// Flat trade. /// Breakeven } }