fix(swap): 修复预付金腿计息基数计算问题
- 在多个单元测试文件中添加InterestIncomeSum字段以保持数据一致性 - 修改GLMS20260105PartialCloseDividendBugTest测试,改进EOD快照验证逻辑 - 修复SwapDealService中预付金腿的orginPv计算逻辑,使用上一日保证金本金作为基准 - 更新SwapPositionComposeScenarioTest中的测试数据结构和利率设置 - 修正平仓日利息计算精度问题,使用Math.Round确保计算准确性
This commit is contained in:
@@ -1194,13 +1194,19 @@ namespace YLErp.Modules.SwapModule
|
||||
// 根因修复:预付金(保证金)腿的计息基数维度应为"保证金本金"自身,而非整笔交易的名义本金(orginPv)。
|
||||
// 否则公式 dynomicPrincipal = TdInterestPrincipal + posiPrincipal - orginPv
|
||||
// 会把交易名义本金(千万~亿级)当减项扣掉,使"应返还本金"(InterestPrincipal)与计息基数变成巨负值。
|
||||
// 此处将预付金腿的 orginPv 对齐为其自身保证金(InterestPrincipalFix),
|
||||
// 与日终路径(SwapEodPositionService 对预付金腿 orginPv=InterestPrincipalFix)保持一致。
|
||||
// 此处将预付金腿的 orginPv 对齐为上一日保证金本金;无历史归档时才取当前本金。
|
||||
// 差分公式必须使用同一时点口径:上一日本金 + 当前本金 - 上一本金 = 当前本金。
|
||||
// 若已有部分平仓后仍取当前本金,会把上一日本金原样保留,导致当日继续按平仓前本金计息。
|
||||
// 仅作用于初始预付金(5)/追加预付金(6);其它计息模式(含债券本金腿 标的期初全价=9)仍用交易名义本金,不受影响。
|
||||
if (position.InterestMode == (int)InterestModeEnum.初始预付金
|
||||
|| position.InterestMode == (int)InterestModeEnum.追加预付金)
|
||||
{
|
||||
orginPv = position.InterestPrincipalFix;
|
||||
var previousPrincipal = preEodPosition.InterestPrincipalFix != 0m
|
||||
? preEodPosition.InterestPrincipalFix
|
||||
: preEodPosition.TdInterestPrincipal;
|
||||
orginPv = preEodPosition.id != 0 && previousPrincipal != 0m
|
||||
? previousPrincipal
|
||||
: position.InterestPrincipalFix;
|
||||
}
|
||||
|
||||
if (swap)
|
||||
|
||||
Reference in New Issue
Block a user