为拆三类腿做准备,按 Strategy 模式封装 CalcNotionalByMode 的 switch。 本次零生产代码改动,全部为新增小文件,每个类单一职责<50行。 新增(策略接口+值对象): - InterestLegs/IInterestLegStrategy.cs NotionalResult 值对象(closePrincipal/posiPrincipal/closePercent) + IInterestLegStrategy 接口(每个mode一个实现) 新增(3个活跃利息腿mode): - InterestLegs/FixedNotionalLeg.cs mode 1 固定值 计息基数恒=InterestPrincipalFix, 不随平仓比例变化(合同写死的固定值) - InterestLegs/ContractNotionalLeg.cs mode 2 合约名义本金规模 平仓本金=posiNotional×closePercent, 按比例线性缩放 - InterestLegs/UnderlyingFullPriceLeg.cs mode 9 标的期初全价 主路径公式同mode2, 差异在衡泰路径grossPrice折算+EOD复利反推 确认现状: - 界面实际只有3个活跃利息腿mode(1/2/9), TradeView.cshtml:330-349 - mode 3(持仓名义本金)/4(持仓市值) 零引用=死代码, 本次不实现 - mode 7/8(多空存续) 界面已注释掉, 本次不实现 - mode 5/6(预付金) 属保证金维度, 后续单独做PrepayLeg 新增测试(8个,全过): - InterestLegStrategyTest.cs 覆盖各mode的部分平仓/全平/零平仓场景 验证策略行为与现有CalcNotionalByMode switch完全一致
17 lines
757 B
C#
17 lines
757 B
C#
using YLErp.DBModels;
|
|
|
|
namespace YLErp.Modules.SwapModule.InterestLegs;
|
|
|
|
/// <summary>
|
|
/// 合约名义本金规模利息腿(InterestMode=合约名义本金规模)。
|
|
/// 站在"合约规模"视角:平仓本金 = 剩余名义本金 × 平仓比例。
|
|
/// 与标的期初全价(9)在 CalcNotionalByMode 里公式相同,差异在衡泰路径 grossPrice 折算和 EOD 复利反推。
|
|
/// </summary>
|
|
public sealed class ContractNotionalLeg : IInterestLegStrategy
|
|
{
|
|
public InterestModeEnum Mode => InterestModeEnum.合约名义本金规模;
|
|
|
|
public NotionalResult CalcNotional(decimal fix, decimal posiNotional, decimal posiLong, decimal posiShort, decimal closePercent)
|
|
=> new(posiNotional * closePercent, posiNotional, closePercent);
|
|
}
|