fix(swap): PosiDividendSum精度差异修复(GLMS-20260105-0007)
问题:互换后PosiDividendSum=-89999.64(应为-90000),差0.36元。 根因:UpdateEodPosition cs:1635从头重算PosiDividendSum (Round(全程,2)-已实现),与CopyEodPosition逐天递增 (每天Round(增量,2)累积)产生舍入误差累积。 修复:cs:1635改为递增模式 PosiDividendSum = eod.PosiDividendSum + TdPosiDividend - TdCloseDividend 与InterestIncomeSum的递增模式一致,避免从头重算的精度差异。 验证(golden录制/回放TDD): - 真实数据录制GLMS-20260105-0007的eod快照+输入数据 - 回放重新调UpdateEodPosition:修复前=-89999.64(红灯), 修复后=-90000(绿灯,精确匹配) - 121个测试全通过,无回归
This commit is contained in:
@@ -1624,15 +1624,11 @@ namespace YLErp.Modules.SwapModule
|
||||
|
||||
curretEod.RealizedDividend = curretEod.RealizedDividend + curretEod.TdCloseDividend;
|
||||
|
||||
// 分红与互换解耦:持仓>0时从起始日重算待实现分红,不再受互换事件影响
|
||||
// 修改,互换事件会影响待实现的分红的,现在要算上
|
||||
// 分红与互换解耦:持仓>0时待实现分红用递增模式(前日+当天新计-当天实现),
|
||||
// 与 CopyEodPosition 的逐天递增口径一致,避免从头重算的舍入累积差异。
|
||||
if (curretEod.PosiQuantity > 0)
|
||||
{
|
||||
//decimal tax = um.ValueAddedTax ?? 0;
|
||||
//BondPaymentService bondPaymentService = new BondPaymentService(UserInfo);
|
||||
//decimal totalPayment = bondPaymentService.CalcPayment(curretEod.UnderlyingCode, td.StartDate.Value, valueDate, (decimal)originNotional, shortRatio, directionRatio);
|
||||
//var totalInterest = totalPayment / (1 + tax) * (1 - tax);
|
||||
curretEod.PosiDividendSum = Math.Round(totalInterest,2) - curretEod.RealizedDividend;
|
||||
curretEod.PosiDividendSum = eod.PosiDividendSum + curretEod.TdPosiDividend - curretEod.TdCloseDividend;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user