diff --git a/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs b/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs index 38004aa4..44b5400b 100644 --- a/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs @@ -1023,6 +1023,7 @@ namespace YLErp.Modules.SwapModule //累计已实现 newEodPayPosition.RealizedInterest = eodPayPosition.RealizedInterest + newEodPayPosition.TdCloseInterest * ratio; newEodPayPosition.RealizedInterestFee = eodPayPosition.RealizedInterestFee + newEodPayPosition.TdCloseInterestFee; + newEodPayPosition.RealizedPnl = newEodPayPosition.RealizedInterest + newEodPayPosition.RealizedInterestFee; var currencyRate = GetCurrencyRate(td.QuoteCurrency, td.SettlementCurrency, valueDate, true, position.InterestDirection == (int)SwapDirectionEnum.收取 ? CurrencyRateType.Buy : CurrencyRateType.Sell); newEodPayPosition.TdCurrency = Convert.ToDecimal(currencyRate); @@ -2178,6 +2179,22 @@ namespace YLErp.Modules.SwapModule item.eodPosition.PosiNetFeePrice *= multiplier; item.eodPosition.PosiNetNoFeePrice *= multiplier; item.eodPosition.UnderlyingPrice *= multiplier; + if (item.eodPosition.InterestDirection > 0) + { + // 历史数据的 TdCloseInterest、RealizedInterest 存在两种符号口径, + // 风险报表统一按绝对金额和业务方向还原:普通利息腿收取为正、支付为负, + // 预付金腿的利息方向与保证金本金方向相反。 + var interestRatio = item.eodPosition.InterestDirection == (int)SwapDirectionEnum.收取 ? 1m : -1m; + if (ConsTrade.InterestMarginModels.Contains(item.eodPosition.InterestMode)) + { + interestRatio = -interestRatio; + } + item.eodPosition.TdCloseInterest = Math.Abs(item.eodPosition.TdCloseInterest) * interestRatio; + item.eodPosition.RealizedInterest = Math.Abs(item.eodPosition.RealizedInterest) * interestRatio; + // 兼容修复前已落库的利息腿:当时只累计了明细字段,未同步写入 RealizedPnl。 + item.eodPosition.RealizedPnl = item.eodPosition.RealizedInterest + + item.eodPosition.RealizedInterestFee; + } } return retListResult;