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();
}
}
}