akg-factor-bridge/docs/个股深度评析接入方案_2026-09-09.md

188 lines
22 KiB
Markdown
Raw Normal View History

# 个股深度评析接入方案2026-09-09已批准
> 接《个股深度评析方案_2026-09-09》第一批。批准后落盘为两个仓库的 docs/个股深度评析接入方案_2026-09-09.md台账记 053。
> 09-09 三条拍板已吸收:**公司质地参与决策,三处全开**(逻辑状态第五路含存疑触发、候选卡"质地差降一档"、评议文字送新建仓研判);**云端评议每晚上限二十家自动跑**;对话入口的 skill 以后再说。
> 用户 09-09 原话:"盈余质量是不是太狭隘……这部分实际上也是主观选股观点的主要部分……不要浪费我们这个阶段的成果。"这份方案照此把公司质地当成主观选股的第四条证据线,不当一条风险文本。
---
## 零、一句话
主观选股是行业逻辑、公司质地、估值预期差、时点四件事的合成。前三件里公司质地一直空着,第一批把它算出来了;这一步把它接进系统:**质地由代码合成,进逻辑状态、进判决收敛、进 PMS 提议卡与持仓页、进复盘分组;云端大模型做买方式评议,写论点、反方、失效条件,给人看、送研判,不定判决。**
---
## 一、这一步买什么
1. **公司质地成为第四条证据线。** 逻辑状态原有四路(研报论断、产业研判、券商行动、公司事件缺失),加第五路"公司质地";候选卡判决收敛加一条"质地差降一档"持仓票财报期一换质地转差PMS 现成的停增持与强制确认自动接上。
2. **买方评议补上研究深度。** 云端评议按论点卡七字段出论点、证据编号、催化剂与时间窗、预期差、失效条件、置信度、版本,外加逐视角复核、反方论点、无法判断清单。一致性检查表第七行"研究深度"由此有了数据源。
3. **复盘能回答"质地有没有用"。** 周报按公司质地四档分组,两周后决定要不要把门槛再往前提。
---
## 二、原则
- **质地由代码合成,模型只写字。** 十个视角的判据归三类再合成一档;评议不参与合成。
- **加,不改。** 第五路是并列新增;判决收敛只降不升(质地好不升档,证据不足不惩罚);三处各有开关,记台账;评析表、判决三门槛、择时决策系统一个不动。
- **描述性估值。** 估值与预期差单列"贵、中、便宜"只展示,不进质地、不进判决。
- **评议不能引入表外事实。** 匿名化(不给公司名与代码)、证据只认编号、数字逐个回查、未核比例超三成记半成品。
- **费用有护栏。** 每晚上限二十家,单家输出上限,截断不重试,索引表记用量,日检报读数。
---
## 三、公司质地怎么合成(代码,一次定死,单测钉住)
十个视角先归三类,每类评好、中、差、证据不足(该类能判的视角不足一个即证据不足):
| 类 | 用到的视角与指标 | 好 | 差 |
|---|---|---|---|
| 回报与护城河 | 巴菲特与芒格、特里·史密斯、彭曼、杜邦 | 至少两个视角为好且没有差 | 至少两个视角为差 |
| 盈余质量与财务安全 | 盈余质量三分、F 分数、薛云奎财务栏 | 盈余质量三分为好且 F 分数不低于 6 | 盈余质量三分为差,或 F 分数不高于 3 且应计比率超过 10% |
| 成长与含金量 | 薛云奎经营栏与业绩栏、收入五年复合增速、经营现金流对净利润 | 经营栏为好、业绩栏不为差、增速不低于 8%、现金转化不低于 0.8 | 经营栏为差,或现金转化低于 0.5 |
合成:任一类为差则质地差;三类都不差且回报类为好则质地好;两类以上证据不足则质地证据不足;其余为中。估值单列:滚动市盈率十年分位与隐含市盈率对一致预期中位,分贵、中、便宜,只展示。
三家试跑公司按这套规则:四方股份三类都好,质地**好**,估值贵;澜起科技回报类中(巴菲特差、特里好)、其余中,质地**中**,估值贵;立讯精密 F 分数差但盈余质量好、应计 0.2%,不触发差,质地**中**,估值中。三家都不会因为这一步被降档,第五路只有四方股份给出"向好"。
---
## 四、接进决策的三处(三处全开,各有开关)
**逻辑状态第五路"公司质地"(选股系统 logic_state.py。** 信号:好为向好,中为平稳,差为转弱,没报告、证据不足或报告陈旧(最新期比当前财报期落后一期以上,或运行日超过 120 天)为缺失。速度归"慢":单独不能定态,逻辑强化仍必须含研报论断或产业研判那一路。存疑触发:质地差且盈余质量类为差,与券商下修、论断翻转并列进 DOUBT_TRIGGERS。截止日用报告运行日。开关 LOGIC_PATH_COMPANY默认开。
**候选卡判决收敛card.py。** 三门槛一确认三风险不动;在判决算完之后加一条:质地差且判决为候选,降为关注交人裁决,依据句写"公司质地评为差:盈余质量类差(应计 x、F 分数 y";质地好不升档;证据不足不动。开关 CARD_COMPANY_QUALITY_GATE默认开。
**评议文字送新建仓研判PMS judge.OPEN_JUDGE_KEYS 加 company_review_text。** 照 09-02 送判决与理由的先例:送的是买方论点一句、置信度、失效条件,让研判拿自己的量价结论对照;质地档与评价计数也随硬数字进提议卡与账本。开关 PMS_JUDGE_COMPANY_TEXT默认开。
**持仓票。** 逐票逻辑状态接口随状态回 company_review 两键照安全边际的先例PMS 持仓页"证据还在不在"旁多一行"公司质地 · 失效条件"。财报期换后基座重跑报告,质地转差走第五路进存疑:停增持、强制确认,减持开关照旧默认关。
**复盘。** 周报候选单与档位表各按"公司质地=好/中/差/无"分组。
---
## 五、云端评议层(数据基座)
- 新模块 synthesis.py把侧车编号化成指标 [M..] 与判据 [C..],不带公司名与代码;一次调用 brain 档位(当前 deepseek-v4-proJSON 输出;三条纪律照环节评析的写法(截断不重试、非截断空答案只重试一次、单家输出总额上限)。
- 输出:逐视角复核(哪些判据在这家公司情形下失真,偏严偏松,还剩什么有效信息)、综合三句(回报来源、含金量、财务安全)、买方论点七字段(证据只写编号)、反方论点最多三条、无法判断清单最多六条。
- 后处理:编号回填、催化剂无编号改写为"无法判断"、预期不引一致预期编号记警告、字段截断、版本由代码填。
- 数字回查:文本里的数字逐个匹配允许集合(指标值的小数、百分数、亿元、万元、倍、阈值数、一致预期各档),年份与十二以内小整数白名单;未命中在报告里就地标记,未核比例超三成记半成品。
- 落地:侧车加 synthesis 键;报告第五段替换占位文字(段头写模型、版本、用量、回查结果,段尾编号对照表);索引表加 summary、brain_used、brain_status、synthesis_version 四列,摘要含质地档、三类评价、十视角计数、论点一句、置信度、反方一句、催化剂、无法判断条数、未核数字条数、报告路径。
- 指纹加评议版本:没评议的旧行开了开关自然重跑;评议成功后不重花钱;失败次日再试,同一家同一期失败三次放弃。
- 护栏:每晚上限二十家、每晚输出总额上限、单家上限;批任务按候选名次分配评议名额;索引记用量;日检加一行。
- 费用估算:输入约一万 token、输出两千到六千一家约 0.15 元、最坏 0.3 元;二十家一晚 3 到 6 元;一百二十家首轮 20 到 40 元,之后只随财报期与版本变动。墙钟每家一到三分钟,二十家在 00:45 到 05:30 窗口内串行跑得完。
---
## 六、接入后 PMS 的整体流程(以三家试跑公司为例)
**每晚 00:45数据基座。** 对当天候选名单前一百二十家跑报告:纯代码部分几秒一家;云端评议按名次给前二十家,指纹没变的不重跑。四方股份、澜起科技、立讯精密这类已有报告的票,只有财报期换或版本升才重算。
**每早 07:10选股系统。** 出计划时每张卡多三样:公司质地(四方好、澜起中、立讯中)、估值标签(四方贵、澜起贵、立讯中)、评议摘要(论点一句、置信度、失效条件、报告链接)。逻辑状态五路合成:四方股份第五路向好,若研报论断或产业研判也向好则逻辑强化,卡内序提前,判决不变;澜起与立讯第五路平稳,不影响。判决收敛:假设某只候选的质地评为差(盈余质量类差),判决从候选降为关注,依据句写明原因,交人裁决。
**每早 08:40PMS 拉计划)。** 候选照旧进建仓方案;关注强制人工确认;仅展示不出提议。提议卡上多一行"公司深度:好 4 中 3 差 1 · 论点:……(置信中)· 失效:下一期财报看经营现金流对净利润与毛利率 · 报告"。
**盘中(新建仓研判)。** 请求体多带评议一句与失效条件;择时决策系统的研判拿它与量价两个头对照后给通过、驳回或不可用。四方股份这类质地好、估值贵的票,研判可能给"通过但注意估值分位 92%";驳回行照旧记把握度。人在提议卡上看到质地、论点、反方、失效条件一起裁决。
**持仓期。** 每早逐票逻辑状态刷新,持仓页"证据还在不在"旁显示质地与失效条件。财报期换后,若某持仓票的质地从中转差且盈余质量类为差,第五路转弱达到存疑条件:停增持、新增仓强制确认,减持开关默认关;人在持仓页看到"公司质地转差:应计 x、F 分数 y"这句原因。
**周五复盘。** 候选单按质地四档分组读数;两周后拿读数决定要不要把"质地差降一档"升级成门槛、要不要开减持。
---
## 六之二、再进一步综合信息给出建议建仓方案09-09 用户追问后加)
可以,而且应该做,但分两层,落在两处,都不是数据基座。数据基座定过不给买卖建议;建仓是 PMS 的事,时点是择时决策系统的事。
**第一层规则合成的建仓建议PMS代码本方案第三段一起做。** 输入六样:公司质地(好中差)、估值标签(贵中便宜)、赔率与预期差、逻辑状态(成立强化存疑无法判断)、研判结论与把握度、定价状态与量价两个头。输出一份"建议方案"
| 情形 | 仓位档 | 分批 | 附加条件 |
|---|---|---|---|
| 质地好、估值中或便宜、逻辑成立或强化、研判通过 | 标准仓(现行 6% | 5 成、2.5 成、2.5 成 | 第二批要求二十日头不看空 |
| 质地好、估值贵 | 减半仓 | 两批各半 | 第二批等下一期财报失效条件未触发再加 |
| 质地中 | 标准仓 | 第一批只 3 成,余下两批各 3.5 成 | 后两批要求二十日头看多且定价状态不是高位兑现 |
| 研判把握度低或不可用、赔率低于 1 | 试探仓1% | 一批 | 只在人工确认后下 |
| 定价状态高位兑现 | 不变 | 首批推迟 | 等回撤到支撑再下第一批 |
| 质地差、逻辑存疑 | 不建 | — | 已在判决与分流里拦住 |
止损定性与风控卖出不动(那是设计内的自动止损);持有期限按质地写"长期持有类"或"事件驱动类",只作标签。这份建议先与现行机械方案并排显示在提议卡上;开关 PMS_PLAN_BY_ADVICE 打开后,建议方案直接作为提议的仓位档与分批(模拟侧,正式库不部署),账本记两份方案便于复盘对照。建议默认在模拟侧打开,两周复盘后看"按建议建的仓"与"按机械方案建的仓"的名单级读数再定正式口径。
**采纳之后,择时决策系统照旧参与每一批的下单时点,不参与仓位大小。** 现行链路不改提议采纳后PMS 按方案分批,每一批下单前都调择时决策系统的盘中择时接口(读昨夜支撑压力推出买入区间:支撑下沿百分之一到支撑加三成幅度),现价在区间内才下单且限价挂区间上沿,高于上沿不追、低于下沿不买,择时拿不到就退 PMS 内置口径;资金、上限、一手、可卖日这些硬检查留在 PMS。建议方案改的只是"建多少、分几批、加批要什么条件":后两批的附加条件(二十日头不看空、定价状态不是高位兑现、失效条件未触发)由 PMS 在每批触发前用最新一份昨夜结论检查过了再交盘中择时定时点。持仓期的止损止盈、关注条件仍是择时决策系统的。所以完整的分工是数据基座出质地与评议选股系统出判决与逻辑状态PMS 出建仓方案与建议档位,择时决策系统出每一批的时点与持仓期的风控。
**第二层研判写的建仓建议择时决策系统09-15 量价研判链判收后再做)。** 新建仓研判的输出多一个键:仓位倾向(标准、减半、试探、不建)、分批节奏、入场条件(价格区间、量能确认)、一句理由。它拿的是同一批输入加盘中量价,与规则版并排显示,分歧交人。观察期内不动那条链的提示词,所以排在判收之后。
**不做的。** 不让数据基座的评议给仓位与价格;不把建议方案接到正式库;不做回测挑参数,仓位档矩阵一次定死记台账,只按复盘读数换档位。
## 七、分批与判收
**第一段(数据基座,先于模型)。** 第一批五处小修(可得年份不足判"算不了"、删一季度失真的最新期现金流判据、盈利稳定改用年度每股收益、主营构成说明改为表头行取法、净现金公司回报率虚高加说明);质地合成模块与摘要;索引表新列;视角版本升级;单测。
怎么验:合成数据单测全绿;三家试跑质地档与本方案第三节一致。
**第二段(云端评议)。** synthesis.py、报告第五段、runner 接法、任务与接口参数、日检行、脚本 --with-brain三家试跑。
怎么验:三家评议的完成原因都是正常结束(不截断);数字回查未命中不超过一成;论点与反方每条带编号;催化剂三家都应是"无法判断";重跑不带 force 为指纹跳过;索引表记用量。人读三份评议,记"比代码汇总多说了什么"。
**第三段(选股系统与 PMS 接线,含建议建仓方案)。** 选股系统取数、卡上整句与短句、第五路、判决收敛、复盘分组、逐票接口回两键、单测PMS 解析、硬数字、送研判白名单、提议卡一行、持仓页一行、规则合成的建议方案(六之二的矩阵,模块 app/services/advice_service.py纯函数加单测、提议卡并排显示两份方案、账本记两份、开关 PMS_PLAN_BY_ADVICE 模拟侧默认开;接口容器重启与镜像重建经同意、避开开盘。
怎么验实时计划里三家的两键与质地档正确PMS 拉取解析到;送研判的请求体含评议一句;持仓页有那一行;提议卡有两份方案且仓位档与矩阵一致(用三家试跑公司各造一条提议核);复盘周报有分组行;全套测试通过。
**第四段(启用)。** 评议开关与每晚上限打开;次日核日检行、提议卡、账本。台账 053。
**判收。** 四条:一,候选名单里的公司报告与评议不落后最新财报期一个月;二,三处开关打开后一致性检查表第七行"研究深度"由不一致改为一致;三,两周复盘周报有质地分组读数;四,人读十份评议至少七份"比代码汇总多说了东西"。是否升级门槛、是否开减持,判收后另开拍板。
---
## 八、明确不做
不让模型定质地、不让评议改判决;不做规范性估值、不给目标价;不改三门槛与三风险;不动择时决策系统代码;不做对话入口 skill以后再说
---
## 九、风险
一,第五路把持仓票推进存疑会触发停增持:触发条件已收紧到"质地差且盈余质量类差",且减持开关默认关。二,评议截断:思考型模型的思考计入输出,上限先设 16k首晚截断率高再升到 24k。三报告陈旧财报期换后一个月内报告未更新即算缺失不拿旧质地当新证据。四基座与选股系统的时区夜间上限按最近二十小时计不按日历日。五一致性质地规则只在基座一处算选股系统只读结果避免两边各算一套。
---
## 附录甲 · 实现骨架(可不读)
**数据基座astock-kg。**
- `backend/app/analysis/company_review/quality.py`(新):`classify(lens_results, metrics) -> {overall, groups: {回报与护城河, 盈余质量与财务安全, 成长与含金量}, valuation_label, reasons}`;纯函数,单测钉住第三节的规则。
- `backend/app/analysis/company_review/synthesis.py`(新):`build_input(sidecar)`(编号化、允许集合)、`run(sidecar, client, ...)`(一次调用、三条纪律、后处理)、`numbers_check(obj, allowed)`;常量 SYNTHESIS_VERSION、系统提示词、上限。
- `backend/app/analysis/company_review/summary.py`(新):`build(code, period, quality, lens_results, syn) -> dict`,不超过 1.5 KB。
- `runner.py`:签名加 `with_brain`、`brain_client`;指纹加评议版本;夜间用量四道闸;落库带 summary 与四个新列。`report.py`:第五段按 synthesis 渲染,段尾编号对照。
- `company_review_store.py``ALTER TABLE ... ADD COLUMN IF NOT EXISTS summary JSONB / brain_used / brain_status / synthesis_version``brain_usage(hours=20)`、`latest_many(codes)`、`recent_codes(days, brain_only)``summary()` 多回评议读数。
- `lenses/graham.py`、`buffett.py`、`xue_siwei.py`、`penman.py`、`greenblatt.py`、`metrics.py`第七节第一段的五处小修REVIEW_VERSION 升到 2026.09-2。
- `workers/tasks.py``company_review(..., with_brain)`、`company_review_batch(..., with_brain=None, max_brain=None)`;环境变量 AKG_COMPANY_REVIEW_BRAIN默认关试跑满意后置 1、AKG_COMPANY_REVIEW_BRAIN_MAX20、AKG_COMPANY_REVIEW_BRAIN_TOKENS_NIGHTLY500000
- `main.py`:两个触发接口加 with_brain 与 max_brain新增 `GET /company/{ts_code}/review/summary`。`daily_check.py` 加评议读数。
- `scripts/company_review_run.py``--with-brain`
- 测试:`backend/tests/company_review/test_synthesis.py`(编号化稳定、数字回查八例、编号回填、催化剂改写、假客户端三种结局、报告第五段、摘要四态)、`test_quality.py`(三类合成规则与三家试跑读数)、`test_company_review.py` 补小修六例。
**选股系统akg-factor-bridge。**
- `sources.company_reviews(codes, *, read_pg=None)`:读 company_review_runs 最新 ok 行DISTINCT ON ts_code带 age_days 与报告链接;表读不到整体缺席。
- `card.company_review_view/short/label``card.judge` 末尾加质地差降一档(开关 CARD_COMPANY_QUALITY_GATE
- `logic_state.py`PATH_COMPANY、SPEED 慢、DOUBT_TRIGGERS 加一条、`from_company(review, ds)``plan._logic_inputs` 取数、`_logic_state_of` 装第五路(开关 LOGIC_PATH_COMPANY
- `plan.py`:卡与顶层行加 company_review / company_review_text / quality候选单表加"公司质地"列。`plan_review.py`:分组"公司质地=…"。`api.py` 逐票逻辑状态接口随状态回两键。
- 测试:`test_events_pricing.py::test_company_review`、`test_logic_state.py` 第五路与存疑触发、`test_card.py` 降档规则。
**PMStradingSystem。**
- `plan_feed.py``_company_review_or_none`、`_rows` 与 `select_candidates` 两键、`parse_logic_states` 收两键;`action_engine.eval_open` 硬数字;`judge.OPEN_JUDGE_KEYS` 加 company_review_text开关 PMS_JUDGE_COMPANY_TEXT`logic_state_service.decorate_positions` 加 company 块;`index.html` 提议卡一行、持仓页一行;`scripts/test_batch23_units.py``BIONIC_PMS_INTERFACE.md` 记新键。
**验证命令178容器内。**
```bash
docker compose exec -T -e PYTHONPATH=/app backend python /app/scripts/company_review_run.py --code 601126.SH --force --with-brain --print
```
预期:报告第五段带"云端评议"段头,论点与反方每条带 [M..]/[C..],数字回查未命中数为 0 或个位数,索引表新行 brain_status=ok。
## 附录乙 · 第一批小修清单(可不读)
- 格雷厄姆"盈利稳定"、巴菲特"每年不低于 15%":可得年份不足阈值时判"算不了history_short"。
- 薛云奎业绩栏删"经营现金流对净利润(最新期)",非年报期在数据说明里写明年初至今口径。
- 盈利稳定改用财务指标表年度每股收益为正的年数,重构表缺年度行不再断档。
- 主营构成说明改为"取表头行(营业收入合计)",两套分类相差的旧文字删除。
- 净现金公司在数据说明与彭曼、格林布拉特两个视角加"净经营资产回报率偏高"的说明。
## 附录丙 · 09-09 上线读数(可不读)
- 三家试跑:四方股份质地好、估值贵,评议 12,163 token、未核数字 3澜起科技质地中、估值中15,424 token、未核 2立讯精密质地中、估值便宜12,425 token、未核 3。每家两到三分钟。
- 建议方案的研判补档这一版不自动改数量:试探仓只标记强制人工确认,数量交人。
- 目标集合与评议名额:今晚干跑目标 120、投 20、带评议 20评议名额按候选名次给前二十家。
- 容器178 评析工作容器、定时器、接口容器按新环境变量重建155 接口容器重启PMS 镜像 12:18 重建。