using System.ComponentModel.DataAnnotations.Schema; namespace YLErp.DBModels { [Table("trade_span")] public class trade_span : TradeExtendBase { public static string LogClass = "trade_span"; private double? spv1; private double? spv2; private double? spv3; private double? spv4; private double? spv5; private double? spv6; private double? spv7; private double? spv8; private double? spv9; private double? spv10; private double? spv11; private double? spv12; private double? spv13; private double? spv14; private double? spv; private double? worstCastClientPayable; private double? twoSideMargin; private double? delta; private double? underlyingPrice; private double? deltaMargin; private double? initialMargin; private double? riskExposure; private double? margin; private double? cashDeposit; private double? positionWin; private double? im; private double? vm; private double? commission; private double? pfe; private double? spv15; private double? spv16; private double? spv17; private double? swapInitMargin; private double? swapWinLoss; /// /// /// [DisplayName("ValueDate")] public DateTime ValueDate { get; set; } /// /// 涨停波动率不变 /// 海通:价格涨 + 波动率变大 /// 宏源: 价格不变 /// [DisplayName("Spv1")] public double? Spv1 { get => spv1; set => spv1 = NumberHelper.Normalize(value); } /// /// 涨停波动率变 /// 海通:价格涨 + 波动率不变 /// 宏源: 价格涨 /// [DisplayName("Spv2")] public double? Spv2 { get => spv2; set => spv2 = NumberHelper.Normalize(value); } /// /// 跌停波动率不变 /// 海通:价格涨 + 波动率变小 /// 宏源: 价格跌 /// [DisplayName("Spv3")] public double? Spv3 { get => spv3; set => spv3 = NumberHelper.Normalize(value); } /// /// 跌停波动率变 /// 海通:价格不变 + 波动率变大 /// [DisplayName("Spv4")] public double? Spv4 { get => spv4; set => spv4 = NumberHelper.Normalize(value); } /// /// 海通:价格不变 + 波动率变小 /// public double? Spv5 { get => spv5; set => spv5 = NumberHelper.Normalize(value); } /// /// 海通:价格跌 + 波动率变大 /// public double? Spv6 { get => spv6; set => spv6 = NumberHelper.Normalize(value); } /// /// 海通:价格跌 + 波动率不变 /// public double? Spv7 { get => spv7; set => spv7 = NumberHelper.Normalize(value); } /// /// 海通:价格跌 + 波动率变小 /// public double? Spv8 { get => spv8; set => spv8 = NumberHelper.Normalize(value); } public double? Spv9 { get => spv9; set => spv9 = NumberHelper.Normalize(value); } public double? Spv10 { get => spv10; set => spv10 = NumberHelper.Normalize(value); } public double? Spv11 { get => spv11; set => spv11 = NumberHelper.Normalize(value); } public double? Spv12 { get => spv12; set => spv12 = NumberHelper.Normalize(value); } public double? Spv13 { get => spv13; set => spv13 = NumberHelper.Normalize(value); } public double? Spv14 { get => spv14; set => spv14 = NumberHelper.Normalize(value); } public double? Spv15 { get => spv15; set => spv15 = NumberHelper.Normalize(value); } public double? Spv16 { get => spv16; set => spv16 = NumberHelper.Normalize(value); } public double? Spv17 { get => spv17; set => spv17 = NumberHelper.Normalize(value); } /// /// 当前持仓市值 /// 瑞达span算法Spv1234..这些需要减去当前持仓市值,得到的Pnl1234..来做span算法处理 /// public double? Spv { get => spv; set => spv = NumberHelper.Normalize(value); } /// /// 客户买入时为负数 /// 客户卖出时为正数 /// public double? WorstCastClientPayable { get => worstCastClientPayable; set => worstCastClientPayable = NumberHelper.Normalize(value); } /// /// 客户预付金最大亏损 /// public double? MaxlossMargin { get; set; } /// /// 双向预付金 /// public double? TwoSideMargin { get => twoSideMargin; set => twoSideMargin = NumberHelper.Normalize(value); } /// /// 交易员角度看的Delta /// public double? Delta { get => delta; set => delta = NumberHelper.Normalize(value); } public double? UnderlyingPrice { get => underlyingPrice; set => underlyingPrice = NumberHelper.Normalize(value); } /// /// 客户买入时为负数 /// 客户卖出时针对瑞达可正可负 /// public double? DeltaMargin { get => deltaMargin; set => deltaMargin = NumberHelper.Normalize(value); } /// /// 初始预付金 * 额外系数 /// public double? InitialMargin { get => initialMargin; set => initialMargin = NumberHelper.Normalize(value); } /// /// /// public void SetWorstCastClientPayable() { 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; } public int? VarietyId { get; set; } public int? UnderlyingId { get; set; } public string UnderlyingCode { get; set; } public string Comment { get; set; } public int? ClientId { get; set; } /// /// 风险敞口(假设公司当天行权,客户需要支付的payoff) /// public double? RiskExposure { get => riskExposure; set => riskExposure = NumberHelper.Normalize(value); } /// /// 追保金额 /// public double? Margin { get => margin; set => margin = NumberHelper.Normalize(value); } /// /// 当前预付金 /// public double? CashDeposit { get => cashDeposit; set => cashDeposit = NumberHelper.Normalize(value); } /// /// 交易员角度浮盈额,客户角度浮亏额,该值为正数 /// public double? PositionWin { get => positionWin; set => positionWin = NumberHelper.Normalize(value); } public double? PositionWinLoss { get; set; } /// /// 是否单独算预付金 /// 目前只有交易员方向卖出的雪球凤凰期权用到了该字段 /// 保本雪球和指数类的凤凰雪球,不参与组合预付金算法 /// public bool? IsSingleMargin { get; set; } /// /// 该交易预付金是否是通过span算出来的 /// 目前国君通过该字段做预付金算法区别对待 /// public bool? IsSpanMargin { get; set; } /// /// 中金: IM /// public double? IM { get => im; set => im = NumberHelper.Normalize(value); } /// /// 中金: VM /// 交易员方向 /// public double? VM { get => vm; set => vm = NumberHelper.Normalize(value); } /// /// 中金: 未收取的开仓费 /// public double? Commission { get => commission; set => commission = NumberHelper.Normalize(value); } /// /// 中金: PFE /// public double? PFE { get => pfe; set => pfe = NumberHelper.Normalize(value); } /// /// 互换初始预付金 /// public double? SwapInitMargin { get => swapInitMargin; set => swapInitMargin = NumberHelper.Normalize(value); } /// /// 互换收益 /// public double? SwapWinLoss { get => swapWinLoss; set => swapWinLoss = NumberHelper.Normalize(value); } [NotMapped] public double Notional { get; set; } [NotMapped] public double StockEqvNotional { get; set; } public string PVJsons { get; set; } [NotMapped] public List PVJsonList { get; set; } = new List(); // 扩展字段,添加多个节点的内容 public string Extensions { get; set; } public T GetFromExtensions(string nodeName) where T : class { var ext = JsonHelper.Deserialize>(Extensions); if (ext != null && ext.ContainsKey(nodeName)) { return JsonHelper.Deserialize(ext[nodeName]?.ToString()); } else { return null; } } public void SetExtensions(string nodeName, T obj) { var ext = JsonHelper.Deserialize>(Extensions) ?? new Dictionary(); if (string.IsNullOrEmpty(nodeName)) { nodeName = $"extensions_{nameof(T)}"; } ext[nodeName] = JsonHelper.ToJson(obj); Extensions = JsonHelper.ToJson(ext); } public trade_span Clone() { return (trade_span)MemberwiseClone(); } /// /// 反向取值spv /// public trade_span ReverseSpv() { if (Spv1.HasValue) { Spv1 = -Spv1.Value; } if (Spv2.HasValue) { Spv2 = -Spv2.Value; } if (Spv3.HasValue) { Spv3 = -Spv3.Value; } if (Spv4.HasValue) { Spv4 = -Spv4.Value; } if (Spv5.HasValue) { Spv5 = -Spv5.Value; } if (Spv6.HasValue) { Spv6 = -Spv6.Value; } if (Spv7.HasValue) { Spv7 = -Spv7.Value; } if (Spv8.HasValue) { Spv8 = -Spv8.Value; } if (Spv9.HasValue) { Spv9 = -Spv9.Value; } if (Spv10.HasValue) { Spv10 = -Spv10.Value; } if (Spv11.HasValue) { Spv11 = -Spv11.Value; } if (Spv12.HasValue) { Spv12 = -Spv12.Value; } if (Spv13.HasValue) { Spv13 = -Spv13.Value; } if (Spv14.HasValue) { Spv14 = -Spv14.Value; } if (Spv15.HasValue) { Spv15 = -Spv15.Value; } if (Spv16.HasValue) { Spv16 = -Spv16.Value; } if (Spv17.HasValue) { Spv17 = -Spv17.Value; } return this; } /// /// 设置所有spv为相同值 /// public trade_span SetAllSpvAndWorst(double sameValue) { Spv1 = Spv2 = Spv3 = Spv4 = Spv5 = Spv6 = Spv7 = Spv8 = Spv9 = Spv10 = Spv11 = Spv12 = Spv13 = Spv14 = Spv15 = Spv16 = Spv17 = worstCastClientPayable = deltaMargin = sameValue; return this; } } }