24 KiB
个股深度评析方案(2026-09-09,已批准)
这是一份独立方案。批准后落盘为两个仓库的 docs/个股深度评析方案_2026-09-09.md,与《下一阶段工作方案_2026-09-07》《量价研判链吸收方案_2026-09-08》并列。 09-09 三条拍板已吸收进正文:先只出人看的报告,不接进候选卡与判决;覆盖候选加持仓加池,本地模型为主;大师视角不限于用户提的三位,罗列得更宽。 "采购清单"这类字眼不再用;材料缺口一律叫"材料需求单"。
零、一句话
公司深度研报市场上只有一千多只票有、我们手里只有五十来份带公司锚的;买方研报一份都没有。这份方案让系统自己写:十年财务报表数据由代码算成指标,十几位投资大师的分析视角各自给出判据与结论,最后合成一份买方式的论点。每家公司一份 Markdown 报告,只给人看,先看质量,再决定接不接进候选卡。
一、这一轮买什么
三样东西,都是现在没有的。
- 公司基本面这一维。 四层系统里没有任何一处把财务报表当输入:候选卡只有价格、吸筹、券商预期、论断;数据基座的年报只抽关系不抽数字;择时决策系统只有券商预期一块。153 库里六张财务表(十年三张表的重构指标、成长、质量、财务指标、主营构成、分红)代码里从来没读过。
- 深度研报与买方研报的替代品。 券商深度覆盖不到候选,买方研报本来就拿不到。大师视角是几十年验证过的分析框架,把它们编成代码判据加模型叙述,覆盖面就不再受券商产量限制。
- "我无法判断"的清单。 每个视角算不出的项、材料没到的项,都写成清单并开成材料需求单,这与设计目标里"系统能识别我无法判断"是一件事。
定调上的一处变化要记台账。 产业热点图谱设计里定过"不补深度、不算估值、定量估值交给一致预期"。这一轮明确改成:基座可以按大师的方法算估值判据,但结论标为"该视角的结论",不是系统判决;一致预期仍是"市场预期"这一侧的唯一来源,用来算预期差。
二、原则
- 代码算数,模型写字。 所有指标、判据、打分由代码从表里算,模型只在拿到算好的数字与编号材料后写叙述与合议,提示词里禁止自造数字。
- 本地模型为主。 叙述用基座路由里的本地档位(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,按最新财报期命名,六段。
- 头部。 公司、所在环节、数据期数(十年几期)、材料清单(年报几份、研报几篇、论断几条)、生成时间、模型档位、视角版本。
- 十年画像。 代码算的表:收入、利润、经营现金流、自由现金流十年;回报率分解;现金含金量;应计;红旗;分红与回购。
- 逐视角判据表。 每个视角一节:判据表(项、读数、阈值、判定)、一句结论、三个追问;有叙述段的视角加一段两百字以内的本地模型叙述,每句话对应表里的数字或材料编号。
- 市场预期一侧。 一致预期、隐含市盈率、安全边际三情景(复用选股系统现成口径)、预期差。
- 买方论点合议(第三批之前这一段只放代码汇总,不调模型)。
- 无法判断清单与材料需求单。 每个视角算不了的项、缺的材料,自动开需求单。
五、落在哪一层、怎么跑
落数据基座。 理由三条:模型路由的本地档位在这里;年报正文、研报论断、图谱关系、事件层、材料需求单机制都在这里;框架驱动机制(槽位 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_basic:symbol 前缀式、timestamp、close、pe_ttm、pb、total_mv、total_share、dv_ttm)的取数与归一。每表单独一条 SELECT(153 代理禁联查),用 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,容器内)。
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_basic(symbol 前缀式、timestamp 日期,close、pe、pe_ttm、pb、ps、dv_ttm、total_share、total_mv、circ_mv;2014-11 起 1,116 万行 5,677 只,每日)。历史市盈率分位、市净率、企业价值都从它算,不用月分表的因子表。
- 一致预期:gp_report_rc(2006 起)与基座派生 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_reformulated:report_type 取值 Q1、Q2、Q3、YEAR;validation_status 取值 PASS 6.5 万、FLAG 9.7 万、FAIL 3.3 万;data_source 单一来源 eastmoney_v2。
- gp_fina_indicator:比率是百分数(茅台 2025 年报 roe 34.46、grossprofit_margin 91.18);q_roe 是单季;fcff 是元;eps、bps 是元。
- gp_fina_mainbz:bz_sales、bz_profit 是元;bz_type 有 D(地区)与 P(产品);同一期存在同值别名行("中国大陆"与"国内"),要按 bz_type 去重。
- gp_dividend:cash_div 是每股元,div_proc 有预案、股东大会通过、实施三个阶段,以实施为准。
- gp_day_basic:total_mv 单位万元(茅台 1.636e8 万元 ≈ 1.64 万亿元)。
- 09-09 落地后追加:主营构成表每类分类有一行名字就是"产品""地区""行业"的表头,金额即营业收入合计(宁德时代 2025 年 4,237 亿);重构报表 fin_reformulated 的经营现金流只有真实值的四成上下,现金流改取财务指标表口径;财务指标表比率是百分数、唯独经营现金流对收入是小数;成长表与质量表与原始金额对不上,只作参考。
- 第一批上线读数见台账 052。
- 目标集合落法(09-09 落地改法):178 容器打不到 155 接口,选股系统出计划时把主榜前一百加观察档前二十写进 153 库 t_akg_review_targets,基座读表;基座产业池默认不进目标。