hjhan
|
8419d53421
|
refactor(eod): MtmCalc.BlendPrice提取加权均价混合(候选J)
4处内联 (prevPrice*prevQty + sum) / total → MtmCalc.BlendPrice(...)
SwapModule零回归(7基线/510通过)
候选K(单点TdRealizedPnL)/L(2处guard差InterestType)/M(2处guard)/N(单点)为低频,
提取收益不足以抵消新增方法的开销, 暂不提取
|
2026-08-12 15:03:00 +08:00 |
|
hjhan
|
aeb55a01ad
|
refactor(eod): 提取InterestIncomeCalc.DailyAccrual/RollRealized + MtmCalc.ReturnLegProfitSum
候选B: 3处日利息 principal*(rate+float)/annualDays → InterestIncomeCalc.DailyAccrual
候选D: 4处 PosiProfitSum=Mtm+Div+Fee → MtmCalc.ReturnLegProfitSum
候选E: 4对 RealizedInterest/RealizedInterestFee 滚存 → InterestIncomeCalc.RollRealized
SwapModule零回归(7基线/510通过)
|
2026-08-12 14:50:24 +08:00 |
|
hjhan
|
1aa0579fbd
|
refactor(eod): MarginModes.FixedAmountAndMargin + DirectionRatio.RateType提取
候选F: 3处内联 new List{固定值,初始预付金,追加预付金} → MarginModes.FixedAmountAndMargin
候选I: 7处内联 收取?Buy:Sell → DirectionRatio.RateType(direction)
SwapModule零回归(7基线/510通过)
|
2026-08-12 14:38:04 +08:00 |
|
hjhan
|
af94003939
|
refactor(eod): DirectionRatio.ReceivePay/InterestLegPnl替换21处内联三元
SwapEodPositionService中散落的收取?1:-1三元表达式和ratio+margin flip块:
- 9处InterestLegPnl块(3-5行→1行): 收取?1:-1 + if(MarginModes)ratio=-ratio
- 12处ReceivePay三元: 收取?1:-1 → DirectionRatio.ReceivePay(dir)
- 含2处反向(收取?-1:1 → -DirectionRatio.ReceivePay)
净减约30行, 消除+1/-1写反的风险
SwapModule零回归(7基线/510通过)
|
2026-08-12 14:33:23 +08:00 |
|
hjhan
|
5a7869e0c9
|
fix(return-leg): PositionValueCalc.ratio 改为 int, 统一方向因子类型
ratio(收取=1/支付=-1)是方向因子, 应该是 int。
和 MtmCalc/DirectionRatio/MarginCalc 的 int 保持一致。
调用点(SwapEodPositionService 4处)原 ratio 是 decimal,
加 (int) 显式转换(值恒为 1或-1, 零精度损失)。
排查确认: 这是唯一的类型不一致, 其他纯函数参数类型均已统一。
验证: 编译0错误, 全量513测试7失败(基线一致)。
|
2026-08-11 16:59:22 +08:00 |
|
hjhan
|
16c44d3b50
|
refactor(return-leg): 抽取 PositionValueCalc 持仓价值汇总
SwapEodPositionService 8处 SwapPositionValue inline 公式替换:
- 4处 InterestProfitSum * ratio + PosiProfitSum → PositionValueCalc.Calc(带ratio)
- 4处 InterestProfitSum + PosiProfitSum → PositionValueCalc.Calc(默认ratio=1)
持仓价值 = 利息端收益 + 浮动端收益, 8处副本→1个纯函数。
这是最后一个高性价比的纯函数提取。
验证: 编译0错误, 全量513测试7失败(基线一致)。
|
2026-08-11 16:50:21 +08:00 |
|
hjhan
|
cbe5b58577
|
refactor: 新增 DirectionRatio 方向因子纯函数, 替换7处三元式
多空方向(PositionType==Long?1:-1)和收付方向(xxx==收取?1:-1)
在两个上帝类里重复 15+处, +1/-1 写反是常见 bug 源。
新增 ReturnLegs/DirectionRatio.cs:
- LongShort(positionType): 多头=+1, 空头=-1
- ReceivePay(direction): 收取=+1, 支付=-1
替换:
- SwapEodPositionService: 6处 shortRatio 三元式(含注释1处)
- SwapDealService: 1处 shortRatio + 1处 directionRatio
验证: 编译0错误, 全量511测试7失败(基线一致)。
|
2026-08-11 12:30:53 +08:00 |
|
hjhan
|
e35a738d2e
|
refactor(funding-leg): 修复2个类名+补DividendCalc注释
采纳命名审查建议(优先级最高的2项):
1. UnderlyingFullPriceLeg → UnderlyingEntryFullPriceLeg
补齐'期初(Entry)'——建仓时点全价, 非当前全价, 金融上是不同计息口径
2. FixedNotionalLeg → FixedAmountLeg
去掉误导性的Notional——'固定值'是合同写死的数额, 不一定是名义本金,
避免与ContractNotionalLeg的Notional概念撞车
3. DividendCalc 补充注释: 业务含义(债券票息+股票分红统一用Dividend)、
税务口径(还原不含税再扣税)、命名保持理由
验证: 编译0错误, 全量507测试7失败(基线一致)。
|
2026-08-11 11:24:05 +08:00 |
|
hjhan
|
939d6a4271
|
fix(return-leg): MtmCalc.UnrealizedPnl ratio 参数改为 int
ratio(收取=1/支付=-1)和 shortRatio 一样是 int, 不是 decimal。
1695行 ratio 声明同步从 decimal 改为 int。
C# decimal*int 自动提升为 decimal, 不影响计算结果。
验证: 编译0错误, 全量507测试7失败(基线一致)。
|
2026-08-11 11:05:55 +08:00 |
|
hjhan
|
963f7a04e5
|
refactor(return-leg): 新增 DividendCalc 分红增值税后计算 + 修复 MtmCalc 参数类型
DividendCalc: 增值税后票息 = payment/(1+tax)*(1-tax),
原 SwapEodPositionService 4处重复此公式(1804/1894/1906/2095)。
本次先建纯函数+测试, 4处inline替换下次做。
附带修复: MtmCalc shortRatio 参数从 decimal 改为 int
(原代码6处声明中5处是int, 仅1696是decimal, 统一为int)。
1696行 shortRatio 声明同步改为 int。
验证: 编译0错误, DividendCalc 4个测试全过,
全量507测试7失败(基线一致)。
|
2026-08-11 11:04:08 +08:00 |
|
hjhan
|
a26f848287
|
refactor(return-leg): 抽取 MtmCalc 标的端盯市计算
把 SwapEodPositionService 4处重复的 UnderlyingMarketValue 公式和
4处 PosiMtmPnL 公式抽成 MtmCalc 纯函数:
- MarketValue(price, qty, contractSize, shortRatio): 标的市值
- UnrealizedPnl(price, costGrossPrice, qty, contractSize, shortRatio, ratio): 盯市未实现盈亏
原代码4处副本(1731/1813/1898/2101 + 1741/1814/1899/2102)全部替换。
验证: 编译0错误, 全量503测试7失败(基线一致)。
|
2026-08-11 10:45:43 +08:00 |
|
hjhan
|
59651b802e
|
refactor(return-leg): QuantityRollforward 改名 QtyRollforward
代码里统一用 Qty 表示数量, 命名更简洁。
文件/类/测试类同步改名: Quantity→Qty。
|
2026-08-11 10:40:17 +08:00 |
|
hjhan
|
279c640345
|
refactor(return-leg): 抽取 QuantityRollforward 标的端数量递推
把 SwapEodPositionService:1980 inline 的数量递推公式抽成独立纯函数:
qty = 上一日终数量 + 开仓 - 平仓 + 公司行为调整
新增第4参数 corpActionDeltaQty(默认0,当前不影响行为),
预留给公司行为改造(送股/拆股/配股)。
原代码硬编码'数量只因交易变动'假设,改造时填入非零值即可。
ReturnLegs/QuantityRollforward.cs: 纯函数, 不依赖任何实例状态
ReturnLegs 测试: 8个(无交易/开仓/平仓/全平/超额/送股/拆股)
SwapEodPositionService: inline 2行 → QuantityRollforward.Calc() 1行
验证: 编译0错误, 全量497测试7失败(基线一致)。
|
2026-08-11 10:36:38 +08:00 |
|
hjhan
|
e73272042a
|
refactor(return-leg): 新增 ReturnLegSummary 标的端值对象
标的端(Total Return Leg)归档产出的汇总值: 多空名义本金/平仓名义本金/含费全价。
对应原 SwapPositionCompose 里 DealFloatPositions 传给 DealInterests 的4个标量。
命名说明(防歧义):
- 用 ReturnLeg(业界标准 Total Return Leg), 不用 FloatLeg
- 'float'在金融里首要含义是'浮动利率'(如FR007), 用于标的端会产生歧义
- 标的端 = 标的资产的总回报(价格涨跌+票息分红), 与浮动利率无关
纯新增骨架, 零生产改动。
验证: 编译0错误, 3个单测全过, 全量489测试7失败(基线一致)。
|
2026-08-11 10:15:20 +08:00 |
|