tradingSystem/docs/三源合议阶段评审_2026-09-14.md

164 lines
12 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-09-14
> 评审对象是《技术面接入与三源合议方案_2026-09-11》落地之后的代码、文档与运行状态。
> 写法遵守 `.claude/output-styles/readable-chinese.md`。
> 读完第一到第六节就知道现状与问题。第七节是结论。
> 下一阶段怎么做展开在《下一阶段开发方案与规格书_2026-09-14.md》。
---
## 一、评审做了什么
1. 读了方案、进度交接、开发节点记录最近六条、复盘决定台账 001 到 011、总览文档、真实仓部署方案、九月十日的交接文档。
2. 逐行读了合议的四个纯逻辑模块、装配服务、技术面取数服务。也读了动作引擎与提议服务里的全部接入段落。
3. 在开发机用上一次会话留下的虚拟环境跑了全量单测。
4. 在模拟仓 155 只做了只读检查:代码版本、镜像指纹、容器状态、关键开关的实际值、技术面映射、部署之后的提议。没有改任何东西。
5. 看了两个兄弟仓库的最近提交与台账。一个是选股系统,一个是决策系统。目的是确认跨系统的事项各在什么状态。
## 二、一句话结论
方案的五个工作包里,工作包一、二、三、五已经做完,并在 155 真机判收。代码质量与护栏纪律达到本项目的标准。
但合议这条链是周五收盘后部署的,今天才是它跑的第一个交易日。台账 006 到 011 要求的复核一个都还没到期。而且系统目前没有留下能做复核的读数。
此外,方案里有一块设计没有落地,就是盘中确认。有一块在另一仓库等审批,就是选股打分。页面有三处收尾。代码有四个小的加固点。
建议下一阶段以「观察、补读数、收尾」为主,不上新的大功能。
## 三、对照方案的完成度
| 方案里的条目 | 内容 | 状态 | 真机判收 |
|---|---|---|---|
| 工作包一 | 技术面取数落表、相位合成、映射、三个接口、调度位、页面三项 | 完成 | 真机见过。映射覆盖、分页拉全、两个真机坑已修并加哨兵 |
| 工作包二 | 三源合议纯逻辑、装配、仓位矩阵、接入下单链路、增持门、质地排序、提议卡合议行 | 完成 | 真机见过试算:三只看空候选被跳过、一只等开口。合议行与增持门的实弹还没见过 |
| 工作包三 | 转空自动离场、策略票判据、跟踪止盈 SAR 线、弱基本面紧止盈 | 完成 | 真机见过部署与试算。实弹一次都没发生过 |
| 工作包四 | 选股系统打分改质地调整分 | 未做 | 在另一仓库,等单独审批 |
| 工作包五 | 台账 006 到 011、README 调度总表、接口契约技术面一节 | 完成 | 不适用 |
| 第三节的盘中确认 | 09:45 到 14:30 放量确认、收口当天突破就进候选 | 未做 | 无 |
| 工作包一第 6 点里的三处页面 | 候选栏质地与技术芯片、管理视图持仓总览研究面列、单票抽屉三源合议四芯片 | 未做 | 无 |
## 四、真机读数2026-09-14 上午 08:55模拟仓 155只读
运行状态如下。
| 项目 | 读数 |
|---|---|
| 代码版本 | 969d189就是远程的最新提交 |
| 镜像指纹 | 与工作树一致d8ee35a4dfed |
| 容器 | pms-web 健康pms-worker、pms-beat、pms-ws 都在跑,已运行两天 |
| 容器内时间 | 北京时间,与开发机一致 |
| 技术面读数日 | 20260911也就是上一交易日 |
| 技术面行数 | 4993 |
| 技术面映射 | 08:40:06 重建153 只,全部新鲜,没有错误 |
| 映射里的立场分布 | 看多 5 只,中性 101 只,看空 47 只 |
| 部署之后的新提议 | 零条。评审账本最后四条都是 09-11 上午的,不带合议六键 |
| 转空去重集 | 空,说明还没处理过任何一次翻空 |
关键开关的实际值如下。
| 参数 | 实际值 | 说明 |
|---|---|---|
| PMS_DISPATCH_MODE | ws | 真向模拟 QMT 发委托 |
| PMS_AUTONOMY | full | 持仓自主动作自动执行 |
| PMS_OPEN_AUTONOMY | propose_only | 新建仓交人 |
| PMS_TECH_ENABLED | 开 | 技术面总闸 |
| PMS_CONSENSUS_ROUTE | 开 | 合议参与分流 |
| PMS_TECH_GATE_INCREASE | 开 | 持仓增持门 |
| PMS_PLAN_RANK_BY_QUALITY | 开 | 候选按质地排序 |
| PMS_TECH_EXIT_AUTONOMY | full | 转空离场自动执行 |
| PMS_STRATEGY_ENABLED | 开 | 与 09-11 节点写的「未开」不同 |
| PMS_OPEN_REASK_ENABLED | 开 | 代码默认值就是开 |
| PMS_FUND_REQUIRED | 开 | 无买方评析不建仓 |
| PMS_TOTAL_SCALE | 2,000,000 | 总规模 |
两点要特别说明。
第一策略层总开关现在是开的。09-11 收盘后的节点写的是「155 上没开,代码已部署但休眠」。现在读到开,说明 09-11 傍晚之后有人在页面上把它打开了。如果是有意的,那么今天 09:40 那一跳就是工作包三后两部分第一次实弹运行。后两部分指 SAR 止损线刷新与弱基本面紧止盈挂载。
第二,解锁重问的总开关是开的,因为它的代码默认值就是开。也就是说,九月十日交接文档第五节写的「第一段尚未开始」,其实从 09-10 部署起就已经在跑。到今天收盘它就跑满三个交易日,第一段的复核可以做了。
开发机全量单测的结果:三十一批里三十批通过,第二十四批有一例失败。失败原因是那条用例把「今天 09:35」的告警当作已陈旧来断言而我在 09:0x 跑,年龄算成负数。服务器上都是收盘后跑测试,所以从没撞上。这是用例依赖墙上时钟,不是代码问题。
## 五、代码评审发现
按「先要紧后次要」排。每一条写清楚在哪里、影响什么、建议怎么办。
### 发现一、设计没有落地的一块:盘中确认
方案第三节最后两段写了盘中确认。方案第六节列了它的三个参数,分别是量比阈值、收口当天突破的开关、确认时段。这三个参数在代码里没有任何读取处,也没有登记。全仓库搜不到。
影响有两条。一,处在收口等待的票只能等到次日 06:30 拉到新读数才可能变成开口。「今天现价站上昨日上轨且放量,当天就视为开口进候选」这一条没有。二,昨天已开口的票不检查现价是否低于当日均价,也不看量比。
技术面对入场时点的盘中判断全部缺失。技术面这一票现在完全是昨夜数据。建议下一阶段补上。规格见规格书的盘中确认包。
### 发现二、观察读数没有留痕,台账的复核做不了
台账 006 到 011 的「预期」都是量化读数。技术面无读数占比要低于百分之三。每天被等技术面开口拦下的票要在一到十五只之间。转空退出每周零到三条。合议方向与人的判断对不上的要逐只记。
现在这些数只存在于每分钟扫描的返回值与页面即时快照里。它们不落任何表,日报也不含。复核日期到了拿不出数。
这是本次评审认为最该先做的事。规格见规格书的观察读数包。
### 发现三、转空去重集的清除条件过宽
位置在 `app/services/proposal_service.py` 第 150 到 154 行。去重集的作用是同一次翻空只处理一次。每轮扫描前,代码把映射里 SAR 方向不是「空」的代码从去重集里去掉。
问题在「不是空」包含了「映射里没有这只票」。某只持仓票某天缺读数,比如停牌,或者决策系统那晚漏算,它会被当成翻多而清出去重集。如果同一轮另有别的票处理了转空离场,清过的集合会被写回。第二天它的读数回来、翻空仍在两天内,会再减一次。
概率低,后果是多减三分之一。建议改成「映射里明确为多」才清除,缺读数保留。改动两行,加两例单测。
### 发现四、持仓行的择时票没带盘中转多留痕
装配服务给持仓行装配时,转多留痕表恒为空。候选行则从自带的买入信号取时刻。影响只在增持门的方向判断,程度小。规格书的加固包里作为小改动列入。
### 发现五、方案承诺的一个开关没有登记
方案第六节写了 PMS_CONSENSUS_WEAK_CONFIRM含义是只有一方表态时交人。代码里没有这个参数行为写死为交人。要么登记并让合议路由读它要么在方案文档里划掉。建议登记默认开。关掉时单方表态放行。
### 发现六、单票研究面接口只给了技术面一块
接口是 `GET /api/research/{ts_code}`,位置在 `app/web/main.py` 第 740 到 756 行。它的基本面、择时、合议三块都是空占位。页面单票抽屉那一节的标题也只写「研究面 · 技术面」。方案要求的是「研究面 · 三源合议」一节四枚芯片,点开能看全文。
### 发现七、页面还有两处没做
候选栏每行的质地芯片与技术芯片没做,只做了「等技术面开口」处置词。管理视图持仓总览只修了「证据列印两遍」并加了评析报告链接,研究面列没加。
### 发现八、策略层的网格买入腿不受技术面的门(要拍板)
动作引擎的三道增持门只管常规持仓。挂了交易方案的票,它的加仓腿由策略层管。策略层现在只认两样:决策系统风控预警的暂停买入,以及宏观闸。它不认技术面看空,也不认合议看空。
方案没有要求这一点,所以这不是缺陷,是一个未决的设计问题。要拍板:技术面看空时,策略票的网格低吸要不要也停。
### 发现九、技术面立场整体偏空,入场会明显收紧
今天 153 只相关票里,技术面看多只有 5 只。按三票多数的规则,技术面这一票绝大多数时候是中性或看空。看多要求 SAR 为多且多空布林线不在空头区,或者 SAR 两天内刚翻多。其余全归中性或看空。
这可能是市场状态,也可能是相位表偏严。台账 006 说阈值不按复盘读数回调,要回台账。建议先用观察读数包的数据看满三个交易日再议,现在不调。
### 发现十、文档与工作区的四处小事
1. README 第 173 到 207 行仍写「当前仍是影子模式」「依然没有任何系统会自动下单」。模拟仓从 8 月 3 日起就是 ws 模式,已经发出一百九十六笔真实委托。九月十日交接第九节已经提出,等拍板。安全相关的说法过时,比一般文档过时更危险。
2. CLAUDE.md 在工作区里是未跟踪状态,没有入库。
3. 第二十四批那条依赖墙上时钟的用例要改成相对当前时刻构造。
4. 真实仓 188 的代码停在 51bd6dc落后六十九个提交。差异里有两张新表分别是净值快照表与技术面日表。有两个新调度位分别是 06:30 拉技术面与 15:20 净值快照。还有四十多个新参数。新参数的默认值是按模拟仓定的:转空离场默认自动执行,合议分流默认开。追平部署前必须先有一份「真实仓初始参数清单」。否则一部署就把 full 档位的自动离场带进真实账户。
## 六、做得好的地方
1. 每一处接入都守住「开关关掉逐字回旧」,并且先写这条单测再改。第二十九批与第三十批每一组都有这样一例。
2. 六个合议硬数字键不进送研判白名单,有机器证明,不靠口头。
3. 「无读数等于弃权,绝不折成看空」贯彻到每一层。相位合成、基本面、择时、合议、增持门、转空离场都是这样。
4. 两处脱库单测测不到的真机坑都补了哨兵。一处是 upsert 的绑定参数,一处是分页误判最后一页。
5. 台账 006 到 011 与方案逐条对应。README 调度总表与接口契约同步更新了。
6. 纯逻辑层零外部依赖。相位表的实现与方案第三节的表逐格对应,读起来能对上。
## 七、评审结论
进入「观察与收尾」阶段。下一阶段不上新的大功能,做四类事。
1. 补观察读数与复核工具。
2. 补盘中确认。
3. 页面与接口收尾,加四处加固。
4. 按顺序把已写好的功能分段启用,并为真实仓追平准备清单。
选股打分等审批。真实仓追平等 QMT 侧。具体见《下一阶段开发方案与规格书_2026-09-14.md》。