tradingSystem/docs/每日选股计划完善方案与开发规格_2026-10-15.md

173 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 每日选股计划完善方案与开发规格
2026-10-15,北京时间。用户已批准三仓联动实施。本文是本轮开发、验收和接续入口。
## 目标与边界
统一研究依据、候选排序、建仓优先级和复盘记录。保留候选准入、线上参数和交易职责。
盘中新评析自动发布完整修订版。自主提议采纳前重核,排名变化本身不撤销提议。
基座提供研究,桥形成计划,PMS 管组合与执行。修订不调用模型。
## 实现契约
- 计划保留原字段;schema_version=2,decision 包含 id、parent_id、cutoff_at、input_hash、params_hash、reason。plan_version 仍为代码版本。
- 每行新增 research_rank(全量顺序)、research、review_ref;展示裁剪不能改写 research_rank。
- 采集输入与确定性装配分离。输入、有效配置、全量输出一起归档。相同内容幂等;文件锁串行发布,原子切换最新指针;晨版固定为首版。
- GET /plan 支持 decision_id,只读发布物。历史缺档明确报错,不以当前来源重构。旧快照可读但注明追溯不完整。
- 07:20—15:10 北京时间交易日每五分钟 plan-refresh,只更新评析与区制。晨版缺失不代造。08:45 区制更新同样发布版本。
- 修订失败保留旧完整版本;已识别的变更股票列入 pending_codes,PMS 暂停其新增自主提议。GET 不做重装配。
- 基座报告按内容指纹保存,最新索引保持原结构。report_version_url 固定内容;旧报告不伪造归档引用。
- PMS 保存 received(收到)、consumed(实际筛选消费)、rechecked(采纳核验)三类记录。后两类记录有效参数、实际顺序、逐票过滤原因与上下文指纹。动作账本保留决策及消费引用。
- 自主扫描继承 selection_rank;现有信号优先仍生效且记原因。命令驱动保留原分配规则并记录来源。
- 自主提议转指令前核对版本;资格、风险、仓位依据变化重新走现有评估,旧批准不复用。仅顺序变化可继续。未知当前版本守成。人工页面版本不匹配返回冲突与新提议。
- 研究增加预期差、周期、材料期、材料数、未知问题、数字核验、论点变化和验证事项。自然语言不自动转交易触发器。
- 复盘读取晨版与真实消费记录。缺档与重构不混入真实效果统计。旧收益口径和期限保持。
## 验收预判
1. A 优先于 B 且仅一名额时产出 A;信号插队有明确原因。
2. 好转差时全出口同步,旧版字节不变;相同输入不重复发布。
3. 同强度证据与无主题裁剪确定;全量名次不随展示参数改变。
4. 历史不含未来评析,当前参数不改变历史消费名单。
5. 提议排名变化、资格失效、仓位缩减、版本缺失和并发采纳逐项测试。
6. 发布中断、重复触发、并发区制更新、失败恢复和重启恢复不破坏旧版。
7. 缺新增字段兼容;修订零模型调用;普通查询不重装配。
8. 两端页面守卫与浏览器验证通过。
## 交付与运行边界
四批为确定排序、不可变版本、消费与重核、研究与页面。先兼容读取,再发布,最后开启修订。
本地验证不能代替部署验收。目标时延十二分钟,需上线测量。10-15 用户确认当前即为模拟仓,取消额外五个交易日观察;首个完整晨版通过后启用修订及重核。
容器与生产操作另按授权边界执行。避开 06:10 及 07:10 窗口。
版本至少保存一百二十个交易日。被未结束提议或持仓引用的记录继续保留。
本轮初始记录为未部署;当前已部署,五日等待条件已由用户取消。验收实测在文末与交接追加。
## 开发人员实现说明
### 第一批:确定性与顺序
桥的 `plan._evidence` 在同强度证据后按目标名、来源数、市场统计与日期稳定排序;卡片最终以代码收尾。
`pick_rows` 与 PMS `select_candidates` 均只对明确主题应用主题限额,无主题不构造共同的行业桶。
有效排序开关仍从原配置读取;PMS 筛选结束写 `selection_rank`,动作引擎按此序逐只扣名额和资金。
既有盘中信号优先在它之前,写 `execution_rank/priority_reason`。命令规划保留原命令、白名单和分配次序,
把来源及最终顺序写入命令 progress,再按 plan_id 传到指令 progress 与执行账本。
### 第二批:固定输入、发布和恢复
`plan_inputs.Bundle` 在来源函数边界录制实际结果和错误,并使用 ContextVar 隔离装配。
输入支持 DataFrame、Series、日期、Decimal、集合及缺失值;归档 JSON 可重放。
重放禁止缺项回源,即使上层捕获异常,退出重放作用域时仍会报错。有效业务配置同步冻结。
晨版评析按带时区 cutoff_at 过滤;它与行情 date 独立,因此可以使用今日盘前已知材料。
`plan_versions` 用进程间文件锁覆盖采集至发布。文件路径为:
- `versions/<行情日>/<decision_id>.json`:完整计划、实际输入和有效配置,只追加。
- `plan_<行情日>.json`:原有兼容入口,完整写入临时文件、fsync 后原子替换。
- `versions/<行情日>/morning.json`:首个成功发布版本;中断缺失时沿已发布父链恢复。
- `versions/<行情日>/health.json`:检查时刻、待核验股票和错误原因。
版本身份包含输入、参数、代码版本、行情日和父版本。同有效输入不重复发布;A→B→A 保留三个实际版本。
最新入口带已发布祖先标识,查询固定版本不需要逐次读取整条历史。未切换成功的孤立文件不能对外查询。
Markdown 兼容文件从已发布 JSON 派生并标明决策版本;写入失败不回滚已发布 JSON,下一次发布可恢复。
普通查询只做固定版本读取和展示裁剪。`PLAN_FROM_SNAPSHOT` 的旧“回落现算”语义废止;
`PLAN_REVIEW_SOURCE=live` 也不再允许用当前研究伪造历史。保留两个配置名称用于旧配置兼容。
`plan-refresh` 是 XXL 白名单里的独立步骤,不加入晨间默认三步。调度平台每五分钟触发,
函数再核验北京时间、交易日和当日晨版。时段为 07:20 至 15:10(含端点);日历依赖 chinesecalendar>=1.11,
本地已验证其 2026 年工作日与国庆休市读数。08:45 `regime-append` 走同一锁和发布入口。
只替换新评析及区制,其余来源使用晨版冻结值;修订不写日频逻辑状态表、不重投评析目标、不调用模型。
读取评析前标记观察范围待核验,来源失败保留该标记;成功后仅对实际变化的票保留,发布完成后清除。
桥缓存键包含决策版本和修订状态。PMS 最新计划缓存不超过五分钟;基座最新计划代理缓存一分钟,
指定版本代理可长缓存。目标预算为检查等待五分钟、消费等待最多五分钟,余下两分钟供装配及传播,
十二分钟是待生产验证的目标,不是本地性能结论。
### 第三批:消费记录与采纳核验
复用 `pms_plan_snapshot.meta_json/roster_json`,消费指纹含决策版本、有效筛选参数、持仓与黑名单上下文、
实际顺序和逐票过滤原因;正常展示预览不记作实际消费。消费留痕失败仍可展示,但不能新增自主提议。
取消按行数删除的所有调用,旧清理函数也改为不删除;当前保留全部记录,满足至少 120 交易日及在用引用保留。
后续若增加容量治理,必须证明交易日水位与引用保护,不能恢复旧 200 行截断。
`PMS_PLAN_VERSION_RECHECK` 为新增发布控制,默认 False。启用后自动采纳和人工采纳 OPEN 均强制刷新计划核验。
仅排名变化保留提议;复核不再应用 top_n 和主题展示限额,但原档位、风险、黑名单等资格检查仍保留。
研究、风险或仓位参数变化时,以当前组合重新走 `_scan_open`、合议、强制重新研判、建议数量及规则闸,
排除原提议自己的在途占用;人工提议更新内容并产生 proposal_revision,原批准不能沿用。
持仓数量、可用资金、行业归属和其他在途承诺变化也会使旧数量依据失效。重新评估时按已有 force_refresh
接口要求决策系统重新回答,遵守其原有强制次数预算;不能复用股票/动作缓存中的旧批准。
数据库用 WAIT_USER 状态与原 hard_numbers_json 的条件更新拒绝并发重复采纳和旧内容确认。
版本不可用、资格失效或重评未通过时保留待确认提议并给出原因,不产生新的自主买入指令。
已落指令仍沿原执行终检和风控,不因研究名次变化自动撤单或卖出。
复盘主表固定首个成功晨版;日频“交付名单”使用当日最后一条真实消费的已记录顺序与参数。
新增 `版本消费对账_<日期>_<口径>.csv` 单列所有晨版、修订、消费及核验记录,关联父版本、原因、
消费参数、过滤项和追溯资格。盘中多版本不当作多个独立交易日加权。缺档和旧名册排除真实效果统计,
记录覆盖率;既有五、十、二十日观察及执行账本口径保留。
### 第四批:研究信息与报告引用
基座沿用 company_review_runs.summary,新增 review_ref、report_version_path;不改表、不改质地合成。
报告 Markdown 与侧车 JSON 的内容指纹决定对象路径,先保存两种对象,再更新最新索引。
`GET /company/{code}/review?ref=<指纹>` 只读固定对象;无 ref 的最新报告入口保留。
桥透传已有预期差、周期、材料期、数量、未知问题、核验信息与报告生成时刻,计划行保存冻结研究摘要和差异。
来源未给出的日期与阈值保持未知;摘要不冒充历史完整报告。
基座今日页先取计划,再按该 decision_id 取判决。PMS 候选、提议和持仓页面展示版本、原因、
论点、反方论点、材料与报告时间、待核验事项;独立持仓研究另带 observation_at/scope,不能冒充计划版本。
完整指纹保留在详情。报告查询只接受合法指纹,并从已知基座地址取得指定版本。
## 五处登记与运行入口
本轮没有新表。新增任务的存储、调度、手工入口、日检和台账分别为 `plan_versions.py`、
`xxl.py` 的 plan-refresh、`run.py plan-refresh`(及 POST /plan/refresh)、`plan_health.py`(及 GET /health),
桥决定台账 064、PMS 决定台账 018 与同名交接文档。
```bash
# 桥机 · 已确认的桥容器内 /app;部署批准之后才执行,date 不传自动取最新已发布日
python run.py plan-refresh
python plan_health.py
```
平台入口仍是 `/api/v1/xxl/daily-build?steps=plan-refresh`,使用既有 X-Job-Key 鉴权;
实际平台任务为 XXL 137“每日选股计划五分钟修订”,已创建但停止,首个完整晨版通过后启用。日检只读文件,0 正常、1 旧版/待修订/修订检查超十二分钟、2 缺档或结构损坏。
时段外不把停止检查误报成故障;窗口内没有今日晨版也会提示。
## 本地验收与分批上线
四批本地实现及离线、假数据页面验收已完成。10-15 用户批准部署后,基座、155 桥和 155 模拟 PMS 均已部署,
桥最终镜像 33 组断网契约测试通过,11:28:51 完成重建。具体提交、参数和实测见 `交接_每日选股计划完善_2026-10-15.md` 末节。
上线顺序:先基座版本报告与 PMS 兼容读取、留痕;再桥新版发布并核验首个晨版;最后配置五分钟修订任务,
核验传播正常后只在已确认的模拟实例开启 PMS_PLAN_VERSION_RECHECK。不能替用户切换原排序开关、
档位白名单、策略阈值或自动扩大仓位。桥 requirements 更新需要纳入镜像;基座后台代码必须四 worker 一起换,
前端必须重建;这些容器操作仍需用户同意。实际机器、容器名及实例前缀部署前按各仓现行运维文档只读确认。
10-15 已获得本次容器操作批准;不把这次批准延伸为以后维护的常设授权。用户另批准补齐旧排序配置,
桥实际为 PLAN_RANK_AXIS=transmission、CARD_SORT_BY_QUALITY=0,保持原行为。今天旧计划字节不变。
下一交易日 10-16 07:25 由 Codex 心跳 automation-2 核验首个完整晨版;通过后启用已经创建且停止的 XXL 137,并打开模拟仓提议重核。额外五日模拟观察已取消。
按首版与后续实际修订事件记录(不再要求连续五个交易日):晨版与修订版本、输入及配置指纹、评析到达/发布/消费三个时刻、
消费顺序、信号优先原因、待核验股票、重新确认案例、失败恢复及重复指令计数。
目标为同版内容一致、旧版不变、正常传播不超过十二分钟、无并发重复指令。生产故障恢复与真实时延均待判收。
回退优先暂停平台 plan-refresh 并关闭新核验控制,保留版本、报告对象与账本;继续提供最后一份完整计划。
禁止把回退解释为删除历史或恢复查询时局部覆盖评析。
## 10-15 补充决定
用户取消额外五日模拟观察,未取消具体技术验收。任务 137 以 A股交易日时间段模式配置 07:20—15:10、300 秒,
当前停止;07:10 与 08:45 原任务保持。首个完整晨版通过后直接按已授权范围启用修订及提议重核,失败则保留当前有效版本并修复。
Codex 心跳 automation-2 负责 10-16 07:25 的接续检查和必要后续验证,不能当作五分钟业务调度。
PMS 三项旧对账差异的防双记修复 e9afc7a 已部署;旧批次成本、盈亏及执行进度仍需有证据的独立修复,不把日终数量归零差额当历史修复完成。
详细实例、测试、证据快照及待判收项见同日交接最后一节。
## 10-15 历史修复补充规格与判收
历史修复遵循“完整备份—逐笔编译—前置原行比较—事务写回—独立读回”,不能只调整持股差额。真实买入须以数量、价格、父指令和入账时间唯一对应批次;重复汇总批次须有下游汇总证据;逐笔数量须等于子单累计数量。卖出沿既有批次核销次序重建成本与盈亏,费用缺失不伪造。所有 SQL 维持单表守卫。原误判完成但未足量的父指令暂停剩余执行,不自动复活旧单;真实超额成交保留事实。
155 已部署 0871885 并恢复三票数量、成本、盈亏和 24 条父指令进度。134 笔成交、122 行原值审计,重复执行幂等,独立读回无差异。本地与候选镜像全部 44 批通过。费用、历史峰值、已删除旧轮次批次与历史全组合绩效的限制见同日交接最后一节。原始成交、回放游标和历史报表不改写。明日 07:25 首晨版核验和通过后启用 XXL 137 / 提议重核的安排不变。
最后补充:已恢复的指令均价有固定观察时点。未来新成交使旧均价失效,原修复金额保留于版本化审计,避免只更新执行量却沿用旧均价。该补齐为 a56dac5,22 个专项回归及完整 44 批本地和候选镜像测试通过,12:50 最终部署与再次读回通过。