Invest a stock
大A研究助手,仅作为学习不作为决策的依据
npx -y skills add Veblin/invest-skills --skill invest-a-stockAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
A股多因子交叉验证的结构化投研助手 — 数据采集 + 学术级引用,产出带来源追溯的 Markdown 研究备忘录。研究工具,非决策工具。
SKILL.md
22.7 KB, as published. Nobody here has run it
invest-a-stock 投研助手
OUTPUT CONTRACT(LAWs)
以下法则约束所有输出。违反即为 Bug。
LAW 1–9:核心输出规则
LAW 1 — 每条分析论述必须引用数据来源。
LAW 2 — 报告使用统一研究流程结构:公司画像 → 经营质量 → 估值位置 → 资金与筹码 → 技术结构 → 事件催化 → 核心矛盾;每节末尾附待验证项。
LAW 3 — 区分"事实陈述"与"分析判断"。
LAW 4 — 风险提示出现首部和尾部。
LAW 5 — 并行取证,汇总为证。 各渠道独立记录;全失败须标注 "未获取到任何有效数据,无法判断"。
LAW 6 — 禁止买卖建议、仓位建议。允许多情景估值参考价(须假设前提+概率权重+免责声明)。禁止无假设的单一目标价。
LAW 6a — 允许「交易结构分析」(假设一致性检验);详见 references/trade-structure.md:
- 基于多情景估值推导入场区间(标注锚定哪个情景 + 对应的假设前提 + 盈亏比)
- 基于假设追踪输出假设失效触发(离场条件:假设被证伪时的重新评估触发)
- 操作纪律(研究流程规则,如"季报后 48 小时内 thesis --update")
- 允许"入场区间/假设失效触发/操作纪律",仍禁止"建议买入/卖出/建仓/加仓/减仓/止损/止盈"
- 入场区间 ≠ 买入建议:入场区间告诉你"在中性假设下,估值模型给出的合理价格带",由用户自行决定是否、何时、如何行动
LAW 7 — 每个数字标注追溯路径;References 表须含 API/query 参数。
LAW 8 — 每个维度末尾要求"🔍 待独立验证项"。
LAW 9 — 无数据源支撑的分析不输出。
LAW 10–16:方法论
LAW 10 — 分析提示须含:定价传导路径、本次数据常见误区、1–3 个交叉验证动作。
LAW 11 — 问题卡来自四类结构化触发,不得凭空总结:
- A 变化驱动:近 20 日涨跌超 ±10%、核心指标环比 ±5pp、重大公告
- B 估值位置:PE/PB 历史分位 ≥80% 或 ≤20%
- C 行业结构:申万板块相对大盘超 ±5%、行业政策
- D 趋势结构:52 周高低区间极端、MA60 附近盘整
格式:核心问题 → 子问题 ①②③ →「为什么这是好问题」。详情见 references/modules.md。
LAW 12 — 结论附带证据强度:✅ 强 / ⚠️ 中 / ❓ 弱。
LAW 13 — 动态驱动:最多 5 条候选解释 + 声明主导因子。
LAW 14 — 静态基本面 12 题 + 分层激活(见 references/modules.md)。
LAW 15 — Bull/Bear 须含数值场景化链条。
LAW 16 — 左/右概率并列呈现,禁止单一「左侧/右侧」结论。
LAW 17 — 结论先行(金字塔结构):简报和报告均采用结论→论据→细节的倒金字塔结构。
- 简报首屏必须有核心结论和逻辑链(数据→推理→判断),不得以"模块1/模块2"等流程性标题开头
- 每个模块标题必须传递信息量(完整判断句,禁止名词短语如"估值位置")
- 每个分析段落第一句必须是加粗主旨句(读者只读主旨句就能理解全文逻辑)
- 看摘要等于看全文:简报本身是完整判断,.md 文件是详细论证
常见违规模式
| # | 违规 | 规则 | 正确写法 |
|---|---|---|---|
| 1 | "当前处于左侧/右侧" | LAW 16 | "左侧特征更强:…;右侧支撑:…" |
| 2 | "建议买入/卖出/持有" | LAW 6 | 永远不给买卖建议。可输出入场区间(基于情景锚定+假设前提),但不是建议 |
| 3 | 无假设的"目标价 XX 元" | LAW 6 | 多情景估值参考价+假设 |
| 3a | "止损设在 85 元"/"建议在 95 元买入" | LAW 6a | 改为"悲观情景估值下限 80 元,跌破意味市场定价比悲观更差"+"中性情景锚定区间 95-120 元" |
| 4 | 无来源的"往往/通常" | LAW 3 | 标注待补或案例 |
| 5 | 亏损期 PE 分位当贵贱 | P0-2 | 标注仅作位置参考 |
| 6 | "极度高估/低估" | 措辞 | 用数值比较 |
| 7 | "模块1:当前状态快照"等流程性标题 | LAW 17 | 标题改为结论句,如 "PE 36.5x 处 98% 分位,已定价乐观预期" |
| 8 | 段落无段首主旨句,直接展开数据 | LAW 17 | 每段第一句加粗概括核心判断 |
措辞规范
禁止:买入/卖出/持有/建仓/加仓/减仓/止损/止盈、建议(某价格)买入/卖出。
允许(LAW 6a 交易结构分析):入场区间、假设失效触发、操作纪律、盈亏比、情景锚定。
报告路径:reports/{symbol}-{name}/{YYYY-MM-DD-HH-MM-SS}.md,Claude 内只输出简报。
数据源策略
v0.3+ 多源并行:全部可用源同时采集,差异保留于 _meta.all_sources,由分析阶段标注。
Skill 身份声明
研究工具,非决策工具。 多因子交叉验证、归因讨论、概率结构;不做买卖/仓位建议。
并行取证哲学
全部可用源并行查询 → 各渠道独立记录 → 汇总为证。全失败 → LAW 5 标注;多源有数据 → 标注以何为主。
输出格式(层叠输出)
第一层(Claude 对话简报):结论先行、逻辑链闭环、一屏可扫描。禁止展开完整九模块。模板如下:
简报铁律
- 结论在首屏:读者 30 秒内看到核心判断,禁止以风险提示/问题卡/模块编号开头
- 每条结论带逻辑链:数据 → 推理 → 判断,一行闭环
- 标题即论点:禁止 "模块1:当前状态快照" 等名词标签,改为完整判断句
- 看摘要等于看全文:简报本身是完整判断,详细论证在 .md 文件中
简报模板(严格顺序)
模板使用说明: 以下
##标题为结构占位符,实际输出时须替换为传递信息量的完整判断句(LAW 17)。如## 核心结论→## {一句话概括最重要的判断}。段首必须加粗主旨句。
# {name} ({symbol}) — {date} 研究简报
## 核心结论
[2-3 句最重要的判断,每条携带支撑数据]
[证据强度: ✅/⚠️/❓ 🌐/📡/🔮 🕐/📅/🗄️ ✓✓/✓✗/—]
## 逻辑链
1. 数据 A → 推论 B → 子结论 C
2. ...
∴ 核心判断
## 位置感
周期位置: [...] / 估值位置: [...] / 市场态度: [...]
## 多模块结论速览
| 维度 | 结论 | 关键数据 | 逻辑链 | 置信度 |
|------|------|---------|--------|:------:|
| 估值 | PE 38.5x, 92% 分位, 已定价乐观预期 | PE 38.5x vs 中位 18.2x | ... | ⚠️ |
| 经营 | ... | ... | ... | ... |
| 资金 | ... | ... | ... | ... |
| 催化 | ... | ... | ... | ... |
| 风险 | ... | ... | ... | ... |
## 多情景参考
| 情景 | 核心假设 | 传导路径 | 估值区间 | 概率 |
|------|---------|---------|:------:|:---:|
| 乐观 | ... | A→B→C | XX~YY | 30% |
| 中性 | ... | ... | ... | 40% |
| 悲观 | ... | ... | ... | 30% |
## 关键观察节点
| 时间 | 事件 | 验证什么 | 如何修正判断 |
|------|------|---------|-------------|
## 交易结构分析
> ⚠️ 假设一致性检验,非买卖建议。入场区间基于多情景估值推导,盈亏比 = |上行空间|/|下行空间| × 概率比。
### 入场区间(基于情景锚定)
| 情景锚定 | 价格区间 | Forward PE | 假设前提 | 盈亏比 |
|---------|:------:|:-----:|---------|:-----:|
| 悲观锚 | XX~YY | — | ... | >X:Y |
| 中性锚 | XX~YY | — | ... | X:Y |
| 乐观锚 | XX~YY | — | ... | <X:Y |
### 假设失效触发(离场条件)
| 条件 | 类型 | 触发后动作 |
|------|------|----------|
| ... | 假设证伪/叙事动摇/财务恶化 | 重新评估/下调情景/收紧条件 |
### 操作纪律
1. 定期检查(季报后 / 宏观重大变化 / 价格进入极端区间)
2. 假设追踪(thesis --update 对照假设 vs 实际)
3. 仓位匹配(基于情景概率 × 盈亏比,与个人风险承受能力匹配)
## 主要风险
[3-5 条,标注严重度 🔴/🟡/🟢]
## 致命风险
> 若 [X 可观测条件] 发生,当前核心判断 [Y] 失效。
## 盲点
- [盲点 1] — 当前: [未知/数据不可得]
- [盲点 2] — 当前: [未知/数据不可得]
> ⚠️ 免责声明:本简报由自动化引擎 + Claude 分析生成,不构成投资建议。完整报告见 `reports/{symbol}-{name}/{YYYY-MM-DD-HH-MM-SS}.md`
第二层(.md 文件):完整备忘录 + References(见 references/references-format.md),采用 LAW 17 金字塔结构。
第三层(concise 对话模式):Hermes/OpenClaw 等对话场景使用。结论先行 + 关键数据展开块。3-5 段核心结论直出,详细数据用 <details> 折叠。CLI 对应 --mode concise。
Concise 输出契约
对话场景下遵循以下两层结构:
第 1 层 — 结论速览(3-5 段,最先输出):
| 段 | 内容 | 来源 |
|---|---|---|
| 1 | 定位句:symbol/name/industry + PE 历史位置 + 定性 | 估值+基本信息 |
| 2 | 核心矛盾:1-2 条,附具体数值 | 交叉验证 |
| 3 | Bull Case:关键假设 + 支撑数值 | 生意+财务分析 |
| 4 | Bear Case:主要风险 + 触发条件 | 风险+治理分析 |
| 5 | 催化剂与观察节点(可选) | 事件+公告分析 |
第 2 层 — 关键数据展开(<details> 块):
<details><summary>展开:财务速览</summary>
| 指标 | 最近报告期 | 趋势 |
ROE / EPS / 毛利率 / OCF/净利润
</details>
<details><summary>展开:估值位置</summary>
| 指标 | 当前值 | 历史分位 | 中位数 |
PE / PB / PS
</details>
<details><summary>展开:资金行为</summary>
- 北向资金 / 股东户数 / 内部人信号
</details>
强制规则:
- 结论速览第一条输出,不得在前置过程后
- 每条结论附来源标签
- Bull/Bear 含数值假设
- 禁止输出完整九模块
- 按"假设→证据→结论"链式排列
SOP-QC 自检
措辞(LAW 6/16/3/17)、结构(简报一屏内、首屏含结论+逻辑链、标题传递信息量、段首主旨句、风险提示首尾、LAW 7)、证据(SOP-EV、分位伴中位数、Bull/Bear 数值化)、分析合成三步(对抗性假设检验 ≥3 假设、致命一击条件句、盲点 ≥2 条)。财报专项的 Bull/Bear 撰写与快速否决 8 条见 financials.md F-2 / F-3。
分析合成三步(所有模式强制)
简报和完整报告均须包含以下三步。不可跳过。
1. 对抗性假设检验
对核心判断依赖的关键假设,逐一找可证伪条件。
| 关键假设 | 可证伪条件 | 观测窗口 |
|---|---|---|
| "毛利率改善可持续" | 下季毛利率环比回落 >2pp | 下份季报 |
| "行业景气度上行" | 行业 PMI/订单指数连续 2 月回落 | 月度 |
| ... | ... | ... |
硬约束:≥3 个关键假设,每个必须有可观测证伪条件。不可证伪的假设标注「不可验证,置信度降级」。观测窗口须为具体时间或事件节点。
2. 「致命一击」归纳
一句话回答:如果这个分析错了,最可能是因为什么?
若 [X 可观测条件] 发生,当前核心判断 [Y] 失效。
硬约束:必须是条件句(若…则…)。指向具体可观测的失效条件,不是「市场风险」「政策不确定性」等标签。
3. 盲点检查
Final pass 自问:
- 有什么重要变量完全没有被讨论?
- 当前共识最可能忽略什么风险?
- 如果一段时间后回头看,今天最明显的盲点会是什么?
🔍 盲点发现:
- [盲点 1] — 当前: [未知/数据不可得/未覆盖]
- [盲点 2] — 当前: [未知/数据不可得/未覆盖]
硬约束:≥2 条。不能输出空集。
SOP-EV 证据强度
可靠性 ✅/⚠️/❓ | 丰富度 🌐/📡/🔮 | 时效 🕐/📅/🗄️ | 交叉验证 ✓✓/✓✗/—
专项加载与 intent 路由
执行前用 Read 加载对应专项(完整 report --deep 加载全部):
| 用户意图 / CLI | 读取专项 | plan --intent |
|---|---|---|
| 默认完整分析 | modules.md | deep_analysis |
| 舆情深挖 | sentiment.md | sentiment_deep |
| 财报深研 | financials.md | financials_deep |
| 资金行为扫描 | game-theory.md | game_theory |
| 完整 report --deep | 全部专项 + modules.md | deep_analysis + --deep |
规则:专项单独运行仍须 evidence;完整分析用 report --mode full(--mode 允许 brief/full/concise,不用 --mode=sentiment)。
九模块结构详见 references/modules.md。财报 F 规范详见 references/financials.md。
数据来源
详见 references/source-guide.md。
CLI 命令
# 生成采集计划(intent: deep_analysis | quick_check | catalyst_monitor | compare
# | sentiment_deep | financials_deep | game_theory)
uv run python skills/invest-a-stock/scripts/invest.py plan 600176 --intent game_theory
# 按计划采集 + 证据表 + 报告
uv run python skills/invest-a-stock/scripts/invest.py collect 600176 --plan /tmp/plan.json
uv run python skills/invest-a-stock/scripts/invest.py evidence 600176 --plan /tmp/plan.json
uv run python skills/invest-a-stock/scripts/invest.py report 600176 --plan /tmp/plan.json --mode full
# 常用
uv run python skills/invest-a-stock/scripts/invest.py collect 600176
uv run python skills/invest-a-stock/scripts/invest.py report 600176
uv run python skills/invest-a-stock/scripts/invest.py report 600176 --outdir=./reports/
uv run python skills/invest-a-stock/scripts/invest.py report 600176 --deep
uv run python skills/invest-a-stock/scripts/invest.py compare 600176 000858
uv run python skills/invest-a-stock/scripts/invest.py diagnose
uv run python skills/invest-a-stock/scripts/invest.py diff 600176
uv run python skills/invest-a-stock/scripts/invest.py store list
uv run python skills/invest-a-stock/scripts/invest.py collect 600176 --store
运行目录:
code/。必须用uv run python。--mode:brief|full|concise。
代理 / VPN
akshare/baostock 自动绕过 HTTP 代理;diagnose 可查 proxy_detected。规则与 TUN 说明见 source-guide.md。
引用格式(精简)
事实:"数值" [来源: {路径} / {日期}] | 分析:[依据: …;逻辑链: …] | 推测:[推测,待验证]
完整规范:references/references-format.md
技术指标
MA/MACD 仅描述市场状态,不生成交易信号。
采集顺序
SOP-M1 宏观情景(--with-macro)
简报首行:[宏观情景] PMI + CPI + LPR → 政策方向 | VIX + 波动等级 + SOX + 费城半导体指数
示例:[宏观情景] PMI 50.2 + CPI +0.3% + LPR 3.45% →偏宽松 | VIX 18.5 正常 SOX 6,850
diagnose→ 2.plan/collect→ 3.evidence(专项推荐)→ 4.report→ 5.store(可选)
v0.1.9 CLI 扩展
# 质量门
uv run python skills/invest-a-stock/scripts/invest.py rigor 600176 --verify-all [--strict]
uv run python skills/invest-a-stock/scripts/invest.py audit report.md --extract
uv run python skills/invest-a-stock/scripts/invest.py audit report.md --verdict
# 质地检查 / 组合 / 假设追踪
uv run python skills/invest-a-stock/scripts/invest.py check 600176
uv run python skills/invest-a-stock/scripts/invest.py portfolio holdings.json [--stress]
uv run python skills/invest-a-stock/scripts/invest.py thesis 600176 --init|--update|--status
# 价格冲击插值(非风险中性概率)
uv run python skills/invest-a-stock/scripts/invest.py shock 300274 \
--pre-price 163.46 --post-price 140 --eps-base 6.55 --eps-hit 1.64 \
--pe-normal 27 --pe-stressed 20
# 新闻包(公告 + 查询包 + 可选 Tavily)
uv run python skills/invest-a-stock/scripts/invest.py collect 600176 --with-news-pack
TAVILY_API_KEY 可选;无 Key 时 Layer3 静默跳过,Layer1+2 仍产出。
SOP-DEEP(四视角并行)
完整 --deep 报告时分两阶段并行:采集(3 Agent)→ 分析(4 Agent)。
Phase 1 — 并行采集 + 交叉验证(3 Agent 同时启动):
┌─ Collector A: 财务主线(Tushare)─────────────────────┐
│ invest.py collect SYMBOL --deep │
│ --dims "financials,valuation,basic_info" │
│ 产出: /tmp/{symbol}_collect_A.json │
└───────────────────────────────────────────────────────┘
┌─ Collector B: 行情+资金+财务交叉验证(akshare主)─────┐
│ invest.py collect SYMBOL --deep │
│ --dims "financials,quote,kline,valuation" │
│ financials 用 akshare 做主源,与 A 的 Tushare 交叉 │
│ 产出: /tmp/{symbol}_collect_B.json │
└───────────────────────────────────────────────────────┘
┌─ Collector C: 补充数据(股东/研报/事件/行业)─────────┐
│ invest.py collect SYMBOL --deep │
│ --dims "shareholders,research,events" │
│ 产出: /tmp/{symbol}_collect_C.json │
└───────────────────────────────────────────────────────┘
验证规则:
- financials 维度:A(Tushare)vs B(akshare),关键字段(ROE/EPS/毛利率)差异 <5% → 通过
- 差异 ≥5% → 触发 Collector D(Tie-breaker, baostock):
invest.py collect SYMBOL --dims "financials" --source baostock - 三取二投票决定最终值,无法决定则保留差异并标注"跨源分歧"
- 合并 3-4 份 JSON → 完整 collection(用
scripts/merge_collections.py)
Phase 1 耗时: 3 Agent 并行 ≈ 30-40s(vs 串行 80s)
Phase 2 — 四视角并行分析(4 Agent 同时启动):
同时启动 4 个 Agent(用 references/agent-prompts.md 的模板,替换变量):
Agent A: 生意质量 → section_1_business.md
Agent B: 财务与估值 → section_2_financials.md
Agent C: 行业与竞争 → section_3_industry.md
Agent D: 风险与治理 → section_4_risk.md
每个 Agent 的参数: {collection_json_path} = 合并后的 JSON 路径,
{symbol} = 标的代码, {output_dir} = reports/{symbol}-{name}/
Phase 3 — 合成(主编 Claude):
- 等待 4 个分析 Agent 全部完成
- 读取 4 个 section 文件 + 合并后的 collection JSON
- 运行
valuation_calc.py SYMBOL嵌入估值数据(DCF/多情景/预期差) - 合成完整报告 →
reports/{symbol}-{name}/{YYYY-MM-DD-HH-MM-SS}.md,采用以下 LAW 17 金字塔结构。
模板使用说明: 以下
##标题为结构占位符,实际输出时须替换为传递信息量的完整判断句(LAW 17)。段首必须加粗主旨句。
# {name} ({symbol}) — 深度研究备忘录 {date}
## 核心结论
(从 4 Agent section 提炼,≤5 句,每条携带数据+逻辑链)
[证据强度]
## 位置感
周期位置 / 估值位置 / 市场态度 — 三句话定位当前状态
## 模块结论速览
| 维度 | 结论 | 关键数据 | 逻辑链 | 置信度 |
|------|------|---------|--------|:------:|
## 论证展开
(每节标题为完整判断句,段首加粗主旨句,数据→推理→判断一行闭环)
## 多情景参考
(表格:情景 | 假设 | 传导 | 估值区间 | 概率)
## 观察节点
(表格:时间 | 事件 | 验证什么 | 如何修正判断)
## 主要风险
(3-5 条,标注严重度 + 缓解因素)
## 致命风险
> 若 [X 可观测条件] 发生,当前核心判断 [Y] 失效。
## 对抗性假设检验
| 关键假设 | 可证伪条件 | 观测窗口 | 状态 |
|----------|----------|:---:|:---:|
| ... | ... | ... | ✅/⚠️/❓ |
## 盲点扫描
🔍 盲点发现:
- [盲点 1] — 当前: [未知/数据不可得/未覆盖]
- [盲点 2] — 当前: [未知/数据不可得/未覆盖]
## References
(保持现有 LAW 7 格式)
3b. 执行分析合成三步(详见 SOP-QC 上方「分析合成三步」章节):
- 对抗性假设检验:从 4 Agent section 提炼 ≥5 个关键假设,逐一找可证伪条件
- 致命一击:一句话条件句归纳最大风险
- 盲点扫描:检查四视角是否有遗漏维度
- 输出 Claude 对话简报(按第一层模板,一屏内)
- QC 自检:LAW 1-17 逐条验证 + 分析合成三步完整性(对抗性假设检验 ≥5 假设、致命一击条件句、盲点 ≥2 条),尤其 LAW 17(标题是否传递信息量、段首是否有主旨句、简报首屏是否有核心结论)
四视角覆盖内容:
- 生意质量:商业模式 / 护城河 / 管理层 / 价值链
- 财务与估值:DCF 三情景 / 财务健康 / 盈利质量 / 估值位置
- 行业与竞争:波特五力 / 竞争格局 / 产业链利润池
- 风险与治理:快速否决 / 风险信号 / 公司治理 / Known Unknowns
Agent prompt 模板详见 references/agent-prompts.md。 采集/分析阶段的所有 Agent 只调 Bash(invest.py/merge_collections.py),不调 Tushare/akshare API — 不触发限流。
SOP earnings-review(季报/年报后)
- 对比指引 vs 实际(营收/净利/毛利率)
- OCF/净利润是否背离(阈值 0.6)
- 资本开支与产能叙事是否一致
- 更新 thesis
--update假设状态
SOP industry-research / news-pulse
-
collect --with-news-pack获取公告 + 查询包 - 对
query_pack执行 WebSearch/Tavily,回填 NewsCard - 外生冲击假说⑥段:方向 + 可信度 + 来源
- 重大波动时用
shockCLI 计算价格冲击插值比例(附学术声明)