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

201 lines
24 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-09已批准
> 这是一份独立方案。批准后落盘为两个仓库的 docs/个股深度评析方案_2026-09-09.md与《下一阶段工作方案_2026-09-07》《量价研判链吸收方案_2026-09-08》并列。
> 09-09 三条拍板已吸收进正文:**先只出人看的报告**,不接进候选卡与判决;**覆盖候选加持仓加池,本地模型为主****大师视角不限于用户提的三位,罗列得更宽**。
> "采购清单"这类字眼不再用;材料缺口一律叫"材料需求单"。
---
## 零、一句话
公司深度研报市场上只有一千多只票有、我们手里只有五十来份带公司锚的;买方研报一份都没有。这份方案让系统自己写:**十年财务报表数据由代码算成指标,十几位投资大师的分析视角各自给出判据与结论,最后合成一份买方式的论点**。每家公司一份 Markdown 报告,只给人看,先看质量,再决定接不接进候选卡。
---
## 一、这一轮买什么
三样东西,都是现在没有的。
1. **公司基本面这一维。** 四层系统里没有任何一处把财务报表当输入候选卡只有价格、吸筹、券商预期、论断数据基座的年报只抽关系不抽数字择时决策系统只有券商预期一块。153 库里六张财务表(十年三张表的重构指标、成长、质量、财务指标、主营构成、分红)代码里从来没读过。
2. **深度研报与买方研报的替代品。** 券商深度覆盖不到候选,买方研报本来就拿不到。大师视角是几十年验证过的分析框架,把它们编成代码判据加模型叙述,覆盖面就不再受券商产量限制。
3. **"我无法判断"的清单。** 每个视角算不出的项、材料没到的项,都写成清单并开成材料需求单,这与设计目标里"系统能识别我无法判断"是一件事。
**定调上的一处变化要记台账。** 产业热点图谱设计里定过"不补深度、不算估值、定量估值交给一致预期"。这一轮明确改成:**基座可以按大师的方法算估值判据,但结论标为"该视角的结论",不是系统判决**;一致预期仍是"市场预期"这一侧的唯一来源,用来算预期差。
---
## 二、原则
- **代码算数,模型写字。** 所有指标、判据、打分由代码从表里算,模型只在拿到算好的数字与编号材料后写叙述与合议,提示词里禁止自造数字。
- **本地模型为主。** 叙述用基座路由里的本地档位188 的大模型档位为主,本地判定档位备用),只有最后的"买方论点合议"允许走云端,且默认关。
- **加,不改。** 新包、新表、新任务、新框架定义并行放旁边;候选卡、判决、逻辑状态、评析表、抽取提示词一个字节不动。
- **只出人看的报告。** 报告落文件与索引表,不进候选卡、不进 PMS、不进复盘分组。什么时候接看过十份报告再拍板。
- **每个视角都要能说"算不了"。** 缺表、缺期数、缺材料时,判据项写"缺",不用替代值冒充。
---
## 三、投资大师视角总表(不止用户提的三位)
每个视角是一个"技能":固定的判据清单、固定的数据槽位、固定的三个追问、可选的叙述段。分四类。
### 3.1 财务质量与安全(全部可代码化,第一批)
| 视角 | 核心判据 | 数据槽位 | 可算程度 |
|---|---|---|---|
| **薛云奎四维分析法** | 经营(收入增长与结构、毛利率、周转)、管理(费用控制、应收与存货相对收入的增速、资产质量:商誉与减值)、财务(杠杆、现金流结构、利息覆盖)、业绩(回报率、利润含金量=经营现金流对净利润、应计比率、分红);四维各一档评价并指出收入与利润的含金量 | 六张表全用;主营构成表给结构 | 全可算 |
| **彭曼重构报表分析** | 净经营资产回报率的分解(利润率×周转率)、财务杠杆效应(利差×杠杆)、经营与融资活动分离、剩余收益 | fin_reformulated 本身就是这套口径NOA、RNOA、PM、ATO、FLEV、SPREAD、NBC | 全可算 |
| **杜邦分解** | 净资产收益率=净利率×周转×权益乘数,十年拆解看回报靠什么 | gp_fina_indicator、fin_reformulated | 全可算 |
| **皮奥特罗斯基 F 分数** | 九项二值判据:盈利四项、杠杆流动性三项、效率两项 | gp_fina_indicator、fin_reformulated | 九项全可算 |
| **盈余质量三分** | 斯隆应计(应计比率)、贝尼什 M可算子项、奥特曼 Z缺原表时的近似式 | fin_quality、fin_reformulated缺三张原表的子项写"缺" | 部分可算,缺项标注 |
### 3.2 价值与安全边际(数字为主,第一批)
| 视角 | 核心判据 | 数据槽位 | 可算程度 |
|---|---|---|---|
| **格雷厄姆** | 防御型七条:规模、流动比率、长期债务、十年盈利稳定、二十年分红、十年每股收益增长、市盈率与市净率乘积;安全边际 | 财务指标表、分红表1999 起)、行情表 | 六条可算,长期债务一条用杠杆近似 |
| **巴菲特与芒格** | 护城河四类(无形资产、转换成本、网络效应、成本优势,用回报率持续性与毛利率稳定性做量化旁证)、十年高回报且低杠杆、自由现金流转化、资本配置(分红、回购、并购的钱去了哪)、管理层诚信(年报文本,第二批) | 六张表、基座事件层(回购、增减持)、年报管理层讨论 | 数字部分可算,文本部分第二批 |
| **格林布拉特神奇公式** | 资本回报率与盈利收益率两项排名 | roic、经营利润、企业价值市值加净金融负债 | 可算 |
| **特里·史密斯(好公司三问)** | 高资本回报、高毛利、现金转化好、低杠杆、能把利润再投出去 | fin_reformulated、fin_quality | 可算 |
| **冯柳的弱者体系** | 逆向(价格位置低、覆盖少)、赔率(安全边际三情景,复用选股系统现成口径)、可证伪的负面(质量红旗) | 行情、研报明细表、fin_quality 红旗、sources.scenarios | 可算 |
### 3.3 成长与商业模式(数字加文本,第二批)
| 视角 | 核心判据 | 数据槽位 | 可算程度 |
|---|---|---|---|
| **彼得·林奇** | 六类公司归类(缓慢、稳健、快速、周期、困境反转、隐蔽资产)、市盈率相对增长率、存货与应收对收入增速、冷门度 | 成长表、质量表、研报覆盖度 | 归类与 PEG 可算 |
| **费雪十五问** | 增长空间、研发、销售组织、利润率趋势、劳资关系、管理层深度与诚信、会计成本控制、行业特有优势、长期视角、股权稀释、坦诚、正直 | 年报管理层讨论与核心竞争力、研报论断;数字只有利润率与稀释 | 以文本为主 |
| **段永平** | 商业模式(主营结构稳定性、毛利率、现金流)、企业文化(年报文本)、合理价格(自由现金流收益率) | 主营构成、重构表、年报文本 | 一半可算 |
| **波特五力** | 供应商与客户集中度(图谱供应关系带占比)、竞争者数量(环节成员数)、替代与新进入者(研报论断) | 基座图谱 company_facts、环节投影、论断 | 集中度可算,其余文本 |
### 3.4 预期与估值(对着市场看,第二三批)
| 视角 | 核心判据 | 数据槽位 | 可算程度 |
|---|---|---|---|
| **莫布森预期投资** | 现价隐含的增长与回报预期,与历史回报率和一致预期对照,得"预期差" | 一致预期、现价、重构表回报率 | 近似可算 |
| **达摩达兰叙事估值** | 故事到数字:三情景现金流估值,每个假设指向一条材料 | 自由现金流、成长表、一致预期 | 可算但是近似 |
| **邱国鹭三要素** | 品质(行业格局、竞争优势的持续性)、估值(对历史与同环节)、时机(不在本报告,归择时决策系统) | 环节投影、回报率持续性、估值分位 | 品质与估值可算 |
| **霍华德·马克斯** | 周期位置与风险:行业景气(环节评析)、估值分位、杠杆 | 环节评析、估值分位、重构表 | 第三批 |
### 3.5 买方论点合议(第三批,把上面合成一份)
买方研报的骨架不是数据,是结构:论点、预期差、反方论点(芒格的"反过来想")、关键假设与下一期财报要验证什么、失效条件、"我无法判断"清单。合议段按论点卡七字段输出(论点、证据、催化剂与时间窗、预期、失效条件、置信度、版本),将来接进候选卡时不用再改形状。
---
## 四、报告长什么样
每家公司一份 Markdown按最新财报期命名六段。
1. **头部。** 公司、所在环节、数据期数(十年几期)、材料清单(年报几份、研报几篇、论断几条)、生成时间、模型档位、视角版本。
2. **十年画像。** 代码算的表:收入、利润、经营现金流、自由现金流十年;回报率分解;现金含金量;应计;红旗;分红与回购。
3. **逐视角判据表。** 每个视角一节:判据表(项、读数、阈值、判定)、一句结论、三个追问;有叙述段的视角加一段两百字以内的本地模型叙述,每句话对应表里的数字或材料编号。
4. **市场预期一侧。** 一致预期、隐含市盈率、安全边际三情景(复用选股系统现成口径)、预期差。
5. **买方论点合议**(第三批之前这一段只放代码汇总,不调模型)。
6. **无法判断清单与材料需求单。** 每个视角算不了的项、缺的材料,自动开需求单。
---
## 五、落在哪一层、怎么跑
**落数据基座。** 理由三条:模型路由的本地档位在这里;年报正文、研报论断、图谱关系、事件层、材料需求单机制都在这里;框架驱动机制(槽位 YAML 加装配器加空槽开单)就是为这类分析准备的,只差"结论槽位"的执行器。选股系统与 PMS 这一轮不动。
**目标集合。** 候选单(当天主榜与观察档)加 PMS 持仓加股票池,约一两百家。选股系统在早上构建链里加一步,把三路名单写进一张目标表;基座任务读表选目标。持仓与池的接入不在第一批,先用基座自己的池加候选单。
**节奏与费用。** 指标每天算不花钱。叙述只在三种时候调模型:第一次生成、新财报期到了、材料集合变了(指纹)。每晚上限二十家,按候选单名次优先,一两百家十天铺完,之后每晚只补增量。每家每晚模型调用不超过八次,输出总额有上限,截断不重试。
**时间。** 每晚 23:30 起跑,避开 06:10 到 07:10 的盘前链与 21:30 的行业催化。
**落地位置。** 报告文件进对象存储 stockinfo 桶的 reports/company_review/{代码}/{财报期}.md同时一张索引表记每次运行代码、财报期、视角版本、指纹、材料数、模型、用量、报告路径接口按代码取最新报告。
---
## 六、分批与判收
**第一批(纯代码加两三个视角加报告骨架)。** 数据层六张表十年取数与对齐十年画像薛云奎四维、彭曼分解、杜邦、F 分数、盈余质量三分、格雷厄姆、巴菲特数字部分、神奇公式、特里·史密斯、弱者体系;报告一到四段与第六段;索引表与接口;每晚任务。叙述段只给薛云奎与巴菲特两个视角。
怎么验合成十年数据的离线单测覆盖每个指标公式与判据边界端到端试跑只用当天候选单里的公司09-09 拍板:不用茅台这类基准股),抽收入、净利润、经营现金流三个数与年报原文核对(基座里没有这家年报就对巨潮公开年报);十份报告人读,记"读了有没有用"。
**第二批(要年报文本的定性视角)。** 年报管理层讨论、核心竞争力、风险因素三类章节进定向喂入(分段器加一个类别);费雪、段永平、林奇归类、波特五力、巴菲特文本部分;叙述段扩到全部视角。
怎么验:定性判据每条都能指回年报段落编号;十份报告对照券商深度报告的观点,记分歧。
**第三批(预期与合议)。** 莫布森预期差、达摩达兰三情景、邱国鹭、马克斯;买方论点合议段(本地模型,云端可选开关默认关);合议输出论点卡七字段。
怎么验:合议段的每条论点都引用视角编号;反方论点与"无法判断"清单非空的比例;与一致预期的预期差分布。
**判收。** 三条都成立才算完成:一,目标集合里的公司都有报告且报告日不落后最新财报期一个月;二,十份人读报告里至少七份被认为"比现有材料多说了东西";三,每份报告的"无法判断"清单都对应了需求单。要不要接进候选卡,判收后另开拍板。
---
## 七、明确不做
不进判决、不进逻辑状态、不进 PMS、不进复盘分组。不做回测、不做因子。不用云端模型跑逐视角叙述。不做港股美股公司数据表只有 A 股)。不替代券商深度研报的采集,两条路并行。
---
## 八、风险
一,三张原始报表可能不在库里:奥特曼 Z、贝尼什 M 只能算子项,报告里标"缺",不用近似冒充。二,本地模型叙述质量:先看十份,不行就换档位或缩短叙述。三,财务口径:累计与单季、重述、单位,数据层统一处理并在报告头部注明。四,报告太长没人读:每视角一页以内,总长度有上限。五,与"基座不算估值"原则的冲突:本方案第一节已明写改法,批准即记台账。
---
## 附录甲 · 实现骨架(可不读)
**新建位置与文件(数据基座仓库,全部新增)。**
- `backend/app/analysis/company_review/` 包:
- `data.py` 数据层六张财务表加每日基础指标表gp_day_basicsymbol 前缀式、timestamp、close、pe_ttm、pb、total_mv、total_share、dv_ttm的取数与归一。每表单独一条 SELECT153 代理禁联查),用 market_snapshot 的 `_proxy_conn`、`_num`、`_td`、`_code_variants`。代码统一成点后缀式;报告期统一成 `period`YYYY-MM-DD 的期末日);`notice_date`/`ann_date` 保留作"当时可知"的时点键年度与单季两套口径分开存TTM 由四个单季相加;缺期用空值不插补;重述以最新一版为准并记 `data_source`/`validation_status`。
- `metrics.py` 指标层纯函数输入十年数据框输出指标表。杜邦、彭曼分解、现金含金量、应计、F 分数九项、Z 与 M 的可算子项、格雷厄姆七条、神奇公式两项、特里·史密斯五项、林奇归类与 PEG、集中度图谱供应关系占比、预期差一致预期对回报率。每项带 `available``missing_reason`
- `lenses/` 视角层:每个视角一个模块(`xue_siwei.py`、`penman.py`、`dupont.py`、`piotroski.py`、`earnings_quality.py`、`graham.py`、`buffett.py`、`greenblatt.py`、`terry_smith.py`、`fengliu.py`;第二批 `lynch.py`、`fisher.py`、`duan.py`、`porter.py`;第三批 `mauboussin.py`、`damodaran.py`、`qiu.py`、`marks.py`)。统一接口 `evaluate(metrics, materials) -> {criteria: [...], verdict, questions: [3], narrative_inputs}`,视角版本号写在模块常量里。
- `materials.py` 材料层:年报章节(对象存储正文经 sectionizer 定向,第二批加 `financial_statements``risk_factors` 两个类别到 PROFILES 的新副本,不改原表)、研报论断(`claim_store.drives_claims_with_docs()` 按受益方过滤)、事件(`event_claims_for`)、图谱关系(`graph_store.company_facts`)、一致预期(`consensus_daily` 与 `gp_report_rc`)。全部编号化(沿用 `_refs_to_claim_ids` 的编号表写法)。
- `narrative.py` 叙述层本地档位调用。提示词纪律只按给定判据表与编号材料写、不得出现表里没有的数字、JSON 输出、截断不重试(复用 review_segment 那份 `_brain_json` 的三条纪律,提成公共函数放本包内)。每视角一次调用,每家公司最多八次,单家输出总额上限 4 万 token。
- `synthesis.py` 合议层(第三批):买方论点七字段,本地档位;云端档位由开关 `COMPANY_REVIEW_SYNTHESIS_CLOUD` 控制,默认关。
- `report.py` 报告层:渲染六段 Markdown每视角一页以内表格用等宽数字。
- `store.py` 存储层Postgres 表 `company_review_runs`ts_code、period、lens_version、fingerprint、n_materials、model、tokens、report_key、ran_at`company_review_metrics`ts_code、period、metric、value、available、reason报告文件写对象存储 `reports/company_review/{ts_code}/{period}.md`
- `config/frameworks/company_review/*.yaml`:每个视角一份槽位声明(数据槽位、材料槽位、空槽开的需求单类型),沿用 `framer.py` 的 schema新建一个 `company_review_framer.py` 装配器读它们,不改 `framer.py`
- `backend/workers/tasks.py` 加两个任务:`akg.company_review(ts_code)`(单家:取数、算指标、跑视角、可选叙述、渲染、落库)与 `akg.company_review_batch(max_n=20)`(目标集合、优先级、指纹跳过、投递);路由到 review 队列beat 23:30 周一到周六;`/admin/company_review_batch` 触发入口与 `GET /company/{ts_code}/review` 取最新报告;日检 3b 段加一行"个股深度评析:近 30 天 N 份、落后最新财报期的 M 家"。
- `backend/scripts/company_review_run.py` 手工入口:`--code 600519.SH --no-narrative` 可离线只算指标。
**目标集合(第一批)。** 基座池内公司加选股系统当天候选单(读 155 的实时计划接口 `GET /plan?top=80&obs_top=20`,失败就只用池)。第二批由选股系统在早上构建链加一步写目标表 `t_akg_review_targets`plan_date、ts_code、source、rank基座改读表。
**指纹与跳过。** 指纹 = 最新财报期 + 材料编号集合 + 各视角版本号的哈希。指纹相同跳过;只换财报期而材料不变,只重算指标与代码段、不重跑叙述。
**测试。** `backend/tests/test_company_review_metrics.py`合成十年数据逐项验公式与阈值边界F 分数九项各造正反例、格雷厄姆七条、杜邦恒等式、TTM 相加、缺期不插补)。`test_company_review_report.py`:渲染不崩、缺项显示"缺"。端到端:一家真实公司 `--no-narrative` 先跑,抽收入、净利润、经营现金流三个数与年报原文核对;再开叙述跑一次,读报告。
**验证命令178容器内。**
```bash
docker compose exec -T -e PYTHONPATH=/app backend python /app/scripts/company_review_run.py --code <当天候选单里一只票的代码,点后缀式> --no-narrative
```
预期:打印十年画像表与各视角判据表,报告路径一行;索引表多一行。候选代码从 155 的实时计划接口取当天主榜第一只。
## 附录乙 · 数据可得性核对(可不读)
- 153 库六张表 09-09 只读核过gp_fina_indicator 2018-03 起 15.9 万行 5,204 只fin_reformulated 2015-09 起 19.5 万行 5,190 只(多数票 44 期fin_growth 2015-09 起 3,853 只fin_quality 2015-09 起 4,799 只gp_fina_mainbz 2014 起 240 万行gp_dividend 1999 起 6,154 只。
- 代码列格式09-09 探针改正):六张财务表与研报明细表都用点后缀式 600000.SH只有每日基础指标表 gp_day_basic 与行情表用前缀式 SH600000日期列格式两种gp_ 表 YYYYMMDD 整数、fin_ 表日期。数据层统一。
- 153 走 ShardingSphere 代理:单表查询、禁多表联查、禁跨节点合并;每表单独取,内存里按财报期对齐。
- 估值输入gp_day_basicsymbol 前缀式、timestamp 日期close、pe、pe_ttm、pb、ps、dv_ttm、total_share、total_mv、circ_mv2014-11 起 1,116 万行 5,677 只,每日)。历史市盈率分位、市净率、企业价值都从它算,不用月分表的因子表。
- 一致预期gp_report_rc2006 起)与基座派生 consensus_daily选股系统 sources.scenarios 的三情景口径直接复用。
- 年报:基座 documents 表 140 份,正文在对象存储;分段器现有七类章节不含财务报告与风险因素,第二批加。
- 研报论断claims 表 DRIVES 谓词带方向与机制;公司事实关系 SUPPLIES_TO 带占比,可算客户与供应商集中度。
## 附录丙 · 架构设计补充要点09-09 设计评审吸收,可不读)
- 框架加载器只扫顶层 YAML子目录不会污染现有框架清单但也不能靠它装配本应用自带一个同形的槽位加载器。
- 容器只挂载 backend/app、backend/workers、backend/scripts只读与 config只读本地 data 目录没有挂进任何容器,报告只能落对象存储;外部代码清单放 config/company_review/targets.txt 三个工作容器都读得到。
- 年报正文经解析缓存取parsed/{解析器版本}/{对象键}.txt不再解析 PDF。
- 本地档位取法registry.client("worker_large") 是池化客户端,盘后首选 188、满了落本地判定档云端只在合议一步、且开关打开时用。
- 叙述按组调用而不是一视角一调:财务体检、价值判据、质量与风险、定性视角(年报文本)、预期与叙事、合议,共六组,每家不超过十次调用、输出总额上限六万。
- 数字回查是代码强制:叙述里的数字逐个匹配允许集合(指标值的各种形态),未命中的段落标"含未核数字",全家未核比例超三成记为半成品。
- 估值边界的拍板措辞:基座做"描述性估值"(复述市场已给的价格、倍数、一致预期,并与公司历史和可持续增速作差),不做"规范性估值"(不产出内在价值、目标价、买卖建议、自设折现率或终值假设);带价格的判据只输出通过与否;达摩达兰视角只做"叙事对应必须成立的数字"对照表。
- 累计与单季口径、单位由探针一次定死写成常量并用单测钉住,换数据源先让测试红。
- 定时改为 00:45择时决策系统 22:30 起的夜扫占用 188 的模型到零点后),截止 05:30 不再开新家。
- 目标集合第一版只认基座池加外部清单文件,候选单与持仓的接入后续再加。
## 附录丁 · 09-09 探针读数(可不读)
- fin_reformulatedreport_type 取值 Q1、Q2、Q3、YEARvalidation_status 取值 PASS 6.5 万、FLAG 9.7 万、FAIL 3.3 万data_source 单一来源 eastmoney_v2。
- gp_fina_indicator比率是百分数茅台 2025 年报 roe 34.46、grossprofit_margin 91.18q_roe 是单季fcff 是元eps、bps 是元。
- gp_fina_mainbzbz_sales、bz_profit 是元bz_type 有 D地区与 P产品同一期存在同值别名行"中国大陆"与"国内"),要按 bz_type 去重。
- gp_dividendcash_div 是每股元div_proc 有预案、股东大会通过、实施三个阶段,以实施为准。
- gp_day_basictotal_mv 单位万元(茅台 1.636e8 万元 ≈ 1.64 万亿元)。
- 09-09 落地后追加:主营构成表每类分类有一行名字就是"产品""地区""行业"的表头,金额即营业收入合计(宁德时代 2025 年 4,237 亿);重构报表 fin_reformulated 的经营现金流只有真实值的四成上下,现金流改取财务指标表口径;财务指标表比率是百分数、唯独经营现金流对收入是小数;成长表与质量表与原始金额对不上,只作参考。
- 第一批上线读数见台账 052。
- 目标集合落法09-09 落地改法178 容器打不到 155 接口,选股系统出计划时把主榜前一百加观察档前二十写进 153 库 t_akg_review_targets基座读表基座产业池默认不进目标。