164 lines
12 KiB
Markdown
164 lines
12 KiB
Markdown
# 三源合议阶段评审(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》。
|