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
}
}