fix(swap): 修复平仓预付金应返还本金被 closePercent^N 指数级缩小
根因:CalcDailySimpleInterest 单利非重置日 else 分支曾把已×closePercent 的 InterestPrincipal 回填给计息基数 tdDynomicPrincipal,使下一个非重置日再乘一次, 累积成 InterestPrincipal = Fix × closePercent^N(N=计息天数),部分平仓时指数级缩小。 100% 因 1^N=1 不显现,故此前漏测。 修复:非重置日与重置日、日终 CalcDailySimpleInterestByEod 三者对齐—— 显示本金 InterestPrincipal = 基数×closePercent(只缩放一次),计息基数不缩放。 TDD 铁证(GLMS-20260701-0006, interest_rest_days=7, Fix=9,180,000): - 修复前 50%→71,718.75(=Fix×0.5^7)、10%→0.918(=Fix×0.1^7) - 修复后 50%→4,590,000、10%→918,000、100%→9,180,000 新增 CalcUnwindMultiDay helper + 3 用例,SwapUnwindPrepayPrincipalBugTdd 共 9 绿, SwapModule 全量 186 通过无回归。
This commit is contained in:
@@ -1034,8 +1034,14 @@ namespace YLErp.Modules.SwapModule
|
||||
}
|
||||
else
|
||||
{
|
||||
// 单利:计息基数(tdDynomicPrincipal)逐日恒定,非重置日与重置日对本金的处理必须一致——
|
||||
// 显示本金 InterestPrincipal = 基数 × closePercent(线性,只缩放一次),
|
||||
// 计息基数 TdInterestPrincipal = 基数(不缩放)。
|
||||
// 修复前此处曾写 tdDynomicPrincipal = flowEvent.InterestPrincipal(已含 closePercent),
|
||||
// 使下一个非重置日再乘一次 closePercent,累积成 InterestPrincipal = Fix × closePercent^N,
|
||||
// 导致部分平仓"应返还本金"被指数级缩小(50%→Fix×0.5^7、10%→Fix×0.1^7)。
|
||||
// 与日终 CalcDailySimpleInterestByEod(baseInterestPrincipal 只乘一次)对齐。
|
||||
flowEvent.InterestPrincipal = tdDynomicPrincipal * closePercent;
|
||||
tdDynomicPrincipal = flowEvent.InterestPrincipal;
|
||||
TdInterestPrincipal = tdDynomicPrincipal;
|
||||
}
|
||||
flowEvent.FloatRate = Convert.ToDecimal(floatRate);
|
||||
|
||||
Reference in New Issue
Block a user