using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace YLErp.Model { /// /// 风控限额配置 /// [Table("Risk_Limit")] public class RiskLimit { [Key] public int id { get; set; } /// /// 限额配置名称 /// 范围+"_"+类型;如:RB1910_deltacash /// public string LimitName { get; set; } /// /// 限额指标类型 /// 0:绝对值 /// 1:相对值 /// public byte LimitValueType { get; set; } /// /// 限额指标 /// 当limitValueType=1时,改值为百分比 /// public decimal LimitValue { get; set; } /// /// 基准 /// 当limitValueType=1时,改值为limitValue的基准 /// public string LimitBenchmark { get; set; } /// /// 操作时间 /// public DateTime OptTime { get; set; } /// /// 操作人 /// public string OptName { get; set; } } public class RiskDailyReportLimit { public static List Names = new List() { "风控日报_年盈亏限额", "风控日报_日盈亏限额", "场外期权_Delta限额", "场外期权_Gamma限额", "场外期权_DeltaCash", "场外期权_GammaCash" }; /// /// 风控日报_年盈亏限额 /// public RiskLimit YearPnlLimit { get; set; } /// /// 风控日报_日盈亏限额 /// public RiskLimit DailyPnlLimit { get; set; } /// /// 场外期权_Delta限额 /// public RiskLimit DeltaPnlLimit { get; set; } /// /// 场外期权_DeltaCash /// public RiskLimit DeltaCashPercent { get; set; } /// /// 场外期权_Gamma限额 /// public RiskLimit GammaPnlLimit { get; set; } /// /// 场外期权_GammaCash /// public RiskLimit GammaCashPercent { get; set; } public RiskDailyReportLimit() { this.YearPnlLimit = new RiskLimit(); this.YearPnlLimit.LimitName = "风控日报_年盈亏限额"; this.YearPnlLimit.LimitValueType = 0; this.YearPnlLimit.LimitValue = 0; this.YearPnlLimit.LimitBenchmark = ""; this.DailyPnlLimit = new RiskLimit(); this.DailyPnlLimit.LimitName = "风控日报_日盈亏限额"; this.DailyPnlLimit.LimitValueType = 0; this.DailyPnlLimit.LimitValue = 0; this.DailyPnlLimit.LimitBenchmark = ""; this.DeltaPnlLimit = new RiskLimit(); this.DeltaPnlLimit.LimitName = "场外期权_Delta限额"; this.DeltaPnlLimit.LimitValueType = 0; this.DeltaPnlLimit.LimitValue = 0; this.DeltaPnlLimit.LimitBenchmark = ""; this.GammaPnlLimit = new RiskLimit(); this.GammaPnlLimit.LimitName = "场外期权_Gamma限额"; this.GammaPnlLimit.LimitValueType = 0; this.GammaPnlLimit.LimitValue = 0; this.GammaPnlLimit.LimitBenchmark = ""; this.DeltaCashPercent = new RiskLimit(); this.DeltaCashPercent.LimitName = "场外期权_DeltaCash"; this.DeltaCashPercent.LimitValueType = 1; this.DeltaCashPercent.LimitValue = 0; this.DeltaCashPercent.LimitBenchmark = "DeltaCash"; this.GammaCashPercent = new RiskLimit(); this.GammaCashPercent.LimitName = "场外期权_GammaCash"; this.GammaCashPercent.LimitValueType = 1; this.GammaCashPercent.LimitValue = 0; this.GammaCashPercent.LimitBenchmark = "GammaCash"; } public RiskDailyReportLimit(List riskLimits) : this() { for (int i = 0; i < riskLimits.Count; i++) { switch (riskLimits[i].LimitName) { case "风控日报_年盈亏限额": this.YearPnlLimit = riskLimits[i]; break; case "风控日报_日盈亏限额": this.DailyPnlLimit = riskLimits[i]; break; case "场外期权_Delta限额": this.DeltaPnlLimit = riskLimits[i]; break; case "场外期权_Gamma限额": this.GammaPnlLimit = riskLimits[i]; break; case "场外期权_DeltaCash": this.DeltaCashPercent = riskLimits[i]; break; case "场外期权_GammaCash": this.GammaCashPercent = riskLimits[i]; break; } } } } #region 风险日报表结构 public class RiskLimitOptionModel { /// /// 场外期权 /// public RiskLimitValueModel Option { get; set; } = new RiskLimitValueModel(); /// /// 场内期权 /// public RiskLimitValueModel Exchange { get; set; } = new RiskLimitValueModel(); /// /// 汇总 /// public RiskLimitValueModel Summary { get => new RiskLimitValueModel() { AuxiliaryValue = Option.AuxiliaryValue + Exchange.AuxiliaryValue, BaseValue = Option.BaseValue + Exchange.BaseValue }; } /// /// 差异值 /// public double DiffValue { get { return Math.Abs(Summary.BaseValue - Summary.AuxiliaryValue); } } } public class RiskLimitValueModel { /// /// 光子波动率计算 /// public double BaseValue { get; set; } /// /// 光证波动率计算 /// public double AuxiliaryValue { get; set; } } /// /// 场外期权盈亏概况 /// public class RiskLimitOptionPnlSummary { /// /// 场内期权已完结盈亏 /// public double ExchangeEndPnl { get; set; } /// /// 场外期权已完结盈亏 /// public double OptionEndPnl { get; set; } /// /// 已完结盈亏 /// public double EndPnl { get => ExchangeEndPnl + OptionEndPnl; } /// /// 持仓盈亏 /// public RiskLimitOptionModel Position { get; set; } = new RiskLimitOptionModel(); /// /// 总盈亏 /// public RiskLimitOptionModel Total { get; set; } = new RiskLimitOptionModel(); } /// /// 合计概况 /// public class RiskLimitSummary { /// /// 已完结盈亏 /// public double EndPnl { get; set; } /// /// 持仓盈利 /// public RiskLimitValueModel Option { get; set; } = new RiskLimitValueModel(); /// /// 总盈亏 /// public RiskLimitValueModel Total { get; set; } = new RiskLimitValueModel(); } /// /// 期货盈亏概况 /// public class RiskLimitFuturePnlSummary { /// /// 已完结盈亏 /// public double EndPnl { get; set; } /// /// 持仓盈亏 /// public double Pnl { get; set; } /// /// 总盈亏 /// public double TotalPnl { get; set; } } /// /// 盈亏概况 /// public class RiskLimitPnlSummary { /// /// 限额 /// public double LimitValue { get; set; } /// /// 期权盈亏概况 /// public RiskLimitOptionPnlSummary Option { get; set; } = new RiskLimitOptionPnlSummary(); /// /// 期货盈亏概况 /// public RiskLimitFuturePnlSummary Future { get; set; } = new RiskLimitFuturePnlSummary(); /// /// 合计 /// public RiskLimitSummary Summary { get; set; } = new RiskLimitSummary(); public void SetSummary() { this.Summary.EndPnl = this.Option.EndPnl + this.Future.EndPnl; this.Summary.Option.BaseValue = this.Option.Position.Summary.BaseValue + this.Future.Pnl; this.Summary.Option.AuxiliaryValue = this.Option.Position.Summary.AuxiliaryValue + this.Future.Pnl; this.Summary.Total.BaseValue = this.Option.Total.Summary.BaseValue + this.Future.TotalPnl; this.Summary.Total.AuxiliaryValue = this.Option.Total.Summary.AuxiliaryValue + this.Future.TotalPnl; } } /// /// 希腊值概况 /// public class RiskLimitGreeksValueSummary : RiskLimitValueModel { /// /// 限额 /// public double LimitValue { get; set; } public RiskLimitOptionModel Option { get; set; } = new RiskLimitOptionModel(); public double FutureValue { get; set; } public RiskLimitValueModel Summary { get => new RiskLimitValueModel { BaseValue = Option.Summary.BaseValue + FutureValue, AuxiliaryValue = Option.Summary.AuxiliaryValue + FutureValue }; } } /// /// 风险日报表 /// public class RiskLimitDailySummary { /// /// 期货预付金占用 /// public double HoldingDeposit { get; set; } /// /// 期货客户权益 /// public double Amount { get; set; } /// /// 期货风险度 /// public double Risk { get; set; } /// /// 期权名义本金 /// public double StockEqvNotional { get => OptionStockEqvNotional + ExchangeStockEqvNotional; } /// /// 场外期权名义本金 /// public double OptionStockEqvNotional { get; set; } /// /// 场内期权名义本金 /// public double ExchangeStockEqvNotional { get; set; } /// /// 持仓市值 /// public RiskLimitOptionModel PositionValue { get; set; } = new RiskLimitOptionModel(); /// /// 年盈亏概况 /// public RiskLimitPnlSummary YearPnl { get; set; } = new RiskLimitPnlSummary(); /// /// 日盈亏 /// public RiskLimitPnlSummary DailyPnl { get; set; } = new RiskLimitPnlSummary(); /// /// DeltaCash /// public RiskLimitGreeksValueSummary DeltaCashLimit { get; set; } = new RiskLimitGreeksValueSummary(); /// /// GammaCash /// public RiskLimitGreeksValueSummary GammaCashLimit { get; set; } = new RiskLimitGreeksValueSummary(); } #endregion }