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