using System.ComponentModel.DataAnnotations.Schema; namespace YLErp.DBModels { /// /// /// [Table("client_span")] public class ClientSpan : DBModelWithOperator { ///日终 public const int SpanType_Eod = 0; ///实时 public const int SpanType_RealTime = 1; /// /// 客户ID /// [DisplayName("客户ID")] public int ClientId { get; set; } /// /// 标的Id /// [NotMapped] public int? UnderlyingId { get; set; } [NotMapped] public IEnumerable PVJsonList { get; set; } public string PVJsons { get; set; } /// /// 标的预付金率 /// [NotMapped] public double? MaxMarginRate { get; set; } /// /// 品种Id /// [NotMapped] public int? VarietyId { get; set; } /// /// 份额 /// [NotMapped] public double? Notional { get; set; } /// /// 名义本金 /// [NotMapped] public double? StockEqvNotional { get; set; } /// /// /// [DisplayName("ValueDate")] public DateTime? ValueDate { get; set; } private double? _spv1; /// /// 涨停波动率不变 /// 海通:价格涨 + 波动率变大 /// [DisplayName("涨停波动率不变")] public double? Spv1 { set { _spv1 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _spv1; } private double? _spv2; /// /// 涨停波动率变 /// 海通:价格涨 + 波动率不变 /// [DisplayName("涨停波动率变")] public double? Spv2 { set { _spv2 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _spv2; } private double? _spv3; /// /// 跌停波动率变 /// 海通:价格涨 + 波动率变小 /// [DisplayName("跌停波动率变")] public double? Spv3 { set { _spv3 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _spv3; } private double? _spv4; /// /// 跌停波动率不变 /// 海通:价格不变 + 波动率变大 /// [DisplayName("跌停波动率不变")] public double? Spv4 { set { _spv4 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _spv4; } private double? _spv5; /// /// 海通:价格不变 + 波动率变小 /// public double? Spv5 { set { _spv5 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _spv5; } private double? _spv6; /// /// 海通:价格跌 + 波动率变大 /// public double? Spv6 { set { _spv6 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _spv6; } private double? _spv7; /// /// 海通:价格跌 + 波动率不变 /// public double? Spv7 { set { _spv7 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _spv7; } private double? _spv8; /// /// 海通:价格跌 + 波动率变小 /// public double? Spv8 { set { _spv8 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _spv8; } private double? spv9; private double? spv10; private double? spv11; private double? spv12; private double? spv13; private double? spv14; public double? Spv9 { get => spv9; set => spv9 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } public double? Spv10 { get => spv10; set => spv10 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } public double? Spv11 { get => spv11; set => spv11 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } public double? Spv12 { get => spv12; set => spv12 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } public double? Spv13 { get => spv13; set => spv13 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } public double? Spv14 { get => spv14; set => spv14 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } public double? Spv15 { get => spv15; set => spv15 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } public double? Spv16 { get => spv16; set => spv16 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } public double? Spv17 { get => spv17; set => spv17 = (value == null || double.IsNaN(value.Value)) ? 0 : value; } private double? _worstCastClientPayable; /// /// 最新概念:负数代表客户应缴预付金,正数代表客户应收预付金 /// [DisplayName("WorstCastClientPayable")] public double? WorstCastClientPayable { set { _worstCastClientPayable = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _worstCastClientPayable; } private double? _swapWorstCastClientPayable; /// /// 最新概念:负数代表客户应缴预付金,正数代表客户应收预付金 /// [DisplayName("SwapWorstCastClientPayable")] public double? SwapWorstCastClientPayable { set { _swapWorstCastClientPayable = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _swapWorstCastClientPayable; } private double? _swapInitMargin; /// /// 互换初始预付金 /// [DisplayName("SwapInitMargin")] public double? SwapInitMargin { set { _swapInitMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _swapInitMargin; } private double? _swapWinLoss; /// /// 互换盈亏 /// [DisplayName("SwapWinLoss")] public double? SwapWinLoss { set { _swapWinLoss = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _swapWinLoss; } private double? _swapUnMargin; /// /// 互换无需追保部分(容忍额度) /// [DisplayName("SwapUnMargin")] public double? SwapUnMargin { set { _swapUnMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _swapUnMargin; } [NotMapped] public double? MaxSpotPrice { get; set; } /// /// 品种级别 /// DeltaSell为客户角度卖出,且为客户角度看Delta /// [NotMapped] public double? DeltaSell { get; set; } /// /// 品种级别 /// 客户方向买入正的delta之和 /// [NotMapped] public double? DeltaBuy { get; set; } /// /// 品种级别 /// 客户方向买入负的delta之和 /// [NotMapped] public double? DeltaBuyMinus { get; set; } /// /// 品种级别Delta预付金 /// 最终客户级别Delta预付金 /// 负数代表客户应缴预付金(瑞达目前只有客户缴纳预付金这种方式) /// 国君也有deltamargin /// public double? DeltaMargin { get; set; } /// /// Delta Margin最终需要加上所有的Pv /// [NotMapped] public double? PvForDelta { get; set; } /// /// 浮盈浮亏 /// [NotMapped] public double? PositionWinLoss { get; set; } private double? _twoSideMargin; /// /// 双向预付金(暂时只有国君用到了该字段) /// public double? TwoSideMargin { set { _twoSideMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _twoSideMargin; } private double? _mySideMargin; /// /// 本方角度预付金 /// public double? MySideMargin { set { _mySideMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _mySideMargin; } private double? _otherSideMargin; /// /// 客户角度看的预付金 /// public double? OtherSideMargin { set { _otherSideMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _otherSideMargin; } private double? _additionalWorstCastClientPayable; /// /// 额外追保 /// [DisplayName("额外追保")] public double? AdditionalWorstCastClientPayable { set { _additionalWorstCastClientPayable = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _additionalWorstCastClientPayable; } private double? _variationMargin; private double? spv15; private double? spv16; private double? spv17; /// /// /// [DisplayName("VariationMargin")] public double? VariationMargin { set { _variationMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; } get => _variationMargin; } /// /// /// public int SpanType { get; set; } /// /// 风险敞口(假设公司当天行权,客户需要支付的payoff) /// public double? RiskExposure { get; set; } /// /// 中金:IM /// public double? IM { get; set; } /// /// 中金:PFE /// public double? PFE { get; set; } /// /// 中金:VM /// public double? VM { get; set; } /// /// 中金:手续费 /// public double? Commission { get; set; } /// /// 中金:抵扣额度 /// public double? Deduct { get; set; } /// /// 中金:已占用PFE授信 /// public double? PFEUsed { get; set; } /// /// 是否从人工修改过 /// public bool ModifiedFlag { get; set; } /// /// 初始预付金 * 额外系数 /// [NotMapped] public double? InitialMargin { get; set; } public void SetWorstCastClientPayableMin() { var worst = Spv1 ?? 0; if (Spv2.HasValue && worst > Spv2.Value) { worst = Spv2.Value; } if (Spv3.HasValue && worst > Spv3.Value) { worst = Spv3.Value; } if (Spv4.HasValue && worst > Spv4.Value) { worst = Spv4.Value; } if (Spv5.HasValue && worst > Spv5.Value) { worst = Spv5.Value; } if (Spv6.HasValue && worst > Spv6.Value) { worst = Spv6.Value; } if (Spv7.HasValue && worst > Spv7.Value) { worst = Spv7.Value; } if (Spv8.HasValue && worst > Spv8.Value) { worst = Spv8.Value; } if (Spv9.HasValue && worst > Spv9.Value) { worst = Spv9.Value; } if (Spv10.HasValue && worst > Spv10.Value) { worst = Spv10.Value; } if (Spv11.HasValue && worst > Spv11.Value) { worst = Spv11.Value; } if (Spv12.HasValue && worst > Spv12.Value) { worst = Spv12.Value; } if (Spv13.HasValue && worst > Spv13.Value) { worst = Spv13.Value; } if (Spv14.HasValue && worst > Spv14.Value) { worst = Spv14.Value; } if (Spv15.HasValue && worst > Spv15.Value) { worst = Spv15.Value; } if (Spv16.HasValue && worst > Spv16.Value) { worst = Spv16.Value; } if (Spv17.HasValue && worst > Spv17.Value) { worst = Spv17.Value; } WorstCastClientPayable = worst; } } }