fix(swap): 修复部分平仓后复利本金计算逻辑(修复T+1)
- 修复部分平仓后下一日复利本金未按剩余比例继承的问题 - 添加对最终日不算尾时历史差分重放的日期边界控制 - 修复算头不算尾快速路径中已平部分进入下一日复利的错误 - 确保重置日动态本金不会被二次缩放导致剩余本金计算错误 - 添加单元测试验证部分平仓后复利本金按剩余70%本金计提的逻辑 - 补充最终全平重放时历史终点包含当日利息后再做差额的测试用例
This commit is contained in:
@@ -1427,6 +1427,18 @@ namespace YLErp.Modules.SwapModule
|
||||
var fullPrincipal = lastTdInterestPrincipal > 0m
|
||||
? lastTdInterestPrincipal
|
||||
: oriPosiNotionalValue;
|
||||
// CalcSwapInterests 的算头不算尾非重置日快速路径会返回上一 EOD 的全额本金;
|
||||
// 只有该路径需要按剩余比例缩放,避免已平部分进入下一日复利。
|
||||
// 重置日动态本金已包含累计复利,calcLast=true 也已返回当前剩余本金,
|
||||
// 两者都不能再次缩放,否则会把剩余本金二次打折。
|
||||
var usesFullPreviousEodPrincipal = !calcLast
|
||||
&& hasPreviousEod
|
||||
&& (valueDate - eodPayPosition.ValueDate).Days == 1
|
||||
&& (valueDate - position.PosiStartDate).Days % (position.interest_rest_days ?? 1) != 0;
|
||||
if (usesFullPreviousEodPrincipal)
|
||||
{
|
||||
newEodPayPosition.TdInterestPrincipal *= 1m - closePercent;
|
||||
}
|
||||
var accrualPrincipal = calcLast
|
||||
? fullPrincipal
|
||||
: fullPrincipal * (1m - closePercent);
|
||||
|
||||
Reference in New Issue
Block a user