邱国鹭三问框架实战指南:用"便宜、定价权、行业格局"重构 Vibe-Trading 的 A 股价值投资 Lens
本文以 Vibe-Trading 仓库中的 邱国鹭三问视角(Three Questions Lens) 为骨架,系统讲解该视角的构建初衷、三道必须独立作答的问题、硬性否决项(Disqualifiers)、评分规则、常见误用与证伪条件,并结合 investor-lenses 技能的加载机制、SkillsLoader 源码 与 结构测试 说明它如何在 Vibe-Trading 中被路由、加载与使用。读完本文,你将掌握如何以"便宜是硬道理 → 定价权 → 行业格局"的顺序完成一次可复核、可证伪、可写入输出契约的分析,并理解为什么这道框架把"用一个好答案掩盖另一个坏答案"视为首要防范的错误。
为什么需要一道"三问"视角
Vibe-Trading 将"投资者视角(Investor Lenses)"实现为一组可复用的推理程序(reasoning procedure):每个视角都是一套固定顺序的问题加上显式否决规则,源自某位投资者公开发表的方法论,由项目以自身语言重构(见 SKILL.md)。它只在证据已经存在之后被应用——不负责采集数据,也不关心数据来自哪里。
邱国鹭三问视角在这一组透镜中的定位是 value(价值)+ 行业结构(industry structure),其设计与零售资金主导的市场直接相关:把整个投资案例压缩成三道从公开数据即可回答的问题,强制三问独立作答,并把"行业格局"当作最常被跳过、却又最常决定结果的那个变量。
视角元数据:frontmatter 承载了什么
三问视角文件的头部是一段 YAML 风格 frontmatter,由仓库的 frontmatter 解析器 解析(支持字符串、[a, b] 列表与布尔值):
name: qiuguolu-three-questions
lens: Three Questions — Value, Pricing Power, Industry Structure
attributed_to: Qiu Guolu (邱国鹭)
style: value
markets: A-share and HK; designed around industries whose competitive structure has already formed
description: Answer three questions in order — is it cheap, does the company have pricing power, and is the industry structure favourable — and refuse to let a good answer to one substitute for a bad answer to another.
name必须与文件名qiuguolu-three-questions.md的 stem 一致;markets声明了适用市场(A 股与港股),这是视角外溢检测的关键字段;description用一句话概括了框架的全部行为约束:按顺序回答三问,且禁止以好答案替代坏答案。
结构测试 test_lens_frontmatter_is_complete 会校验每个视角文件都必须声明 name / lens / attributed_to / style / markets / description 六个键,因此三问视角在任何一次修改后仍保持元数据完整。
市场契合度:为"格局已形成"的市场设计
框架声明(Framework, not investment advice):这是项目对公开方法的自行总结与程序化重构,并非署名者本人撰写或背书;该框架产生的任何结论仅在框架内部成立。
三问视角的 Market-fit note 划定了它的适用边界:
- 适配 A 股与港股:其结构性偏好——倾向竞争已经整合完毕的行业——与"产能过剩与价格战历史漫长"的市场高度契合。中国式供给出清带来的格局改善,正是第三问最有力的得分点;
- 对"格局尚未形成"的行业最无用:早期科技、政策新设的行业,第三问尚无答案。文档要求明说 "unanswerable(无法回答)",而不是猜测;
- 政府管制定价是结构性事实而非异常:只要价格由公司之外的主体设定,无论行业多么集中,定价权都封顶。文档将这一点列为市场契合度的硬事实,直接进入第二问的判断前提。
这条注记在测试层被整体保护:test_china_market_coverage_is_represented 断言至少 3 个视角明确提到 A 股市场结构(test_investor_lenses_skill.py),三问视角是其中代表。
三道优先级信号:必须按序走完
三问视角的核心是一份有序信号清单。不要跳到数据最全的那一问;顺序本身就是框架的一部分。
第一问:便宜吗?(便宜是硬道理)
- 估值对照:对照公司自身历史与行业,并选用适合业务性质的指标——稳定盈利者用盈利倍数(PE),重资产与金融业务用账面倍数(PB),会计利润噪音大者用现金流倍数(PCF);
- 检验便宜是否真实:警惕"峰值盈利分母"制造的伪便宜,跨周期做**正常化(normalize)**之后再下结论;
- 交叉验证资产负债表:净现金、投资资产、按历史成本记账的物业——这些被估值倍数忽略的资产必须单独清点。
第二问:有定价权吗?(定价权)
- 提价且保住量的证据:涨价跑赢投入成本通胀、且量没有塌——这是唯一直接证据,其余皆为推断;
- 毛利率水平与穿越下行周期的稳定性:定价权的体现是"需求没了,毛利率还在";
- 给定价权来源命名:品牌、转换成本、牌照、渠道控制、或真正的成本领先。成本领先在商品化行业是最真实的答案,也最持久;
- 对上下游的双向议价:客户集中度、供应商集中度,以及五年维度应收/应付账期方向的演变。
第三问:行业格局有利吗?(行业格局)
- 集中度及其趋势:份额在向龙头收敛,还是在碎片化?
- 产能纪律:是否仍在新增产能、扩产前置期多长——在弱需求下继续扩产的行业,无论公司多优秀都无法支撑价格;
- 真实进入壁垒:资本密集度、牌照、规模经济、渠道——还是仅仅停留在叙事层面?
- 竞争行为:行业在拼价格还是拼产品?一个仍在打价格战的集中行业,不是有利格局;
- 结构中的位置:龙头、可信挑战者、还是规模不足者(subscale)。在整合中的行业里,规模不足者通常随行业变好而变得更糟。
硬性否决项:命中即终止,不与正面因素对冲
视角文件用 Disqualifiers 定义了五条一票否决(hard vetoes):
| 否决项 | 触发含义 |
|---|---|
| 便宜但没有定价权、且格局在恶化 | 经典价值陷阱,本框架存在的首要理由 |
| 格局与定价权都好,但价格已充分反映两者 | 三问必须全部通过;好公司+不合理价格 = 失败 |
| 在需求持平或下滑时仍在激进扩产 | 第三问失败,便宜与否不再相关 |
| 格局无法回答(行业未形成) | 越界,正确输出是"本视角不适用" |
| 仅凭毛利率推断定价权、无提价实证 | 高毛利可能来自结构(mix)或一次性成本红利 |
否决项不是"与正面因素加权对冲"的关系。测试契约 test_lens_has_required_sections 强制每个视角保留 ## Disqualifiers 小节;在 SKILL.md 的五步运行流程中,第 4 步即"命中硬否决项 → 停下并报告否决"(SKILL.md),先于评分与输出。
评分规则:三问全过才算数
| 问题 | 通过条件 |
|---|---|
| 便宜 | 相对自身历史与同业有折价,基于正常化盈利,且给出算术过程 |
| 定价权 | 一次立住的提价 + 穿越下行周期的毛利稳定 + 命名来源 |
| 格局 | 集中度上升或高位稳定、产能纪律、真实壁垒、非价格竞争 |
注意评分栏里的措辞:便宜要求"arithmetic shown(算术展示)"、定价权要求"a price increase that held(一次立住的提价)"。三问必须全部通过;任何一问的强答案都不能补偿另一问的失败——这种"替代(substitution)"正是框架要堵死的特定错误。
典型误用清单:框架明确知道自己会怎么犯错
- 只回答第一问:便宜最容易测量,却是三问中最不具决定性的;
- 仅凭市场份额推断格局:集中度很高但价格战持续 = 坏格局。要看竞争行为,不能只看 Herfindahl 指数;
- 用于格局未形成的行业:此时答案是被发明的;
- 忽略公司在一个好格局里的位置:有利行业不会托起规模不足者,反而常加速其衰退;
- 把管制定价行业当作有定价权:价格由公司之外设定时,第二问的答案是"否";
- 把框架的简单性凌驾于证据之上:三问好问、但不好答;对任何一问给出单行答案,意味着工作没有做完。
证伪条件:提前写好"什么会推翻结论"
- 提价被回滚,或提价后量崩塌 → 第二问失败,与历史毛利率无关;
- 新增产能公告加速 → 第三问失败,便宜变成无关变量;
- 正常化的周期中段盈利远低于滚动盈利 → 第一问当时踩在峰值分母上,必须重做。
证伪条件的存在使该视角保持可检验(falsifiable)——这正是 SKILL.md 强调的视角价值:有主见所以可证伪。一个视角要在你看答案之前就告诉你它先排哪些信号、哪些事实会让它离场。
输出契约:结论必须以框架为条件
视角文件要求按技能级输出契约(skill-level output contract)报告,SKILL.md 第 8 节对其有强制顺序(SKILL.md):
- 视角名与一句话的优化目标;
- 以框架为条件的结论——措辞必须是 "under a three-questions framework, …"(在该三问框架下……),永远不写成对该标的的平铺断言;
- 有序信号走查——每条优先级信号、找到的证据、是否通过;缺失证据写成 missing,绝不推断;
- 否决项检查——每条硬否决标记 triggered / not triggered / unknown;
- 误用检查——当前案例是否落在该视角文档化的失效区域;
- 证伪条件——2~3 条足够具体、别人可以去核实的翻转观察;
- 置信度及其限制因素——如"中等,受限于缺少分部披露",而非一个裸数字;
- 常驻免责声明——这是分析框架而非投资建议,结论以所用框架为条件。
三问视角自己的 Output contract 还额外要求:三问分别作答、各自带证据,并明确指出哪一问是约束条件(binding constraint)。测试 test_lens_requires_framework_conditional_verdict 专门在 ## Output contract 节内检查框架条件式措辞与"not investment advice"字样,防止顶部免责声明模板被算作满足条件。
在 Vibe-Trading 中:加载、路由与结构保障
加载链路
三问视角通过 investor-lenses 技能的 SKILL.md 路由器暴露。SkillsLoader(skills.py)扫描 agent/src/skills/ 下每个含 SKILL.md 的目录,将技能按 _CATEGORY_ORDER(data-source, strategy, analysis, asset-class, crypto, flow, tool, other)分组后写入系统提示;investor-lenses 声明 category: analysis,因此归入 analysis 组。get_content(name) 负责返回技能完整文档(供 load_skill 工具使用)。
路由表
SKILL.md 的 Lens index 将三问视角与使用场景绑定:
| 视角 | Style | 最锋利处 | 最盲区 |
|---|---|---|---|
| Three questions(邱国鹭) | Value / industry structure | A 股与港股的行业格局与定价权 | 早期、格局未形成的行业 |
其"选择视角"表给出的推荐启动场景为:"A-share / HK industry with consolidating competitive structure(竞争结构正在整合的 A 股/港股行业)"→ 从邱国鹭入手,再叠加巴菲特与段永平。
堆叠协议中的位置
SKILL.md 规定堆叠(stacking)纪律:最多两到三个视角,且必须选择"真的能彼此分歧"的组合("巴菲特 + 段永平"被明确定性为装饰性堆叠)。三问视角在堆叠协议中的典型张力来自它与 Chanos(法务做空)或 Feng Liu(冯柳,弱势体系逆向)的并置。分类分歧时需归因到唯一根因:Horizon(持有期)、Caliber(度量口径,如 owner earnings vs 报告净利润)、Risk preference(左尾容忍度)、Information(某方缺一个无人掌握的事实)——并明确禁止"平均结论"。
数据层解耦
视角文件不硬编码任何注册工具名,这是它与数据层保持解耦的结构性保证;test_lens_does_not_hardcode_tool_names 与 test_router_does_not_hardcode_tool_names(test_investor_lenses_skill.py)用 _discover_subclasses 枚举全部带下划线的注册工具名并逐一比对。结构上,test_router_index_and_disk_agree_both_ways 双向校验路由器索引与磁盘文件的一致性——重命名不会留下死索引行,新文件也不会变成孤儿。
端到端实践示例:走一遍三问
假设对某 A 股制造业龙头(行业格局已整合)应用三问视角,可按下述方式组织证据与输出(示意流程,非投资建议):
- 冻结证据:先用市场数据与财报工具收集价格、估值、五年毛利率、资本开支公告、行业集中度数据——在选定视角之前完成取证,避免循环论证;
- 选定视角:按路由表从三问视角入手,按堆叠协议叠加一至两个"能真正分歧"的视角;
- 按序走查:第一问对正常化盈利折现检验"便宜"并展示算术;第二问寻找"提价且立住"的直接证据并给来源命名;第三问查集中度趋势、产能纪律与竞争行为;
- 否决检查:逐条对照五条硬否决,命中即停并报告;
- 误用检查 + 输出契约:确认当前案例不在"格局未形成/管制定价"失效区,然后按八段顺序输出,结论以 "under a three-questions framework, …" 开头,并明确指出哪一问是约束条件。
小结
邱国鹭三问视角是 Vibe-Trading 十二视角(12 lenses)中面向 A 股/港股行业格局与定价权的主力透镜,其价值在于:问题简单到可用公开数据回答,答案却必须逐问独立且全部通过。结合 视角文件、技能路由器、加载实现 与 结构测试,你可以把"便宜、定价权、行业格局"三问作为一条可复核、可证伪、可写入输出契约的分析流水线接入自己的研究流程——并始终记住框架的自评:这是分析,不是投资建议;结论仅在框架内部成立。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust4.2 K634
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown300
jforgamejforgame是一个一站式游戏服务器开发框架。包含游戏服务器开发所需要的各种组件,比如网关,socket服务端与客户端,自定义高效消息编解码,游戏热更新,游戏通用工具等等。包含游戏服,跨服,匹配服,后台管理系统等实现,同时提供大量业务案例以供学习。亦可用于其他socket应用,例如及时聊天等。Java101
fizz-gateway-nodeAn Aggregation API Gateway in Java . FizzGate 是一个基于 Java开发的微服务聚合网关,是拥有自主知识产权的应用网关国产化替代方案,能够实现热服务编排聚合、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理、回调管理等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行API服务治理、减少中间层胶水代码以及降低编码投入、提高 API 服务的稳定性和安全性。Java60
certd开源SSL证书管理工具;全自动证书申请、更新、续期;通配符证书,泛域名证书申请;证书自动化部署到阿里云、腾讯云、主机、群晖、宝塔;https证书,pfx证书,der证书,TLS证书,nginx证书自动续签自动部署JavaScript60
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python280