refactor: 删除 CalcNotionalByMode, 保证金/融资腿计息基数内联到调用点
CalcNotionalByMode 已完成历史使命: - 融资腿(1/2/9)迁入 FundingLegStrategyFactory - 保证金(5/6)迁入 MarginModes.Contains 分支 - 死代码(3/4/7/8)已删 调用点(GetInterests:843)现在内联两条路径: - 保证金: closePrincipal = Fix × closePercent (用 MarginModes.Contains 判断) - 融资腿: FundingLegStrategyFactory.Get(mode).CalcNotional(...) 删除: - CalcNotionalByMode 方法(含注释) - 2个用反射调私有方法的诊断测试(验证的逻辑已被FundingLegStrategyTest覆盖) 验证: 编译0错误, 全量509测试7失败(基线一致)。
This commit is contained in:
@@ -66,33 +66,5 @@ namespace YLErp.Modules.SwapModule
|
||||
TradeDate = D0, StartDate = D0, ExerciseDate = D1, TradeStatus = "确认成交", ValidState = "Valid",
|
||||
StockEqvNotional = (double)RealLong, Notional = (double)RealLong, trade_extend = extend };
|
||||
}
|
||||
|
||||
/// <summary>用反射调用 private CalcNotionalByMode,直接证明各 mode 的 closePrincipal 是否依赖 posiLong/posiShort。</summary>
|
||||
private (decimal close, decimal posi, decimal pct) CallCalcNotionalByMode(swap_position position, decimal closePct, decimal posiNotional, decimal posiLong, decimal posiShort)
|
||||
{
|
||||
var m = typeof(SwapDealService).GetMethod("CalcNotionalByMode", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||
return ((decimal, decimal, decimal))m.Invoke(_svc, new object[] { position, closePct, posiNotional, posiLong, posiShort });
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void 诊断_mode9_标的期初全价_closePrincipal_不依赖posiLong_而用posiNotional()
|
||||
{
|
||||
// mode 9 分支:closePrincipal = posiNotional * closePercent
|
||||
var baseP = OrigBasePrice();
|
||||
var (close, posi, _) = CallCalcNotionalByMode(baseP, ClosePct, RealLong * ClosePct, OrigLong, 0m);
|
||||
Console.WriteLine($"[mode9] posiNotional={RealLong * ClosePct} posiLong(orig)={OrigLong} → closePrincipal={close}");
|
||||
Assert.AreEqual(RealLong * ClosePct * ClosePct, close, "mode9 应 = posiNotional(=real剩余*closePct) * closePct,与 posiLong(orig 100M) 无关");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void 诊断_mode5_预付金_closePrincipal_用自身Fix_不依赖posiLong()
|
||||
{
|
||||
// mode 5 分支:closePrincipal = position.InterestPrincipalFix * closePercent(用 Clone 后的 real Fix)
|
||||
var prepay = RealPrepay(); // Fix = RealFix(66,813.12)
|
||||
var (close, posi, _) = CallCalcNotionalByMode(prepay, ClosePct, RealLong * ClosePct, OrigLong, 0m);
|
||||
Console.WriteLine($"[mode5] Fix(cloned real)={RealFix} posiLong(orig)={OrigLong} → closePrincipal={close}");
|
||||
Assert.AreEqual(RealFix * ClosePct, close, "mode5 应 = 实时腿剩余本金(real Fix) * closePct,与 posiLong(orig 100M) 无关");
|
||||
Assert.AreNotEqual(OrigFix * ClosePct, close, "务必不是期初 99,000 * closePct(证明后端修复生效)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user