让人工零仓位和零权重约束红利再投
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
# 人工零仓位与可选红利再投的一致性
|
||||
|
||||
2026-09-15。开发候选,未发布生产;完整目标保持未完成。
|
||||
|
||||
## 已核对的模型和反例
|
||||
|
||||
ALV `position_model.py::_handle_dividend_payable` 与FIDC现有再投都是参考价、整手、零费用的历史账务模型,不是市场委托;两边默认再投关闭。只有显式开启该模型时,才出现本轮组合问题:用户已清仓并在派息前将人工仓位设为0%,派息日仍账务买入100股。完整回放已在修复前实际复现。
|
||||
|
||||
修复不把这项功能改成开盘市价单,不改变原参考价或整手定量。没有人工零仓位时,清仓本身不能作为猜测用户设置的依据,继续按原已声明的再投模型计算。
|
||||
|
||||
## 控制优先级
|
||||
|
||||
- 只读取已校验、绑定运行审计的人工仓位/权重事件。上海交易日00:00是当前历史模型的结算入账时点,不是券商成交时间;使用此时已经生效的最新 `(effective_at, sequence)`。
|
||||
- 已生效的人工Scale 0、Set 0禁止可选再投。明确的人工分配中,证券权重0或被排除也只让该证券分红留为现金,不替它买其他股票。
|
||||
- 同时刻按真实序号,输入数组顺序不能改变结果。较晚才生效的零仓位或恢复不得倒改早先结算;Restore覆盖旧人工限制,但不代表强制100%仓位。旧日级控制保留日级粒度。
|
||||
- 没有人工限制、恢复跟随或非零且未排除该证券时,保留原再投模型,不对价格、手续费或分红金额另加比例计算。
|
||||
- 分红到账、实际成交、送转/换股等既有金融事实不会因0%被抹掉。0%停止的是可选新增分配,不伪造清仓或强制卖出已有/T+1持仓。
|
||||
|
||||
正常结算与迟到回报经济重放使用同一控制判断,控制源显式传递,不能只在策略下单层截断。日志包含 `runtime_zero_exposure` 或 `runtime_zero_allocation`、生效时间/序号以及 `cash_retained=true`。
|
||||
|
||||
## 金额口径
|
||||
|
||||
原100股×8.95元的账本已经扣895元,但新成交记录的浮点乘积可能输出894.9999999999999。现在记录与现金扣账使用同一个微元金额,输出895和-895;保留原价格、股数、零费用和旧历史结果,不将显示尾差当成真实资金差额。
|
||||
|
||||
## 验证和边界
|
||||
|
||||
新增六项专项:有效0%、无控制的原模型、时间/序号/旧日级/恢复组合、逐股0和排除、迟到权益重放、无用价格不查询且坏现金仍原子失败。清仓0%样例最终现金49998、持仓0;没有0%仍100股、8.95、零费。额外实际买入迟到的样例,不掩盖真实1000股持仓,及时/迟到最终现金都为41047,权益现金校正1050,无可选再投。
|
||||
|
||||
本机Core919、Trading625、Runner463/API129全量通过,原9/63/16项ignore不计。没有修改UI、在线配置、账户、通知或交易路由;没有进行新的私有PG、实际Source/Runner、生产页面或券商委托验收。本修复针对经审计人工控制,不提前执行策略表达式来猜测其意图。
|
||||
|
||||
Source d5明确冻结保持。仍需完成正式换股字段/范围闭包、在线转换事实及重建、旧目标和活动单边界、其余生命周期/ETF矩阵与真实Source/Runner联合验收。Linux用新快照独立验证,不复用上一轮收据;未建release/tag或重启生产。
|
||||
Reference in New Issue
Block a user