fix(swap): 修复期末头寸已实现盈亏计算问题

- 在新创建的期末付款头寸中添加已实现盈亏字段计算
- 对历史数据的利息和已实现利息进行符号标准化处理
- 添加预付金腿利息方向与保证金本金方向的反向逻辑
- 兼容修复前已落库的利息腿数据缺失已实现盈亏字段问题
- 统一风险报表按绝对金额和业务方向的数据口径
This commit is contained in:
张名锐
2026-07-20 15:28:40 +08:00
parent a0f8dc9df7
commit f4ffe71071
@@ -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;