Stock Thesis Tracker — 持仓股跟踪器
一句话概括
围绕你的投资逻辑(Thesis),每天自动告诉你的持仓有没有变化需要关注。
怎么用(3 句话讲完)
- 写逻辑:用自然语言告诉我每只股票的投资逻辑——"我看盐湖是因为锂价中枢抬升 + 钾肥战略属性"
- 说「跟踪持仓」:我自动从 5 路数据源(公告/研报/行业站/新闻/行情)抓增量,逐条标注对你的逻辑是利好还是利空,市场有没有已经定价,异动了帮你溯源
- 要审视时:说「审查这个逻辑」——我帮你找假设漏洞、反方论点、失效路径、隐藏风险,逼你重新想一遍
使用说明
日常跟踪
对 AI 说「跟踪持仓」或「跟踪 [标的名]」。AI 自动完成:
- 抓取 5 路数据源的最新增量信息
- 逐条标注对你的逻辑是利好(+)还是利空(-),市场是否已定价
- 若单日涨跌超阈值(默认 5%),触发 5 维度异动溯源
- 生成结构化日度报告(横截面快照 + 逐标的增量分析 + 一句话结论)
- 更新每只标的的事件日志
示例对话:
你:跟踪持仓 AI:[运行采集 → 分析 → 输出报告]
深度分析(每周)
对 AI 说「深度分析持仓」。在日度摘要基础上增加:
- 短/中/长期逻辑逐段验证(成立/需观察/边际削弱)
- 竞品横截面对比(估值分位、近期催化)
- 估值状态快照(当前 PE/PB 分位 vs 历史)
- 本周预期差全景
建议每周一执行一次。
建立新标的
直接告诉 AI:
「我要跟踪 XX 股票,代码 XXXX,投资逻辑是:[你的逻辑]」
AI 会自动完成所有配置:创建 thesis.md + 配置 portfolio.json + 自动匹配行业信源 + 拆解投资逻辑为跟踪清单。
也可以手动操作(见下方「上手准备」)。
拆解投资逻辑
对 AI 说「拆解 [标的名] 的投资逻辑」。AI 会将你的逻辑拆成:
| 类别 | 跟踪指标 | 优先级 | 信源 | |------|---------|--------|------| | [需求/供给/价格/政策] | [具体可量化数据] | ★★★/★★/★ | [网站/报告] |
日常跟踪时 AI 会按这个清单重点采集对应数据。
对抗式审查
对 AI 说「审查 [标的名] 的投资逻辑」。AI 会:
- 逐条假设挑战——"这条逻辑成立需要什么前提?如果前提不成立最可能的原因?"
- 搜集市场上反对这条逻辑的观点和论据
- 列出最可能击穿你逻辑的 2-3 条具体事件链
- 检查隐藏风险——逻辑对但赚不到钱的场景(估值陷阱、时间成本、杠杆风险等)
建议每月执行一次,或在重大市场事件后立即执行。
修改投资逻辑
直接告诉 AI 你想修改哪个标的的哪部分逻辑。AI 会更新 thesis.md,并自动重新拆解跟踪清单。
上手准备(AI 自动创建更简单,见上方「建立新标的」)
如果需要手动操作:
- 复制
coverage/portfolio_example.json→portfolio.json,编辑为你的持仓 - 复制
coverage/thesis_template.md为每只标的写投资逻辑 pip install akshare pandas- 对 AI 说「跟踪持仓」
IMA 浑水知识库需要手动在 WorkBuddy 中添加(id: 7297249738490228),不添加则自动降级到 WebSearch 替代。
功能概览
| 模式 | 触发方式 | 输出 | 频率 | |------|---------|------|------| | 摘要模式 | "跟踪持仓" / "跟踪[标的名]" | 增量信息标注(+/-/0) + 失效条件检查 + 横截面快照 | 日常 | | 深度模式 | "深度分析持仓" | 短/中/长期逻辑完整验证 + 竞品分析 + 估值状态 | 每周/事件触发 | | Thesis 拆解 | "拆解[标的名]投资逻辑" / 修改 thesis 后 | 关键假设→可跟踪指标→数据清单(含优先级+信源) | 新建/修改 thesis 时 | | 对抗式审查 | "审查[标的名]投资逻辑" / "对抗式审查持仓" | 逻辑漏洞扫描+反方论点+失效路径+隐藏风险 | 按需/定期 |
数据源
| 数据源 | 内容 | 用途 | 是否需要配置 |
|--------|------|------|------------|
| 巨潮资讯网 WebFetch | cninfo fulltextSearch(A股+H股) | 公司公告(JS渲染,AI层WebFetch) | portfolio.json 自动导出 announcement_source |
| 港交所披露易 WebFetch | hkexnews.hk(港股本体) | 腾讯本体公告 | 同上 |
| 行业信源映射表 | 25 行业 × 3 类信源(协会/数据/媒体) | WebSearch site:/keyword 定点搜索 | portfolio.json → industry_sources |
| IMA 浑水调研 | 53k+ 外资研报/电话会 | 行业深度/卖方观点/预期差 | 需要在 IMA 中加入知识库 |
| AKShare | 东方财富个股新闻 | 基础增量新闻 | pip install akshare |
| 新浪实时行情 | A股+港股实时价格 | 盘中异动检测(三源链兜底) | 无需配置,外网可达 |
| WebSearch | 全品类实时信息 | 政策/竞品/共识/事件 | 无需配置 |
已废弃:portfolio.json 中
search_config.ima_cninfo的folder_id配置(原 IMA 巨潮公告库路径)已由 cninfo WebFetch 全量替代,保留字段仅作向后兼容,AI 层不再读取使用。
浑水搜索核心规则
浑水的搜索是话题驱动而非公司名驱动:
| ✅ 有效搜索 | 实测效果 | ❌ 无效搜索 |
|-----------|---------|-----------|
| CATL / BYD / Tencent | 英文ticker直接命中外资研报 | 中文公司名(宁德时代 → 0条) |
| 钾肥 / 碳酸锂 / 机场 / 固态电池 | 行业关键词找到行业报告(含公司分析) | 泛化词(锂矿 / 互联网 → 0条) |
| Potash / ESS | 英文行业词命中外资行业报告 | 股票代码(000792 → 0条) |
核心原则:搜行业不搜公司。 搜"钾肥"能找到盐湖股份完整研报,搜"盐湖股份"反而 0 条。
行业信源自动查表(v5 新增)
系统根据标的 industry 字段自动从 portfolio.json 顶层的 industry_sources 映射表获取行业信源,无需手动配置。
映射规则
- 标的声明
industry: ["基础化工/钾肥化肥", "有色金属/锂业/碳酸锂"] - 系统先试子级 key(精确定位),不命中回退父级
- 每个行业 key 含 3 类信源:协会/官方 + 数据/价格平台 + 行业媒体
- AI 层逐站用
WebSearch site:[站名] [关键词]定点搜索(共 6-9 站/标的)
搜索策略分支
| 站点类型 | 策略 | 示例 |
|---------|------|------|
| SEO 可达 | site:[站名] [关键词] | site:bjx.com.cn 固态电池 |
| paywall/JS 渲染 | [站名] [关键词](去 site:) | smm.cn 碳酸锂 报价 |
| 数据平台 | 优先 WebFetch 价格页 | oilchem.net 钾肥报价表 |
预置覆盖 13 个父级行业(基础化工、电力设备/新能源、互联网/传媒等)+ 12 个子行业(钾肥化肥、锂电设备、速冻预制菜等),新增标的只需声明 industry 即可自动对号入座。
执行流程(MUST 强顺序)
每次执行「跟踪持仓」时,必须严格按以下顺序执行,不可跳过:
Step 1:数据采集
- 运行
fetch_data.py --mode all获取:实时价格 + 异动检测 + AKShare 7天新闻 + 全市场PB + 公告源导出(保存到reports/announcement_sources.json) - 公告采集(两轮):
a) 标的公告:读取
announcement_sources.json,对每只标的用 WebFetch 抓取 cninfo/hkexnews 公告列表(仅取标题+日期,7天时效筛后入库) b) 竞品交叉公告:读 holdings[i].competitors_a / competitors_global,对每个竞品生成 cninfo 搜索 URL(同标生成规则),WebFetch 抓取公告列表(限前 5 条/竞品,避免信息爆炸)。合并为"[标的]+竞品行业公告流",与标的本体公告一同进入时效筛。报告中标注[cninfo-竞品名]区分来源 - 并行搜索 IMA 浑水(行业关键词,5 只标的)。cursor 分页规则:若搜索结果
is_end=false或数据量过大导致截断,用next_cursor逐页获取,累计取 5-10 条最新后停止,避免 token 溢出。 - 读
portfolio.json的industry_sources和每标的industry字段,自动查表获取对应行业协会/数据平台/媒体站点 → 按站点类型选择搜索策略:SEO 可见站用site:[站名] [关键词],paywall/JS 渲染站用[站名] [关键词](去 site: 限制)。 - 并行 WebSearch 补充(stock_news + competitor + thesis_trigger + consensus_search)
Step 2:时效筛 ← 关键步骤,不可跳过
在写入报告之前,逐条检查所有采集到的信息的日期。
- 日期 ≤ 7 天 → 放入「增量信息标注」
- 日期 8-30 天,且仍影响 Thesis → 放入「已知事实」
- 日期 > 30 天 → 丢弃,不写入报告
- 如果一条信息没有明确日期 → 标记为「日期未确认」放在已知事实区
时效筛检查清单:在生成每只标的的报告前,先回答——"这条信息的原始发布日期是哪天?距离今天几天了?属于哪个区域?"
Step 3:双层分析
每条款式标注:
[日期 来源] 事件 → [+] / [-] / [0] ← Thesis影响
→ [超预期] / [符合预期] / [低于预期] / [已定价] / [未定价] ← 预期差
Step 4:生成报告
严格按下方强制模板输出。 横截面表的列名和顺序不可改变。
Step 5:更新 log.md
追加关键事件的日志到每只标的的 coverage/{标的}/log.md。
数据源降级矩阵
| 数据源 | 正常状态 | 降级方案 | 检测方法 |
|--------|---------|---------|---------|
| IMA 浑水 | 搜索返回结果 | 自动切换 WebSearch 增补行业研报/政策搜索 | 搜索返回空或 connector disconnected |
| 巨潮/港交所公告 | WebFetch 正常返回 | WebSearch site:cninfo.com.cn [标的名] 或 site:hkexnews.hk [标的名] 替代 | WebFetch 无公告列表数据 |
| 新浪实时行情 | 返回有效价格 | 新浪空→东方财富push2(重试3次)→腾讯行情(qt.gtimg.cn)→快照回退/占位 | 价格=null |
| 行业信源定点站 | WebSearch site: 有返回 | 降级为普通关键词搜索(去 site: 限制) | 连续3站无返回 |
| WebSearch | 正常返回 | 报告底部标注不可用 | 返回空 |
核心原则:数据源断了不能导致报告不生成。降级后标注,不停机。
强制输出模板(MUST)
A. 横截面快照
放在报告最顶部。列名和顺序不可变:
| 标的 | 收盘价 | 日涨跌幅 | 较上周 | 预期差信号 | 优先级 | |------|--------|---------|--------|-----------|--------|
- 「较上周」:与上一个交易周收盘的累计涨跌幅
- 「预期差信号」:选择最显著的预期差标注(超预期/低于预期/未定价/符合预期)
B. 每只标的章节
## [标的名] (代码) 每日跟踪摘要
### 增量信息标注(≤7天)
[日期 来源] 事件描述
→ Thesis: [+] / [-] / [0]
→ 预期差: [超预期] / [符合预期] / [低于预期] / [已定价] / [未定价]
### 预期差检查
- 市场共识:[当前市场一致预期的核心假设]
- 偏差发现:[新信息与市场共识之间的差距在哪里?]
### 已知事实(8-30天持续背景)
[仍在影响Thesis但超过7天的关键信息]
### 失效条件状态
[逐条检查,标注是否触发]
### ⚠️ 股价异动溯源(仅触发阈值时)
5维度:公司层面 / 行业层面 / 竞品联动 / 大盘资金 / 边际对比
### 一句话结论
> [Thesis判断] + [预期差判断]
C. ⚠️ 异动溯源(触发阈值时)
当单日跌幅 ≥ alert_threshold_pct 时,必须输出完整 5 维度溯源,不可省略为普通跟踪格式。
深度分析模式(周度/事件触发)
触发方式:说「深度分析持仓」。每周一自动执行。
内容要求
深度模式 = 日度摘要骨架 + 以下 4 个额外维度:
1. 短/中/长期逻辑逐段验证
- 对 thesis.md 中每段逻辑,写明当前状态:“成立 / 需观察 / 边际削弱”
- 引述本周增量信息作为证据
2. 竞品横截面对比
- 当前价格位置、估值分位、近期催化对比表
- 回答:“相对竞品,我的持仓被高估还是低估?”
3. 估值状态快照
- 当前 PE/PB 分位 vs 历史分位
- 当前隐含的长期增长预期 vs 我的 thesis 假设
- 标注:“当前估值在定价什么故事?”
4. 预期差全景
- 市场共识(EPS/目标价/关键假设)vs 我的判断
- 本周新增的预期差有哪些?有哪些旧预期差被修复了?
输出格式
# 持仓股深度分析 — YYYY-MM-DD
## 全景透视
[所有标的的横截面对比表 + 预期差矩阵]
## 逐标深度分析
### [标的1]
#### 短/中/长篇逻辑逐段验证
#### 竞品对比
#### 估值快照
#### 本周预期差
### [标的2] ...
频率
- 常规:每周一 08:00 自动执行(模型 deepseek-V4-Pro)
- 手动:市场有重大事件时手动触发
文件结构
项目根目录/
├── coverage/
│ ├── portfolio.json ← 持仓配置 + industry_sources
│ ├── market_pb_latest.json ← 全市场PB分位(单份)
│ └── {代码}_{名称}/
│ ├── thesis.md ← 投资逻辑(必填)
│ ├── log.md ← 边际变化流水账(自动追加)
│ ├── snapshot.json ← 价格快照 + price_history
│ └── news_latest.json ← AKShare新闻快照
├── scripts/
│ └── fetch_data.py ← 数据采集脚本 v4.1
└── reports/
├── YYYY-MM-DD_daily.md ← 日度分析报告
├── fetch_report_latest.json ← 脚本采集汇总(覆盖)
├── intraday_latest.json ← 盘中异动检测
└── announcement_sources.json← 公告源导出(AI层消费)
Thesis 拆解模式(新建/修改投资逻辑时)
触发方式
- 用户说「拆解 [标的名] 的投资逻辑」
- 用户新建或修改 thesis.md 后主动询问是否需要拆解
- 输入:thesis.md 中用户写的投资逻辑文本 OR 用户口述的逻辑
拆解流程(MUST 顺序)
Step T1:提取关键假设 从用户的短/中/长期逻辑中逐段提取隐含假设。每条假设表述为"如果 X 成立,则 Y 成立"。区分三个时间维度。
Step T2:映射为可跟踪指标 将每条假设拆解为可量化、可观测的数据指标。每个指标标注:
- 优先级:★★★(核心,每期必看)/ ★★(重要,每周看)/ ★(参考,月度看)
- 数据来源:具体网站或报告(优先从 industry_sources 查表匹配)
- 跟踪频率:日度/周度/月度
Step T3:构建数据清单 按类别(价格/需求/供给/政策/竞争)组织为结构化表格,包含指标名称、优先级、信源建议。写入 thesis.md 底部的「跟踪数据清单」章节。
示例(盐湖 v2 拆解结果)
[用户输入] 锂价中枢抬升:需求端全球电车+储能IRR拐点,供给端资本开支萎缩+边际成本12万
[拆解输出]
需求-电车:全球新能源车月度销量 ★★★ → 乘联会/SNE
需求-储能:中国储能IRR及容量电价 ★★★ → 国家能源局
供给-资本开支:全球锂矿资本开支数据 ★★★ → IEA/机构研报
供给-成本线:江西锂云母边际成本 ★★ → SMM/百川盈孚
完整的盐湖 v2 拆解结果参考 coverage/000792_盐湖股份/thesis.md 底部的「跟踪数据清单」。
对抗式审查模式(审视投资逻辑)
触发方式
- 用户说「审查 [标的名] 的投资逻辑」
- 用户说「对抗式审查持仓」
- 重大市场事件后用户要求重新审视逻辑
审查流程(MUST 顺序)
Step A1:逐条假设挑战 对 thesis.md 中每条短/中/长期逻辑,依次执行以下检查:
- 隐含假设显性化——"这条逻辑成立需要哪些前提?"
- 假设失效测试——"如果这个前提不成立,最可能的原因是?"
- 未明说的信仰——"作者没说出来但默认相信的是什么?"
Step A2:反方论点矩阵 为每只标的构建市场反方观点表。来源包括:浑水研报中的看空观点、财报中的风险提示、行业竞争者的威胁、WebSearch 的负面讨论。
| 反方论点 | 来源 | 可信度 | 对Thesis的冲击 | |---------|------|--------|---------------| | [反方观点] | [出处] | 高/中/低 | 哪些逻辑会被击穿 |
Step A3:最可能失效路径分析 列出 2-3 条最可能击穿 thesis 的路径(不是泛泛的不利情况,而是具体的事件链),并评估每条路径的触发概率。
Step A4:隐藏风险清单 找出那些"逻辑正确但可能赚不到钱"的场景:
- 估值陷阱:基本面正确,但市场永远不给合理估值(如市场把"稳定盈利"当"没有增长")
- 时间成本:逻辑需要 3-5 年兑现,但持仓期只有 12-18 个月
- 杠杆/仓位风险:正确的逻辑被融资盘/仓位管理放大为亏损
- 相关性风险:标的与大盘/板块高度相关,Beta 掩盖 Alpha
- 流动性风险:小市值标的即使逻辑兑现也无法顺利退出
Step A5:生成审查报告 输出结构化报告,包含:
# 对抗式审查 — [标的名] ([代码])
## 一、逐条假设挑战
[对短/中/长期每条逻辑的挑战分析]
## 二、反方论点矩阵
[表格:反方观点、来源、可信度、冲击评估]
## 三、最可能失效路径 Top 3
1. [具体事件链] — 触发概率: X%
2. [具体事件链] — 触发概率: X%
3. [具体事件链] — 触发概率: X%
## 四、隐藏风险
- [估值陷阱/时间成本/杠杆风险/相关性风险/流动性风险]
## 五、综合评分
- 逻辑稳健度: ★★★☆☆ (评估整体逻辑结构)
- 反方说服力: ★★★☆☆ (反方论点的杀伤力)
- 隐藏风险: ★★★☆☆ (风险严重程度)
- 建议:保持 / 减仓观察 / 重新审视
使用原则
- 不替你决策——审查报告是镜子,不是命令
- 必看隐藏风险——"逻辑正确但赚不到钱"比"逻辑错误导致亏损"更隐蔽
- 定期执行——建议每月一次,或重大市场事件后立即执行
核心分析框架:双层验证
第一性原理
持仓跟踪的本质目的不是"验证自己是对是错",而是识别市场定价与客观现实之间的偏差。
可操作的信号 = (新信息 vs 你的Thesis) + (新信息 vs 市场共识)
两层验证
| 层次 | 对比对象 | 回答的问题 | 信息来源 | |------|---------|-----------|---------| | 第一层:Thesis 验证 | 我的投资逻辑 | "这个信息是否改变了我的判断?" | thesis.md | | 第二层:预期差验证 | 市场共识预期 | "这个信息是否超出/低于市场已有预期?" | 浑水研报 / WebSearch 一致性预期 |
预期差判定
对于每条增量信息,不仅标注对 Thesis 的影响,还需判断市场是否已经定价:
| 标注 | 含义 | 场景示例 |
|------|------|---------|
| [超预期] | 信息好于市场一致预期 | 订单6亿,市场只估了3亿 |
| [符合预期] | 信息与市场预期一致 | 业绩在一致预期±5%范围内 |
| [低于预期] | 信息差于市场一致预期 | 碳酸锂跌破15万,市场原以为16万是底 |
| [未定价] | 市场尚未充分反应 | 新政策刚出台,卖方报告还没跟上 |
| [已定价] | 市场早已反应 | 连续下跌后,负面信息已经price-in |
重要:一条信息可能同时是 [+]利好Thesis 但 [已定价],这意味着它对股价已经没有推动力。最值钱的信号是 [+]利好Thesis + [未定价]——这是买入窗口。
如何获取市场共识
- 浑水研报:从外资/内资卖方的目标价和一致预期中提取
- WebSearch:搜索
[标的] 一致预期 2026 EPS券商 目标价 [标的] - 近期价格:价格本身隐含了市场当前定价
- 估计修正方向:最近一个月 EPS 估计是上调还是下调?
在 portfolio.json 的 search_config 中新增 consensus_search 字段配置共识预期搜索。
重要原则
- 围绕 Thesis 分析 — 所有结论必须映射回你的投资逻辑
- 增量思维 — 只关注边际变化,不重复已知信息
- 失效条件优先 — 首先检查 Thesis 的失效条件是否被触发
- 预期差优先于方向 —
[+]利好+[已定价]不如[0]中性+[未定价]有价值 - 不替你做决策 — 提供分析框架,买卖由你决定
- 时效纪律 — 每日摘要只展示最近 7 天增量,老数据放背景区
依赖
- Python 3.8+ (
pip install akshare pandas) - IMA MCP 连接(用于搜索浑水调研知识库;IMH 巨潮公告库已由 cninfo WebFetch 替代)
- 网络连接(新浪/东方财富/腾讯实时行情 + cninfo + hkexnews + WebSearch)
微信扫一扫