fix(swap): 修复复利计算中的利息处理逻辑
- 添加了从开始日期到结束日期的天数计算 - 添加了从前一日末到结束日期的天数计算 - 修复了特定条件下利息本金和浮动利率的赋值 - 修正了利息金额和累计利息金额的计算 - 添加了四舍五入处理以确保精度准确性 - 修复了利息平仓损益的计算逻辑
This commit is contained in:
@@ -1205,6 +1205,21 @@ namespace YLErp.Modules.SwapModule
|
||||
var floateRate = preEodPosition.FloatRate;
|
||||
if (position.InterestType == (int)InterestTypeEnum.复利)
|
||||
{
|
||||
var daysFromStart = (endDate - position.PosiStartDate).Days;
|
||||
var daysFromPreEod = preEodPosition.id != 0
|
||||
? (endDate - preEodPosition.ValueDate).Days
|
||||
: 0;
|
||||
if (!calcLast && daysFromPreEod == 1 && daysFromStart % (position.interest_rest_days ?? 1) != 0)
|
||||
{
|
||||
interest.InterestPrincipal = preEodPosition.TdInterestPrincipal * closePrecent;
|
||||
interest.FloatRate = preEodPosition.FloatRate;
|
||||
InterestAmount = preEodPosition.InterestIncomeSum * closePrecent;
|
||||
TdInterestAmount = preEodPosition.InterestIncomeSum;
|
||||
interest.InterestAmount = Math.Round(InterestAmount, InterestCalculationPrecision, MidpointRounding.AwayFromZero);
|
||||
interest.TdInterestAmount = Math.Round(TdInterestAmount, InterestCalculationPrecision, MidpointRounding.AwayFromZero);
|
||||
interest.InterestClosePnL = interest.InterestAmount * interestRatio;
|
||||
return interest;
|
||||
}
|
||||
var remainingPercent = preEodPosition.TdInterestPrincipal > 0m
|
||||
? closePosiNotionalValue / preEodPosition.TdInterestPrincipal
|
||||
: 1m;
|
||||
|
||||
Reference in New Issue
Block a user