收到平仓或互换利息修复

This commit is contained in:
吴方海
2026-06-04 13:23:31 +08:00
parent 524f9a5cd8
commit 535497c68a
+22 -10
View File
@@ -413,20 +413,32 @@ namespace YLErp.Modules.SwapModule
interests.Add(CalcUnwindInterest(td, valueDate, endDate, positionClone, rate, floatRate, posiPrincipal, closePrincipal, newClosePercent, annualDays, preEodPosition, eventType, add, swap, orginPv, calcFirst, calcLast||newCalcLast));
}
}
//当日有平仓或互换记录时,需要把平仓或互换已经结算的利息从计算结果中扣除,避免重复
//互换始终需要扣除;平仓仅不算尾时需要(算尾时利息已包含关闭日,无重叠)
if (closeList != null && closeList.Count > 0
&& (eventType == (int)SwapEventTypeEnum. || (!calcLast && !newCalcLast)))
//当日有平仓或互换记录时,避免重复
if (closeList != null && closeList.Count > 0)
{
foreach (var item in interests)
{
var closeEvent = closeList.Where(x => x.PositionId == item.PositionId);
var closePnl = closeEvent.Sum(s => s.InterestClosePnL);
var closeAmount = closeEvent.Sum(s => s.InterestAmount);
var closeTdAmount = closeEvent.Sum(s => s.TdInterestAmount);
item.InterestAmount = item.InterestAmount - closeAmount;
item.TdInterestAmount = item.TdInterestAmount - closeTdAmount;
item.InterestClosePnL = item.InterestClosePnL - closePnl;
if (eventType == (int)SwapEventTypeEnum. || eventType == (int)SwapEventTypeEnum.)
{
// 互换:该仓位当天已有完成事件,直接归0
if (closeEvent.Any())
{
item.InterestAmount = 0;
item.TdInterestAmount = 0;
item.InterestClosePnL = 0;
}
}
else if (!calcLast && !newCalcLast)
{
// 平仓不算尾:扣除已结算的利息(算尾时利息已包含关闭日,无重叠)
var closePnl = closeEvent.Sum(s => s.InterestClosePnL);
var closeAmount = closeEvent.Sum(s => s.InterestAmount);
var closeTdAmount = closeEvent.Sum(s => s.TdInterestAmount);
item.InterestAmount = item.InterestAmount - closeAmount;
item.TdInterestAmount = item.TdInterestAmount - closeTdAmount;
item.InterestClosePnL = item.InterestClosePnL - closePnl;
}
}
}
return interests;