cleanup(accrual): 删除orginPv死参数(3个方法签名+所有调用点)
源码实证orginPv在5/6个CalcDaily方法中是死参数(方法体不读取): - CalcDailyCompoundInterest: 删 decimal orginPv(3个调用点同步删) - CalcDailyCompoundInterestByEod: 删(1个调用点+4个测试同步删) - CalcDailySimpleInterestByEod: 删(1个调用点+2个测试同步删) 保留orginPv的方法(真实消费者): - CalcDailySimpleInterest: 差分公式 posiPrincipal - orginPv - GetInterests/CalcUnwindInterest/InitSwapDealInterest: 转发链 SwapModule零回归(7基线/510通过)
This commit is contained in:
@@ -92,7 +92,7 @@ namespace UnitTestProject.Modules.SwapModule.Accrual
|
||||
decimal oldInterest = 0, oldTd = 0;
|
||||
var svc = new StubSvc();
|
||||
svc.CalcDailyCompoundInterestByEod(preEod, EodDate, TradeDate, position,
|
||||
Notional, Notional, flowEvent, AnnualDays, false, 0m, 1m, Notional,
|
||||
Notional, Notional, flowEvent, AnnualDays, false, 0m, 1m,
|
||||
ref oldInterest, ref oldTd);
|
||||
|
||||
// 新方法
|
||||
@@ -125,7 +125,7 @@ namespace UnitTestProject.Modules.SwapModule.Accrual
|
||||
decimal oldInterest = 0, oldTd = 0;
|
||||
var svc = new StubSvc();
|
||||
svc.CalcDailyCompoundInterestByEod(preEod, nonResetDate, TradeDate, position,
|
||||
Notional, Notional, flowEvent, AnnualDays, false, 0m, 1m, Notional,
|
||||
Notional, Notional, flowEvent, AnnualDays, false, 0m, 1m,
|
||||
ref oldInterest, ref oldTd);
|
||||
|
||||
// 新方法
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace UnitTestProject.Modules.SwapModule.Accrual
|
||||
decimal oldI = 0, oldTd = 0;
|
||||
var svc = new StubSvc();
|
||||
svc.CalcDailyCompoundInterest(EndDate, position, Notional, flowEvent,
|
||||
AnnualDays, false, 0m, 1m, Notional, true, false,
|
||||
AnnualDays, false, 0m, 1m, true, false,
|
||||
ref oldI, ref oldTd);
|
||||
|
||||
// 新方法:固定利率全段相同,分段点 = PosiStartDate + k×7
|
||||
@@ -122,7 +122,7 @@ namespace UnitTestProject.Modules.SwapModule.Accrual
|
||||
decimal oldI = 0, oldTd = 0;
|
||||
var svc = new StubSvc();
|
||||
svc.CalcDailyCompoundInterest(EndDate, position, Notional * closePct, flowEvent,
|
||||
AnnualDays, false, 0m, closePct, Notional, true, false,
|
||||
AnnualDays, false, 0m, closePct, true, false,
|
||||
ref oldI, ref oldTd, consumedInterest: consumed, resetCarryInterest: carry);
|
||||
|
||||
// 新方法
|
||||
@@ -166,7 +166,7 @@ namespace UnitTestProject.Modules.SwapModule.Accrual
|
||||
decimal oldI = 0, oldTd = 0;
|
||||
var svc = new StubSvc();
|
||||
svc.CalcDailyCompoundInterest(EndDate, position, Notional, flowEvent,
|
||||
AnnualDays, false, 0m, 1m, Notional, true, true,
|
||||
AnnualDays, false, 0m, 1m, true, true,
|
||||
ref oldI, ref oldTd);
|
||||
|
||||
// 新方法
|
||||
|
||||
@@ -509,7 +509,7 @@ namespace YLErp.Modules.SwapModule
|
||||
decimal tdInterestAmount = 0m;
|
||||
|
||||
service.CalcDailyCompoundInterestByEod(preEod, resetDate, startDate, position,
|
||||
principal, principal, flowEvent, AnnualDays, false, 0.013502m, 1m, principal,
|
||||
principal, principal, flowEvent, AnnualDays, false, 0.013502m, 1m,
|
||||
ref interestAmount, ref tdInterestAmount);
|
||||
|
||||
AssertDecimal(principal + pendingInterest, flowEvent.InterestPrincipal,
|
||||
|
||||
@@ -1725,14 +1725,14 @@ namespace YLErp.Modules.SwapModule
|
||||
decimal expectedTdAmountAtEnd = 0m;
|
||||
dealService.CalcDailyCompoundInterest(
|
||||
finalCloseDate, position, remainingNotional, expectedEndFlow, AnnualDays, false,
|
||||
intermediateEod.FloatRate, 1m, originalNotional, true, false,
|
||||
intermediateEod.FloatRate, 1m, true, false,
|
||||
ref expectedAmountAtEnd, ref expectedTdAmountAtEnd);
|
||||
var expectedPreviousFlow = new swap_flow_event { InterestRate = spread };
|
||||
decimal expectedAmountAtPreviousEod = 0m;
|
||||
decimal expectedTdAmountAtPreviousEod = 0m;
|
||||
dealService.CalcDailyCompoundInterest(
|
||||
intermediateDate, position, remainingNotional, expectedPreviousFlow, AnnualDays, false,
|
||||
intermediateEod.FloatRate, 1m, originalNotional, true, true,
|
||||
intermediateEod.FloatRate, 1m, true, true,
|
||||
ref expectedAmountAtPreviousEod, ref expectedTdAmountAtPreviousEod);
|
||||
var expectedFinalInterest = intermediateEod.InterestIncomeSum
|
||||
+ expectedAmountAtEnd - expectedAmountAtPreviousEod;
|
||||
|
||||
@@ -1088,12 +1088,12 @@ namespace YLErp.Modules.SwapModule
|
||||
if (position.InterestType == (int)InterestTypeEnum.复利)
|
||||
{
|
||||
// 复利计算
|
||||
CalcDailyCompoundInterestByEod(preEod, valueDate, td.StartDate.Value, position, closePrincipal, posiPrincipal, interest, annualDays, false, eodFloatRate, 1m, posiPrincipal, ref interestAmount, ref tdInterestAmount);
|
||||
CalcDailyCompoundInterestByEod(preEod, valueDate, td.StartDate.Value, position, closePrincipal, posiPrincipal, interest, annualDays, false, eodFloatRate, 1m, ref interestAmount, ref tdInterestAmount);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 单利计算
|
||||
CalcDailySimpleInterestByEod(preEod, valueDate, td.StartDate.Value, position, closePrincipal, posiPrincipal, interest, annualDays, false, eodFloatRate, 1m, posiPrincipal, ref interestAmount, ref tdInterestAmount);
|
||||
CalcDailySimpleInterestByEod(preEod, valueDate, td.StartDate.Value, position, closePrincipal, posiPrincipal, interest, annualDays, false, eodFloatRate, 1m, ref interestAmount, ref tdInterestAmount);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1264,7 +1264,7 @@ namespace YLErp.Modules.SwapModule
|
||||
// 它只在当前 endDate 恰好为重置日时使用,避免把同一笔历史利息重复资本化。
|
||||
var resetCarryInterest = preEodPosition.InterestIncomeSum * remainingPercent;
|
||||
CalcDailyCompoundInterest(endDate, position, closePosiNotionalValue, interest, annualDays, needPrice,
|
||||
floateRate, closePrecent, orginPv, calcFirst, calcLast, ref InterestAmount, ref TdInterestAmount,
|
||||
floateRate, closePrecent, calcFirst, calcLast, ref InterestAmount, ref TdInterestAmount,
|
||||
consumedInterest, resetCarryInterest);
|
||||
if (preEodPosition.id != 0 && closePrecent == 1m)
|
||||
{
|
||||
@@ -1291,7 +1291,7 @@ namespace YLErp.Modules.SwapModule
|
||||
}
|
||||
// 计算截至本次平仓日的累计利息 amountAtEnd
|
||||
CalcDailyCompoundInterest(replayEndDate, position, closePosiNotionalValue,
|
||||
interestAtEnd, annualDays, needPrice, floateRate, closePrecent, orginPv,
|
||||
interestAtEnd, annualDays, needPrice, floateRate, closePrecent,
|
||||
calcFirst, calcLast, ref amountAtEnd, ref tdAmountAtEnd, consumedInterest);
|
||||
var interestAtPreviousEod = new swap_flow_event { InterestRate = rate };
|
||||
decimal amountAtPreviousEod = 0m;
|
||||
@@ -1300,7 +1300,7 @@ namespace YLErp.Modules.SwapModule
|
||||
// 因此此处按闭区间包含上一日终当天,避免算头不算尾时重复加入该日利息。
|
||||
// 计算截至上一日终累积的利息 amountAtPreviousEod
|
||||
CalcDailyCompoundInterest(preEodPosition.ValueDate, position, closePosiNotionalValue,
|
||||
interestAtPreviousEod, annualDays, needPrice, floateRate, closePrecent, orginPv,
|
||||
interestAtPreviousEod, annualDays, needPrice, floateRate, closePrecent,
|
||||
calcFirst, true, ref amountAtPreviousEod, ref tdAmountAtPreviousEod, consumedInterest);
|
||||
// 例如 0004:5/18 待实现 -118631.261797,加 5/19 新增约 -4648.912760,
|
||||
// 得到最终应结 -123280.174557,按金额两位落为 Excel BN 的 -123280.17。
|
||||
@@ -1373,7 +1373,7 @@ namespace YLErp.Modules.SwapModule
|
||||
/// <param name="annualDays">年化天数</param>
|
||||
/// <returns></returns>
|
||||
public void CalcDailyCompoundInterest(DateTime endDate, swap_position position, decimal principal, swap_flow_event flowEvent,
|
||||
int annualDays, bool needPrice, decimal floateRate, decimal closePercent, decimal orginPv, bool calcFirst, bool calcLast,
|
||||
int annualDays, bool needPrice, decimal floateRate, decimal closePercent, bool calcFirst, bool calcLast,
|
||||
ref decimal InterestAmount, ref decimal TdInterestAmount, decimal consumedInterest = 0m, decimal resetCarryInterest = 0m)
|
||||
{
|
||||
var startDate = position.PosiStartDate;
|
||||
@@ -1462,7 +1462,7 @@ namespace YLErp.Modules.SwapModule
|
||||
/// <param name="isAnnualized">是否年化</param>
|
||||
/// <param name="annualDays">年化天数</param>
|
||||
/// <returns></returns>
|
||||
public void CalcDailyCompoundInterestByEod(eod_swap_position preEodPosition, DateTime endDate, DateTime tradeDate, swap_position position, decimal principal, decimal posiPrincipal, swap_flow_event flowEvent, int annualDays, bool needPrice, decimal floateRate, decimal closePercent, decimal orginPv, ref decimal InterestAmount, ref decimal TdInterestAmount)
|
||||
public void CalcDailyCompoundInterestByEod(eod_swap_position preEodPosition, DateTime endDate, DateTime tradeDate, swap_position position, decimal principal, decimal posiPrincipal, swap_flow_event flowEvent, int annualDays, bool needPrice, decimal floateRate, decimal closePercent, ref decimal InterestAmount, ref decimal TdInterestAmount)
|
||||
{
|
||||
int interestPeriod = position.interest_rest_days ?? 1;
|
||||
var isResetDay = (endDate - tradeDate).Days % interestPeriod == 0;
|
||||
@@ -1517,7 +1517,7 @@ namespace YLErp.Modules.SwapModule
|
||||
/// <summary>
|
||||
/// 计算单利 收盘(按重置天数分段,每段使用对应浮动利率)
|
||||
/// </summary>
|
||||
public void CalcDailySimpleInterestByEod(eod_swap_position preEodPosition, DateTime endDate, DateTime tradeDate, swap_position position, decimal principal, decimal posiPrincipal, swap_flow_event flowEvent, int annualDays, bool needPrice, decimal floateRate, decimal closePercent, decimal orginPv, ref decimal InterestAmount, ref decimal TdInterestAmount)
|
||||
public void CalcDailySimpleInterestByEod(eod_swap_position preEodPosition, DateTime endDate, DateTime tradeDate, swap_position position, decimal principal, decimal posiPrincipal, swap_flow_event flowEvent, int annualDays, bool needPrice, decimal floateRate, decimal closePercent, ref decimal InterestAmount, ref decimal TdInterestAmount)
|
||||
{
|
||||
// 首次操作(preEod.id == 0):计息基数按存量本金初始化——保留旧行为(含对 preEod 的就地修正)。
|
||||
if (preEodPosition.id == 0)
|
||||
|
||||
Reference in New Issue
Block a user