154 lines
13 KiB
Markdown
154 lines
13 KiB
Markdown
# 每日选股计划完善方案与开发规格
|
||
|
||
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. 两端页面守卫与浏览器验证通过。
|
||
|
||
## 交付与运行边界
|
||
|
||
四批为确定排序、不可变版本、消费与重核、研究与页面。先兼容读取,再发布,最后开启修订。
|
||
本地验证不能代替部署验收。目标时延十二分钟,需上线测量。模拟实例需观察五个交易日。
|
||
容器与生产操作另按授权边界执行。避开 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 鉴权;
|
||
实际平台任务尚未创建。日检只读文件,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,保持原行为。今天旧计划字节不变。
|
||
下一交易日首个完整晨版仍需核验,随后建立 XXL 五分钟任务并启用模拟仓核验;自动修订、核验和五日观察尚未开始。
|
||
|
||
模拟实例连续五个交易日每天记录:晨版与修订版本、输入及配置指纹、评析到达/发布/消费三个时刻、
|
||
消费顺序、信号优先原因、待核验股票、重新确认案例、失败恢复及重复指令计数。
|
||
目标为同版内容一致、旧版不变、正常传播不超过十二分钟、无并发重复指令。生产故障恢复与真实时延均待判收。
|
||
回退优先暂停平台 plan-refresh 并关闭新核验控制,保留版本、报告对象与账本;继续提供最后一份完整计划。
|
||
禁止把回退解释为删除历史或恢复查询时局部覆盖评析。
|