refactor(accrual): referenceNotional→baseNotional, notional统一
- referenceNotional → baseNotional(更短更清晰) - 新代码统一用 notional(不用 principal): QuantLib/Strata 对 swap leg 用 notional 是业界标准 - DB字段(InterestPrincipalFix等)保持不动(legacy) - 注释标注 legacy 对照(orginPv/originalPv/dynomicPrincipal) 验证: 编译0错误, 7影子测试全过, 全量523测试7失败(基线一致)。
This commit is contained in:
@@ -7,12 +7,12 @@ namespace YLErp.Modules.SwapModule.Accrual;
|
||||
/// 融资腿计息编排层——纯数学部分(替换 SwapDealService 内 CalcDaily* 家族的纯计算)。
|
||||
///
|
||||
/// 命名规范(对齐 QuantLib / Strata):
|
||||
/// - notional/principal → 计息基数
|
||||
/// - notional → 计息名义本金(不用 principal,swap leg 用 notional 是业界标准)
|
||||
/// - accrued → 累计应计利息
|
||||
/// - unwindFraction → 平仓比例(0~1)
|
||||
/// - realizedInterest → 历史已结利息(legacy: consumedInterest)
|
||||
/// - referenceNotional → 差分公式参考本金(legacy: orginPv/originalPv)
|
||||
/// - accrualBasis → 逐段滚动的计息基数(legacy: dynomicPrincipal)
|
||||
/// - baseNotional → 差分公式基数(legacy: orginPv/originalPv)
|
||||
/// - accrualBasis → 逐段滚动的计息基数(legacy: dynomicPrincipal=dynamicPrincipal typo)
|
||||
/// </summary>
|
||||
public static class FundingLegAccrual
|
||||
{
|
||||
@@ -21,23 +21,18 @@ public static class FundingLegAccrual
|
||||
/// <summary>
|
||||
/// 单利日终计息(替换 CalcDailySimpleInterestByEod 的纯数学部分)。
|
||||
/// </summary>
|
||||
/// <param name="priorAccrued">上一日终累计应计利息。</param>
|
||||
/// <param name="priorNotional">上一日终计息基数。</param>
|
||||
/// <param name="notional">当前持仓名义本金。</param>
|
||||
/// <param name="unwindFraction">平仓比例(EOD 恒为 1)。</param>
|
||||
/// <param name="referenceNotional">差分公式参考本金(legacy: orginPv)。</param>
|
||||
public static InterestResult AccrueSimpleEod(
|
||||
decimal priorAccrued,
|
||||
decimal priorNotional,
|
||||
decimal notional,
|
||||
decimal unwindFraction,
|
||||
decimal referenceNotional,
|
||||
decimal baseNotional,
|
||||
FundingLegRate rate,
|
||||
AccrualPolicy policy,
|
||||
DateTime eodDate,
|
||||
AccrualTrace? trace = null)
|
||||
{
|
||||
var basis = priorNotional + notional - referenceNotional;
|
||||
var basis = priorNotional + notional - baseNotional;
|
||||
var displayBasis = basis * unwindFraction;
|
||||
|
||||
var allInRate = rate.AllInRate;
|
||||
@@ -62,14 +57,14 @@ public static class FundingLegAccrual
|
||||
/// <summary>
|
||||
/// 复利日终计息(替换 CalcDailyCompoundInterestByEod 的纯数学部分)。
|
||||
/// 重置日:basis = notional + priorAccrued × remainingFraction。
|
||||
/// 非重置日:basis = priorNotional + notional - referenceNotional。
|
||||
/// 非重置日:basis = priorNotional + notional - baseNotional。
|
||||
/// </summary>
|
||||
public static InterestResult AccrueCompoundEod(
|
||||
decimal priorAccrued,
|
||||
decimal priorNotional,
|
||||
decimal notional,
|
||||
decimal unwindFraction,
|
||||
decimal referenceNotional,
|
||||
decimal baseNotional,
|
||||
FundingLegRate rate,
|
||||
AccrualPolicy policy,
|
||||
bool isResetDay,
|
||||
@@ -79,7 +74,7 @@ public static class FundingLegAccrual
|
||||
{
|
||||
var basis = isResetDay
|
||||
? notional + priorAccrued * remainingFraction
|
||||
: priorNotional + notional - referenceNotional;
|
||||
: priorNotional + notional - baseNotional;
|
||||
var displayBasis = basis * unwindFraction;
|
||||
|
||||
var allInRate = rate.AllInRate;
|
||||
@@ -105,11 +100,6 @@ public static class FundingLegAccrual
|
||||
/// 单利多日计息(替换 CalcDailySimpleInterest 的纯数学部分)。
|
||||
/// 本金全程恒定,按重置日分段取利率。
|
||||
/// </summary>
|
||||
/// <param name="priorAccrued">上一日终累计应计利息。</param>
|
||||
/// <param name="notional">计息基数(差分,全程恒定)。</param>
|
||||
/// <param name="unwindFraction">平仓比例。</param>
|
||||
/// <param name="segmentRates">分段利率表:(段起日, all-in利率),按日期升序。</param>
|
||||
/// <param name="priorValueDate">上一日终归档日(只算此日之后的利息)。</param>
|
||||
public static InterestResult AccrueSimplePeriod(
|
||||
decimal priorAccrued,
|
||||
decimal notional,
|
||||
@@ -157,10 +147,6 @@ public static class FundingLegAccrual
|
||||
/// 复利多日计息(替换 CalcDailyCompoundInterest 的纯数学部分)。
|
||||
/// 从 startDate 到 endDate 全程重放,每个重置日把累计利息并入本金。
|
||||
/// </summary>
|
||||
/// <param name="notional">本次平仓名义本金(已按 unwindFraction 缩放)。</param>
|
||||
/// <param name="resetCarryInterest">末日重置时的存量利息(非末日传 0)。</param>
|
||||
/// <param name="realizedInterest">历史已结利息(legacy: consumedInterest)。</param>
|
||||
/// <param name="unwindFraction">平仓比例。</param>
|
||||
public static InterestResult AccrueCompoundPeriod(
|
||||
decimal notional,
|
||||
IReadOnlyList<(DateTime StartDate, decimal Rate)> segmentRates,
|
||||
|
||||
@@ -1605,7 +1605,7 @@ namespace YLErp.Modules.SwapModule
|
||||
priorNotional: preEodPosition.TdInterestPrincipal,
|
||||
notional: posiPrincipal,
|
||||
unwindFraction: closePercent,
|
||||
referenceNotional: orginPv,
|
||||
baseNotional: orginPv,
|
||||
rate: legRate,
|
||||
policy: accrualPolicy,
|
||||
eodDate: endDate,
|
||||
|
||||
Reference in New Issue
Block a user