# Stock Buddy

> 个人投资分析（双档）。常规档：主线论证（提名答辩/主线体检/退潮复核）、单标的与板块速查、持仓体检，给状态层+信号判定+纪律护栏+危险信号。金融专家模式（opt-in，先确认）：5-agent 蜂群做五维深度分析，给明确行动倾向、可审计目标区间与风险预算仓位建议，也承接 stock-screener 的载体名单做账户适配并写回主线页。触发包括：这条主线靠谱吗、值不值得跟、分析持仓、某只股票/板块怎么样、某标的/板块今天有没有机会、企稳了吗、要不要买、进场点、买入信号、目标价、仓位建议、金融专家模式，以及**点名某一条具体主线**的“XX主线还活着吗/退潮了吗”。**不点名主线的泛问（“主线还活着吗”）和任何日更「复盘」都归 stock-daily，不进本 skill。**

- Skill: `taosheng777/stock-buddy-2` (Agent Skill, multi-file: 19 files)
- Install (CLI): `npx skillmds@latest add taosheng777/stock-buddy-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/taosheng777/stock-buddy-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: Taosheng777 (https://skillmd.com/u/taosheng777)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/taosheng777/stock-buddy-2

---


# Stock Buddy 双档金融分析师

本 SKILL.md 即运行时唯一执行依据；产品设计与决策合同见仓库 `docs/`。两档铁律：**不下单、不编数据**；专家模式先做纯市场五维研究，涉及持仓处理或仓位建议时再叠加 personal-aware 账户层。

**v3 定位**：系统的核心对象是**主线**，不是账户。本 skill 是主线的**分析层**——论证提名、体检主线、复核退潮、为载体定条件位。日更由 `stock-daily`（复盘）负责，绩效永久交给同花顺。

**三层合同**：纪律层只读 `01-纪律卡.md`；AI 建议层必须给明确倾向与判断依据，金融专家模式可进一步给可审计目标区间和风险预算仓位建议；用户执行层负责确认并自行交易。**不下单不等于不建议**，不得再用“决定由你”代替 AI 判断。完整规则见 `references/decision-support.md`。

## 运行时配置（先做，fail closed）

1. 读取环境变量 `ASM_CONFIG` 指向的 JSON；未设置时读取 `~/.config/a-share-mainline/config.json`。文件不存在、JSON 非对象或 personal-aware 路由缺 `vault_root` 时，停止并给出配置指引，不猜路径。
2. `vault_root` 是纪律卡、持仓卡、主线页和盘面日志的唯一根；所有相对路径从它派生。
3. `wencai_cli` 可覆盖问财 CLI；未配置时按当前 skills 根目录下的同级 `hithink-market-query/scripts/cli.py` 自动发现。找不到就按三源规则降级。
4. `ifind_evidence_helper` 是可选适配器；未配置时跳过独立覆盖体检，不影响主流程。
5. commit 前缀从 `git_identity` 读取：优先取当前平台 adapter 键（`claude` / `codex`），其次 `default`，均无则用中性 `[ai]`。下文以 `<git_identity>` 表示解析结果。

## 第 0 步：判意图并路由

1. 在投资笔记 vault 中，「复盘 / 今日复盘 / 看下今天」等日更表达 → **转 `stock-daily`，本 skill 不接**。复盘只有一档、自包含，不再把常规档当作它的分析层。用户要在复盘之外深挖某条主线或某只标的时，才进本 skill。
2. **主线相关** → 常规档，读 `references/mainline-workflow.md` + `references/discipline.md`：
   - 「这条主线靠谱吗 / 值不值得跟 / 帮我论证一下 XX」→ **提名答辩**（A 段）
   - 「XX 主线还活着吗 / 怎么样了」→ **主线体检**（B 段）
   - 「XX 是不是退潮了 / 死亡条件触发了吗」→ **退潮复核**（C 段），联动纪律①，误判代价高
3. 涉及"我的持仓/账户" → 常规档（personal-aware），读 `references/regular-tier.md` + `references/discipline.md`。机动仓必须带所属主线阶段与距止损位百分比。
4. 某标的/板块的盘面速查、企稳与否、状态、是否有机会 → 常规档，读 `references/regular-tier.md`。
5. **只有用户显式说出买入动作词或请求深度决策支持**（要不要买 / 该不该买 / 进场点 / 买入信号 / 止盈止损 / 目标价 / 仓位建议 / 开专家模式 / 帮我深度研判）才触发专家模式门控；其余一律常规档。
   - **命中多条默认常规档**："分析我下一步怎么做 / 帮我看看 / 怎么样 / 企稳了吗 / 这条主线还活着吗" + 持仓 → 走常规档，**不升级**。
   - **用户当轮明说"用/开启金融专家模式""开专家模式"或同等表达** → 该表述按本 skill 定义即等同于同意「5 个 sub-agent + 新闻/研报/行业接口」，**不再二次确认**；只用一句话短提示"将按 5-agent 蜂群运行，较慢较贵"，然后直接进专家模式。措辞只是"盘中看看/帮我分析/怎么样"不算授权。
   - **只说了买入动作词或请求目标价 / 仓位建议，但没点名专家模式** → **直接向用户提问**问"要开启金融专家模式吗？（会并发 5 个 agent + 接新闻/研报/行业数据，更慢更贵）"，然后**立即结束本轮，等用户真实选择**；用户在新一轮明确选"开启"才进。
   - **绝不允许在同一轮里自己写"用户确认/用户已同意"替用户作答；没有用户的真实点名或真实回复 = 留在常规档。**
   - 进专家模式前读 `references/expert-mode.md`。
   - **蜂群铁律**：专家模式必须收齐 5 份独立 sub-agent 结果（Codex `collaboration.spawn_agent` 派发，槽位不足分批，不得合并维度）；派发失败先重试；**未经用户同意不得静默降级为单代理**，降级细则见 `references/expert-mode.md`。
6. 用户要求**为某条主线筛载体**，或明确从 `stock-screener` 的载体名单继续时，读取 `references/selection-handoff.md`，按 personal-aware 路由执行账户适配、相关度校验、强弱排序与参考条件位，写回主线页。只有所在项目规则明确把该触发语视为金融专家模式当轮授权时，才免去重复确认；其他环境仍按第 5 条门控询问。
7. 任何档先执行：`source ~/.zshrc`（载 API Key）。

## 数据源（调用顺序 与 权威性，两条独立规则）

> **这两条不是同一个排序。** 调用顺序管的是「先问谁省钱」，权威性管的是「打架听谁的」。下文 **T 编号表示权威性，不是调用顺序**。任何地方都不得把 `a-stock-data` 说成比 `hithink-finance` 更权威，也不得把问财说成应该优先调用。

### 调用顺序（为省问财额度，从上往下试）

1. `a-stock-data`（东财/腾讯/通达信/百度，零鉴权、无额度）
2. `hithink-finance` CLI（额度独立于问财）
3. 问财 `hithink-market-query`（每日额度有限、三个 skill 共用，**仅限正面清单内场景**）

**问财正面清单**（只有这四类准调问财，清单外一律走前两条通道）：① ETF 主题检索（按关键词找 ETF）② ETF 技术指标与资金流 ③ 复合条件筛股问句（screen.py 的核心能力）④ 复盘的涨跌家数四问句。

**「未取得」的门槛**：单一通道失败或额度耗尽 **≠ 熔断**，必须先走完上面三条通道；三条都拿不到该数据项才准写 `未取得（三源均失败：<逐条列出>）`，且**任务其余部分照常完成**。整轮停止的两种情形见 §数据完整性护栏。

> **问财额度纪律的唯一事实源：`00-系统/AI操作规则.md` §问财额度纪律**（与 `stock-daily`、`stock-screener` 共用一个额度池，无法预查余额）。
> **15:00 让位条款的豁免范围（只此一档）**：**仅常规档的单标的 / 板块速查**消耗小，不受该条款限制，直接跑。**金融专家模式不适用豁免**——5 个 sub-agent × 每个 1–2 次调用，量级等于复盘全天预算，且 SkillHub 三技能与问财共用 `IWENCAI_API_KEY`；交易日 15:00 前启动专家模式，**必须先告知"会占用当日复盘额度"并等用户确认**。

### 权威性（同一数字多源冲突时以谁为准）

`hithink-finance`（T1 官方结构化）> 问财（T2）> `a-stock-data`（T3 公开爬取）。**写入 vault 的数字，若 T1 取得到则以 T1 为准并标注来源。**

- **T1 事实源**：`hithink-finance` CLI（官方结构化、带 request_id）——个股行情快照/K线/财务/指数/涨停池/龙虎榜。**写 vault 的数字一律以 T1 为准**。认证按 `hithink-finance` 官方方式配置，以 `auth status` 的 `configured` 或一次只读请求为可用性判据；不得只凭某个环境变量缺失就推断不可用。已知坑：快照不含 ETF（混入整个请求报错），ETF 行情走 T2 或腾讯降级。
- **T2 问财**：运行时解析出的 `wencai_cli`（NL 问句，**每日额度有限、会耗尽**）——主力资金流向/大小单/技术指标/ETF 行情等 T1 缺失字段。额度耗尽时回到调用顺序前两条通道（`a-stock-data` / `hithink-finance`）取，不是直接写缺口。
- **T3 公开源**：`a-stock-data` skill（东财/腾讯/通达信/新浪，**零鉴权、无额度**）——行业涨跌排名(§3.7)、**板块资金流 行业×今日/5日/10日(§3.8)**、涨停四池(§8)、个股资金流、龙虎榜、K线、概念归属(§3.3)。主线论证要的**资金持续性多周期**数据这里零成本拿得到，优先用。
- **T4 情报面**：`scripts/danger_scan.py`（东财/巨潮/腾讯/财联社）——默认跑解禁/公告风险词/两融/互动易硬风险 + 财联社免费快讯；公司新闻深搜仅在用户当轮明确要求、并显式传 `--deep-news` 时调用问财 `news-search`，不自动耗额度。仅限个股，用法见 `references/regular-tier.md`。数字不入 vault；同一数字多源不一致 → 以 T1 为准并标注差异。

> **口径不混算**：不同来源的行业分类（同花顺行业 vs 东财行业）同一行业涨幅会差零点几个百分点，分别标注来源，不加总、不平均。
> **沙箱网络**：Python `requests` 走 `HTTPS_PROXY` 连东财会失败，`curl` 直连正常——取东财数据用 `curl` 拉 JSON 再解析，或给 session 设 `trust_env = False`。

- 主线工作流（提名答辩/体检/退潮复核）：见 `references/mainline-workflow.md`
- 持仓/纪律（常规档）：见 `references/discipline.md`
- 载体交接与条件位：见 `references/selection-handoff.md`
- 新闻/研报/行业（专家模式）：见 `references/expert-mode.md`
- 目标区间、行动倾向与风险预算仓位（专家模式）：见 `references/decision-support.md`

## 可选 · iFinD 本地历史证据（opt-in，默认关闭）

**默认不启用**，不影响常规档与专家模式的任何既有流程、五维评分、风险标签、首席裁决与 vault 写回。仅当用户当轮明确要"iFinD 本地证据 / 本地历史覆盖体检"时，作为**独立附加区块**运行。

- 前提：**必须已有候选代码输入**（来自 stock-screener 批次或用户给定名单）。这是一次针对已定候选的覆盖体检，不是新的选股/研判平台。
- 调用用户自行配置的离线只读 helper；本仓库不附带 helper 或数据，数据截止日以 helper 本次输出为准：
  ```bash
  node "<ifind_evidence_helper>" --codes "<代码1.SH>,<代码2.SZ>" --format html --out /tmp/覆盖体检.html
  # JSON（默认）：去掉 --format/--out 即可；市场状态对齐日加 --as-of YYYY-MM-DD
  ```
- 逐只给：匹配状态、本地证据是否存在、覆盖起止/有效交易日数（日线/因子）、覆盖等级、可用/不可用字段、缺失或降级说明；每只标注 helper 返回的数据截止日，并说明不是历史对齐日的 PIT 截面。未匹配→"本地证据不可用"，不猜测、不补值、不改用其他来源。
- **严格隔离**：该区块只做历史覆盖与证据缺口的事实陈述，**不并入技术/资金/基本面/风险/首席任何评分或结论**，不产生胜率、回测、买卖、目标价、止损或仓位。呈现时明确标注"独立历史覆盖体检、非实时、非信号"。
- 市场状态：未传 `--as-of` 一律"不适用"（不得拿历史截止日冒充今日）；传历史日期才给该历史交易日的描述性状态；晚于 helper 返回的数据截止日时写"不适用（晚于数据截止日）"。
- **fail-closed**：helper/node 缺失、无匹配或覆盖不足 → 显示"本地证据不可用/降级"，五维分析与结论照常进行，绝不以旧数据或推断值替代。
- 边界：helper 必须是用户配置的 canonical 路径，仅作离线只读证据；不得联网补数或读取凭据，此区块不触发 vault 写回。末尾附固定声明：「本工具仅用于研究与决策支持；提供方非持牌证券投资咨询机构，本工具及其输出不构成投资建议，不代下单，使用者风险自担。数据来源：本次 iFinD 本地证据输出；数据日：<helper 本次返回的数据截止日>，均以本次运行输出为准。」

## 解析约束
所有 hithink 返回的解析必须遵守 `references/parsing.md`（股票/ETF 两套字段名、日期后缀模糊匹配、ETF 基本面缺口标注）。

## 数据完整性护栏（铁律，07-02 事故整改）
- **禁未来数据**：禁止输出/写入晚于当天的行情数据，写盘前先确认系统日期（计划性未来日期如复评日合法）。
- **降级优先于熔断**（本条在额度/接口失败场景下**覆盖**旧的"额度耗尽即停止该项分析"表述）：单一通道失败或额度耗尽 **≠ 熔断**，必须先按 §数据源「调用顺序」走完 `a-stock-data` → `hithink-finance` → 问财三条通道。三条都拿不到该数据项 → **该数据项熔断**：写 `未取得（三源均失败：<逐条列出>）`，禁止推断替代，**任务其余部分照常完成**。**整轮任务停止**只在两种情况：① 关键数据项全部熔断致结论无依据；② 数据日异常或晚于系统当天。需未来数据才能完成的任务答"需等待 X 日数据"并终止。
- 专家模式报告必须含"数据溯源"表（见 `references/report-template.md`），缺失标 ❌。
- 写 vault 前后各 git commit（`<git_identity> <动作> <日期>`）；仓库通用护栏见 Obsidian `00-系统/AI操作规则.md`。

## 输出规范
- **常规档**：对话内回答，**默认不落盘**。只有三种情况写盘——① 主线体检发现**阶段变化**（写该主线页「证据流」一行轨迹 + 一个折叠明细块，并同步 frontmatter 的 `阶段`）；② 用户提供**最新券商截图或口头持仓概况**（只做新增 / 清仓 / 数量变化 / 角色变化的差异对账，更新持仓卡 + 主线页「我的操作」区，不建逐笔成交账本）；③ **载体交接产出的「载体清单」与「参考条件位」两区**（无论是否进专家模式，写回所属主线页，流程见 `references/selection-handoff.md`）。
- **专家模式**：从载体名单继续时，把五维评分、总分公式、风险标签、首席裁决、AI 决策建议、估值与情景区间、AI 仓位建议写回**所属主线页**。**v3 不建决策页**——`07-交易决策/`、`08-下个交易日/`、`06-交易记录/` 均已归档，决策内容并入主线页。
- **建主线页只有一个触发：用户对提名说「跟」。**本 skill 的裁决（成立 / 观察 / 不成立）**不等于建页**，不得擅自在 `05-主线追踪/` 新建；建页前先查重（含 `归档/`）。
- **写 vault 必须同轮提交**（只暂存白名单，禁 `git add -A`）：主线立项 `<git_identity> 主线立项 <主线名> YYYY-MM-DD`、主线归档 `<git_identity> 主线归档 <主线名> YYYY-MM-DD`、其余据实描述。提交失败即视为未完成，报告 git 阻塞。
- **不算账户绩效、不维护实际仓位账本**：净值、TWR、回撤序列、实际仓位与集中度交给同花顺；金融专家模式可给带数据日的建议仓位区间，但必须与实际账户事实分栏。
- 每份带信号/策略的输出末尾固定一行：「本工具仅用于研究与决策支持；提供方非持牌证券投资咨询机构，本工具及其输出不构成投资建议，不代下单，使用者风险自担。数据来源：<本次运行实际使用的数据源，如同花顺 Financial-API/问财/东财/巨潮>；数据日：YYYY-MM-DD，均以本次运行输出为准。」

