using Qdp.Foundation.Utilities; using System.ComponentModel.DataAnnotations.Schema; using YLErp.DBModels; namespace YLErp.Models { /// /// 客户结算对象 /// public class ClientSettleBalance { /// /// 客户编号 /// public int ClientId { get; set; } /// /// 互换交易类别(0:非DMA,1;DMA) /// public int ClientType { get; set; } [NotMapped] public string ClientTypeStr { get { if (ClientType == 1) { return "定义文件"; } return "普通"; } } /// /// 客户编号 /// public string ClientNumber { get; set; } public string ClientName { get; set; } /// /// 日期 /// public DateTime? ValueDate { get; set; } /// /// 当日应付冻结权利金 绝对值 /// public double FreezePremium { get; set; } /// /// 冻结出金 绝对值 /// public double FrozenOutFund { get; set; } /// /// 冻结抵押品赎回 /// public double FrozenRedeemFunds { get; set; } /// /// 当日期权费收支 /// public double OptionPremium { get; set; } /// /// 当日期权费收支 -- 互换 /// public double OptionPremiumSwap { get; set; } /// /// 当日结算收支 /// public double SettlementBalance { get; set; } /// /// 当日平仓收支 /// public double UnwindBalance { get; set; } /// /// 当日互换收益 /// public double SwapBalance { get; set; } /// /// 当日了结收支 SettlementBalance + SwapBalance /// public double ToEndBalance { get { return SettlementBalance + SwapBalance + Coupon; } } /// /// 权利金总和 -- 和开始时间无关 -- 国投 /// public double OptionPremiumAndSwapSum { get; set; } /// /// 了结权利金总和 -- 和开始时间无关-- 国投 /// public double EndPremiumSum { get; set; } public double EodPremium { get { return PositionPnl - PositionPv; } } /// /// 本日权利金收支(新增字段):当日该客户的权利金收支+平仓收支 /// public double OptionPremiumAndUnwindBalance { get { return OptionPremium + OptionPremiumSwap + UnwindBalance; } } public double OptionPremiumAndUnwindBalanceTotal { get; set; } /// /// 当日行权收支 /// public double ExerciseBalance { get; set; } /// /// 当日新增权利金 /// public double TodayNewMargin { get; set; } /// /// 当日应收冻结权利金 /// public double ReceivablesPremium { get; set; } /// /// 当日资金净出入 /// public double NetFund { get; set; } /// /// 其他收支 /// public double OtherFund { get; set; } /// /// 当日入金 /// public double InFund { get; set; } public double VmInFund { get; set; } /// /// 总入金 /// public double InFundSum { get; set; } /// /// 追保总入金 /// public double VmInFundSum { get; set; } /// ///追保账户金额 /// public double VmFundSum { get { return VmInFundSum-VmOutFundSum; } } /// /// 总出入金金额 /// public double NetFundAll { get { return NetFund+VmFundSum; } } /// /// 当日出金 /// 为绝对值,即不包含出金方向 /// public double OutFund { get; set; } public double VmOutFund { get; set; } /// /// 总出金 /// public double OutFundSum { get; set; } /// /// 追保总出金 /// public double VmOutFundSum { get; set; } /// /// 票息 /// public double Coupon { get; set; } /// /// 期末结存(不包含抵押品价值) /// public double AmountFund { get; set; } /// /// 账户资金(包含抵押品价值) /// public double AmountFundWithProduct { get { return AmountFund + GuaranteesTotalAmount; } } /// /// 市值权益 (账户资金+持仓盈亏) /// public double AmountFundWithPositionPnl { get { return AmountFund + (PS.Config.IsPVRounded ? RoundedPositionPv : PositionPv); } } /// /// 今日可用资金(可为负) /// 国投:可用资金=授信额度+期末结存-预付金占用 /// 伴兴:在系统可用资金的基础上 + 授信额度 /// public double AvailableAmount { get { return _AvailableAmount; } set { _AvailableAmount = value; } } private double _AvailableAmount; /// /// 交易总额 /// public double TotalTradeAmount { get; set; } /// /// 授信额度 /// public double TotalCredit { get; set; } /// /// 用户可用的名义本金规模 /// public double TotalCreditStockEqvNotional { get; set; } /// /// 授信占用 /// public double CreditUsed { get { // 国投,伴兴:当前可用资金加过授信额度 if (PS.Config.Is伴兴 || PS.Config.Is湘财 || PS.Config.Is国投) { //授信是否可用于互换(互换的权利金目前是可以被支付的,可能后面还需设计改进) if (CreditCanApplySwap) { return TotalCredit > 0 ? Math.Min(Math.Max(-(AvailableAmount - TotalCredit) / TotalCredit, 0.0), 1) : 0.0; } else { //优先支付收益互换资金剩余,取小于0的部分则为互换预付金超出可用资金部分,可用资金减除 则为期权占用授信部分,Math.Min((AvailableAmount - PayableMargin) + SwapPayableMargin, 0) //如果为正 则资金有限抵扣预付金,预付金未完全抵扣部分计算占用授信百分比 return TotalCredit > 0 ? Math.Min(Math.Max(-((AvailableAmount - TotalCredit) - Math.Min(SwapPayableMargin, 0)) / TotalCredit, 0.0), 1) : 0.0; } } //授信是否可用于支付权利金 else if (IsTradeCredit) { //授信是否可用于互换(互换的权利金目前是可以被支付的,可能后面还需设计改进) if (CreditCanApplySwap) { return TotalCredit > 0 ? Math.Min(Math.Max(-AvailableAmount / TotalCredit, 0.0), 1) : 0.0; } else { //优先支付收益互换资金剩余,取小于0的部分则为互换预付金超出可用资金部分,可用资金减除 则为期权占用授信部分,Math.Min((AvailableAmount - PayableMargin) + SwapPayableMargin, 0) //如果为正 则资金有限抵扣预付金,预付金未完全抵扣部分计算占用授信百分比 return TotalCredit > 0 ? Math.Min(Math.Max(-(AvailableAmount - Math.Min(SwapPayableMargin, 0)) / TotalCredit, 0.0), 1) : 0.0; } } else { //授信是否可用于互换 if (CreditCanApplySwap) { //MarginBalance为预付金余额(资金余额) 授信不可用于支付权利金时 剩余资金(减去预付金之前) //如果为正 则资金有限抵扣预付金,预付金未完全抵扣部分计算占用授信百分比 return TotalCredit > 0 ? Math.Min(Math.Max((MarginOccupation - Math.Max(MarginBalance, 0)) / TotalCredit, 0.0), 1) : 0.0; } else { //如果为正 则资金有限抵扣预付金,预付金未完全抵扣部分计算占用授信百分比 return TotalCredit > 0 ? Math.Min(Math.Max(((MarginOccupation + SwapPayableMargin) - Math.Max(MarginBalance + SwapPayableMargin, 0)) / TotalCredit, 0.0), 1) : 0.0; } } } } /// /// 授信使用金额 /// public double CreditUsedValue => CreditUsed * TotalCredit; /// /// 交易笔数 /// public int TradeCount { get; set; } /// /// 名义本金(买入) /// public double SellNotionalPrincipal { get; set; } /// /// 名义本金(买入) /// public double BuyNotionalPrincipal { get; set; } /// /// 持仓名义本金 /// public double PositionNotionalPrincipal { get; set; } /// /// 持仓笔数 /// public int PositionCount { get; set; } private double _payableMargin; /// /// 应付预付金(要么为负要么为零) /// 最新概念:负数代表客户应缴预付金,正数代表客户应收预付金 /// public double PayableMargin { get { if (_payableMarginReCaculateFlag) //如果被重新计算过,取计算后的值 { return _payableMargin; } var result = 0.0; if (IsGap) { if (ClientBalanceGap.IsImportOuterMargin) { result = -ClientBalanceGap.PayableMargin ?? 0; } else { result = (_payableMargin - (ClientBalanceGap.PayableMargin ?? 0)); } } else { result = _payableMargin; } return result; } set { _payableMargin = value; } } /// /// delta预付金 /// public double DeltaMargin { get; set; } /// /// 互换预付金 /// 负数代表客户应缴预付金,正数代表客户应收预付金 /// public double SwapPayableMargin { get; set; } /// /// 互换预付金容忍额 /// public double SwapUnMargin { get; set; } /// /// 应付预付金(结算报告客户角度,正数代表他要付钱,负数代表应收) /// public double MinusPayableMargin { get { //if (PS.Config.Is宏源) //{ // return -PayableMarginShow; //} return -PayableMargin; } } public double MinusPayableMarginTotal { get; set; } /// /// 双向预付金 /// public double TwoSideMargin { get; set; } /// /// 初始保证金金额 /// public double MySideMargin { get; set; } /// /// 客户角度预付金 /// public double OtherSideMargin { get; set; } /// /// 是否是手动修改过的预付金占用 /// public bool? IsPayableMarginManual { get; set; } /// /// 是否锁定修改过的预付金占用 /// public bool? IsPayableMarginLock { get; set; } /// /// 潜在行权盈余 /// public double PotentialSurpluses { get; set; } /// /// 预付金余额 /// public double MarginBalance { get; set; } /// /// 追保金额(所有欠缺金额) /// 负数代表客户应缴,正数代表客户应收 /// public double Margin { get; set; } /// /// 追保金额绝对值(所有欠缺金额) /// public double AbsMargin { get { return Math.Abs(Margin); } } /// /// 追保金额(非申万维持预付金欠缺的金额)不可为负数,只会向客户追保 /// 申万账户资金为负数时,也要算进追保金额里面 /// public double MarginByPayableMargin { get { if (PS.Config.Is广期资本) { return OtherAbsMarginByPayableMargin; } var funDiff = !IsGap || (ClientBalanceGap.MarginByPayableMargin ?? 0) == 0 ? 0 : (ClientBalanceGap.ClosedTradePayableFund ?? 0) + (ClientBalanceGap.PositionTradePayableFund ?? 0) + (ClientBalanceGap.ToDayRemainFund ?? 0); var payableMarginDiff = !IsGap || (ClientBalanceGap.MarginByPayableMargin ?? 0) == 0 ? 0 : (-ClientBalanceGap.PayableMargin ?? 0); var diffSW = !IsGap || (ClientBalanceGap.MarginByPayableMargin ?? 0) == 0 ? 0 : (-ClientBalanceGap.PayableMargin ?? 0) + (ClientBalanceGap.ToDayRemainFund ?? 0) + (ClientBalanceGap.Credit ?? 0); if (PS.Config.Is申万) { //追缴预付金=max(当日应缴纳预付金-预付金总额) //预付金总额=乙方权益-max(期权市值,0)-期权空头浮动盈亏 //详情见JIRA OTC-8297 return Math.Max(-PayableMargin - (AmountFund + GuaranteesTotalAmount + TotalCredit + PositionPv - Math.Max(PositionPv, 0) - ClientSellPositionPnl) + diffSW, 0) + ((!IsGap || ClientBalanceGap.IsImportOuterMargin) ? 0 : ClientBalanceGap.MarginByPayableMargin ?? 0); } else if (PS.Config.Is海通) { //新增字段“同业追保”,用于手动记录“双向追保”客户向我司通知的追保金额;该字段默认值为0,仅呈现于公司软件界面,不显示在对客发送的盯市结算报告中; 系统: 预付金占用 手动减 // 调整字段“追保金额”逻辑,追保金额 = MAX(预付金占用 - MAX(期末结存 + 应付了结交易款 + 应付存续交易款, 0) - (授信额度 + 质押市值) - 同业追保, 0) // 预付金占用 手动减同业追保的值 return Math.Max(-PayableMargin - Math.Max(AmountFund + ClosedTradePayableFund + PositionTradePayableFund, 0) - (TotalCredit + GuaranteesTotalAmount), 0); } else if (PS.Config.Is润和) { //东证:追保金额,当可用资金为负数时,追保金额取可用资金的相反数,可用资金≥0时,追保金额=0 return Math.Max(-(AvailableAmount + TotalCredit), 0); } else if (PS.Config.Is东吴) { return Math.Max(-AvailableAmount - TotalCredit, 0); } else { var margin = 0d; //授信可用于互换时 if (CreditCanApplySwap) { margin = Math.Max(-(PayableMargin - SwapUnMargin) - Math.Max(AmountFund + ClosedTradePayableFund + PositionTradePayableFund - funDiff, 0) - GuaranteesTotalAmount - TotalCredit + payableMarginDiff, 0) + ((!IsGap || ClientBalanceGap.IsImportOuterMargin) ? 0 : ClientBalanceGap.MarginByPayableMargin ?? 0); } else {//授信不可用于互换 margin = Math.Max((Math.Max(-(PayableMargin - SwapPayableMargin) - TotalCredit, 0) - (SwapPayableMargin - SwapUnMargin)) - Math.Max(AmountFund + ClosedTradePayableFund + PositionTradePayableFund - funDiff, 0) - GuaranteesTotalAmount + payableMarginDiff, 0) + ((!IsGap || ClientBalanceGap.IsImportOuterMargin) ? 0 : ClientBalanceGap.MarginByPayableMargin ?? 0); } return margin; } } } public double MarginByPayableMarginTotal { get; set; } /// /// 申万特有 /// 预付金总额=乙方权益-max(期权市值,0)-期权空头浮动盈亏 /// public double TotalMargin { get { return AmountFund + GuaranteesTotalAmount + TotalCredit - Math.Abs(SellPv) - ClientSellPositionPnl; } } public double TotalMarginTotal { get; set; } /// /// 卖出期权权利金 /// public double SellerPositionPremium { get; set; } /// /// 买入期权预付金 /// public double BuyerPositionMargin { get; set; } /// /// 可取保金额 /// public double AdvisableMargin { get; set; } /// /// 更新时间 /// public DateTime? UpdateDate { get; set; } /// /// 授信是否可用于期权费 /// 国投伴兴可用资金已经加过授信了 /// public bool IsTradeCredit { get; set; } /// /// 抵押品总价值 /// public double GuaranteesTotalAmount { get; set; } /// /// 持仓市值 /// public double PositionPv { get; set; } /// /// 四舍五入处理后的持仓市值 /// public double RoundedPositionPv { get; set; } /// /// 空头持仓市值 /// public double SellPv { get; set; } /// /// 预付金部分 /// public double PrepaymentAmount { get; set; } /// /// 当日盈亏 /// public double DaliyPnl { get; set; } public double RoundedDaliyPnl { get; set; } /// /// 持仓盈亏 /// public double PositionPnl { get; set; } /// /// 四舍五入处理后的持仓盈亏 /// public double RoundedPositionPnl { get; set; } /// /// 期权空头浮动盈利=∑max(期权空头持仓*(期权合约成本价-期权合约现价), 0) 从客户角度看的 /// public double ClientSellPositionPnl { get; set; } /// /// 总资产(账户资金(包含抵押品价值)+持仓市值) /// public double TotalAmount { get { return AmountFundWithProduct + PositionPv - PrepaymentAmount; } } public double TotalAmountTotal { get; set; } /// /// 客户权益(现金+四舍五入处理后的持仓市值) /// public double RoundedTotalAmount { get { return AmountFundWithProduct + RoundedPositionPv - PrepaymentAmount; } } public double RoundedTotalAmountTotal { get; set; } /// /// 抵押品变化 /// public double CashInCashOutProductChange { get; set; } /// /// 抵押品前一日价值 /// public double LastGuaranteesTotalAmount { get; set; } /// /// 上日资金(不包含抵押金额) /// public double LastDayRemainFund { get; set; } /// /// 上日资金(包含抵押金额) /// public double LastDayRemainFundWithProduct { get; set; } /// /// 可用于支付权利金的资金总额 /// public double AvailablePayAmount { get { // 伴兴:当前可用资金加过授信额度 if (IsTradeCredit && !PS.Config.Is伴兴 && !PS.Config.Is湘财 && !PS.Config.Is国投) { return AvailableAmount + TotalCredit; } else { return AvailableAmount; } } } /// /// 交易总数 /// public int TotalTradeCount { get; set; } /// /// 名义本金总额 /// public double TotalNotionalPrincipal { get; set; } /// /// 买权交易数 /// public int BuyCount { get; set; } /// /// 卖权交易数 /// public int SellCount { get; set; } /// /// 当日交易名义本金 /// public double TodayNotionalPrincipal { get; set; } /// /// 冻结预付金(该处是绝对值) /// public double FrozenMarginMoney { get; set; } /// /// 资信等级 /// public string CreditRating { get; set; } //是否需要追加预付金 public bool IsMargin(double Temp = 0.0) { return PayableFund > Temp; } /// /// 预付金占用(应付预付金 + 冻结预付金) /// /// public double MarginOccupation { get { return -PayableMargin + FrozenMarginMoney; } } /// /// 所有冻结资金(带方向) 正则为应收,负为应付 /// /// public double AllFreezeBalance() { return ReceivablesPremium - (FreezePremium + FrozenOutFund + FrozenRedeemFunds + FrozenMarginMoney); } public double FrozenBalance { get; set; } /// /// 可取抵押品价值 /// /// public double AvailableGuaranteesValue() { return Math.Min(Math.Max(MarginBalance, 0), GuaranteesTotalAmount); } /// /// 可用期权费 /// /// public double AvailablePremium() { // 伴兴:当前可用资金加过授信额度 if (IsTradeCredit && !PS.Config.Is伴兴 && !PS.Config.Is湘财 && !PS.Config.Is国投) { IsTradeCredit = true; //期权费授信可以支付权利金 则预付金余额为0时 资金从 return Math.Max(AvailableAmount + TotalCredit, 0); } else { //期权费授信不可以支付权力金时 则可用期权费为 当日可用资金 return Math.Max(AvailableAmount, 0); } } /// /// 持仓期权费净额(客户角度卖出为负,买入为正) /// public double PositionPremiumNetCash { get; set; } /// /// 期初持仓交易净额 /// public double LastDayPositionPremiumNetCash { get; set; } /// /// 权利金冻结:当日该客户所有持仓的卖出期权权利金 /// public double SellTradePrice { get; set; } /// /// 实现盈亏 /// public double WinLoss { get; set; } /// /// 当日实现盈亏 /// public double TdWinLoss { get; set; } /// /// 实现盈亏 -- 结束日之前的所有实现盈亏 (WinLoss 开始日有值是区间) 国投不含 最后一天 /// public double WinLossSum { get; set; } /// /// 已了结交易缺口 /// public double ClosedTradeFundGap { get { return LastDayRemainFund + NetFund + OtherFund + LastDayPositionPremiumNetCash + WinLoss; } } /// /// 应付了结交易款 /// public double ClosedTradePayableFund { get { if (IsGap) { return (-1 * Math.Min(AmountFund + PositionPremiumNetCash, 0)) + (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.ClosedTradePayableFund ?? 0); } else { return -1 * Math.Min(AmountFund + PositionPremiumNetCash, 0); } } } public double ClosedTradePayableFundTotal { get; set; } public ClientBalanceGap ClientBalanceGap { get; set; } public bool IsGap { get; set; } /// /// 应付存续交易款 /// public double PositionTradePayableFund { get { if (IsGap) { return Math.Max(PositionPremiumNetCash - Math.Max(AmountFund + PositionPremiumNetCash, 0), 0) + (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.PositionTradePayableFund ?? 0); } else { return Math.Max(PositionPremiumNetCash - Math.Max(AmountFund + PositionPremiumNetCash, 0), 0); } } } public double PositionTradePayableFundTotal { get; set; } /// /// 可取资金 (可用资金 - 持仓期权费净额) /// public double DesirableFund { get; set; } /// /// 已了结部分可取资金 (期末结存_权利金后付) /// public double EndDesirableFund { get { if (PS.Config.Is东吴) { return NetFund + SettlementBalance + EndPremiumSum; } return 0; } } public double DesirableFundTotal { get; set; } /// /// 应付资金总额 /// public double PayableFund { get { if (PS.Config.Is广期资本) { return OtherAbsMarginByPayableMargin; } if (MarginOptionType == 1 && PS.Config.ErpElement.TwoSideMargin) { if (IsGap) { return ClosedTradePayableFund - (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.ClosedTradePayableFund ?? 0) + PositionTradePayableFund - (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.PositionTradePayableFund ?? 0) + MarginByPayableMargin - (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.MarginByPayableMargin ?? 0) + (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.PayableFund ?? 0); } else { return ClosedTradePayableFund + PositionTradePayableFund + MarginByPayableMargin; } } else { if (IsGap) { return Math.Max(ClosedTradePayableFund - (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.ClosedTradePayableFund ?? 0) + PositionTradePayableFund - (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.PositionTradePayableFund ?? 0) + MarginByPayableMargin - (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.MarginByPayableMargin ?? 0), 0) + (ClientBalanceGap.IsImportOuterMargin ? 0 : ClientBalanceGap.PayableFund ?? 0); } else { return Math.Max(ClosedTradePayableFund + PositionTradePayableFund + MarginByPayableMargin, 0); } } } } public double PayableFundTotal { get; set; } /// /// 总盈亏 /// public double TotalNetSettlement => WinLoss + (PS.Config.IsPVRounded ? RoundedPositionPnl : PositionPnl); public double TotalNetSettlementTotal { get; set; } public int? MarginOptionType { get; set; } /// /// 判断实时数据是否是最新的(客户有交易操作后服务是否有更新数据) /// public bool IsLatestDate { get; set; } /// /// 可用名义本金规模 /// public double AvailableStockEqvNotional { get; set; } /// /// 阈值 /// public double? FundThreshold { get; set; } /// /// 是否结算数据 /// public bool IsEodData { get; set; } public string FundJson { get; set; } /// /// 潜在风险暴露 /// public double? PFE { get; set; } /// /// 违约风险暴露 /// public double? EAD { get; set; } /// /// 互换是否可使用 /// public bool CreditCanApplySwap { get; set; } /// /// 获取可取系数方法 /// public double DesirableRate; /// /// 客户 同业/非同业(0:同业;1:非同业) /// public int SamePeer { get; set; } /// /// 其它公司 追保预付金 /// public double OtherMarginByPayableMargin { get { double result = 0; if (PS.Config.Is广期资本) { result = AvailableAmount; } return result; } } /// /// 其它公司 追保预付金绝对值 /// public double OtherAbsMarginByPayableMargin { get { return Math.Abs(Math.Min(OtherMarginByPayableMargin, 0)); } } /// /// 初始预付金系数 /// public double? Ratio1 { get; set; } ///// ///// 界面显示 预付金占用 ///// //public double PayableMarginShow //{ // get // { // var result = PayableMargin; // if (PS.Config.Is宏源) // { // if (MarginByPayableMargin > 0) // { // result = result * Ratio1 ?? 1.0; // } // } // return result; // } //} /// /// 标识字段 PayableMargin 是否被重新计算过,如果true,直接取计算后的值 /// private bool _payableMarginReCaculateFlag { get; set; } = false; /// /// 2.2在计算预付金占用时,如果直接计算出的预付金占用需要追保,则当日预付金占用=计算出中预付金占用*初始预付金系数 /// 2.3在追保条件下,乘了系数预付金预付金占用再去算追保金额、可用资金、可取资金、应付资金总额等(凡与预付金相关的都要重新算一遍) /// public void ReCaculatePayableMargin(int clientId, Dictionary marginFactorDict) { var coefficientFactor = marginFactorDict.TryGetValue(clientId, out var spanConfig) ? spanConfig.CoefficientFactor : 1.05; if (_payableMarginReCaculateFlag) { return; } var value = PayableMargin; if (PS.Config.Is宏源 || PS.Config.Company == Configuration.CompanyEnum.广发商贸) { var rate = Ratio1 ?? 1.0; if (PS.Config.Company == Configuration.CompanyEnum.广发商贸) {//todo后续改成取配置; rate = coefficientFactor; } if (MarginByPayableMargin > ConsGlobal.TooSmallValue) { value = value * rate; } if (PS.Config.Is宏源 && !string.IsNullOrWhiteSpace(MarginJson)) { var UserGroupPV = JsonHelper.Deserialize(MarginJson); PayableMarginA = UserGroupPV.ValueA; PayableMarginB = UserGroupPV.ValueB; if (MarginByPayableMargin > ConsGlobal.TooSmallValue) { PayableMarginA = PayableMarginA * rate; PayableMarginB = PayableMarginB * rate; } } } PayableMargin = value; _payableMarginReCaculateFlag = true; } public string MarginJson { get; set; } public double PayableMarginA { get; set; } public double PayableMarginB { get; set; } /// /// 系统收盘时间 /// [NotMapped] public DateTime? LastSettlemetTime { get; set; } /// /// 衡泰清算时间 /// [NotMapped] public string LastHTSettlemetTime { get; set; } public double MaintenanceLine { get; set; } /// /// 互换存续预付金 /// public double SwapMargin { get; set; } /// /// 维持保证金 /// public double MaintenanceMargin { get; set; } /// /// 互换合并盯市金额B=现金结存+∑(组合待实现收益) /// public double SwapMarketAmount { get { return AmountFund + RoundedPositionPnl; } } /// /// 履约保证金比例:合并盯市价格/持仓名义本金 /// public decimal SwapMarketAmountPercent { get { if (PositionNotionalPrincipal == 0) { return 0; } var percent = (decimal)Math.Round(SwapMarketAmount / PositionNotionalPrincipal, 6, MidpointRounding.AwayFromZero); return percent > 1 ? 1 : percent; } } /// /// 是否需要追保 /// public bool NeedAddMargin { get; set; } /// /// 交易费用 /// public double TradeFee { get; set; } /// /// 利息盈亏 /// public double InterestPnl { get; set; } } }