持仓股跟踪器

SKILL研究检索
研究检索 未标注权限 许可证不明确
安装这个技能

围绕你的投资逻辑构建闭环:5 路数据源自动采集 → 双层验证 → 异动 5 维度溯源。4 种模式:日常跟踪、深度分析、Thesis 拆解、对抗式审查。标的声明行业即自动匹配信源,竞品公告交叉采集。不替你决策,帮你看到自己没看到的。

一句话选型结论

按资料字段整理

持仓股跟踪器是研究检索类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类研究检索 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_c2b475a3/stock-thesis-tracker
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

研究检索
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_c2b475a3仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791717750
正文体量85.3 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
查资料并整理出处

让模型按主题查资料,并把引用来源整理成清单。

网页与文献要点提炼

把长文、论文、网页压成能直接看的要点。

竞品与行业汇总

按关键词汇总竞品动态与行业信息。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在研究检索场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
持仓股跟踪器当前 未标注权限 未标注 未标注 未标注 有
寻找技能 浏览器控制 GitHub 仓库 3120.0 万 Codex、Claude、Cursor 有
自我改进 Agent 接触敏感数据 ClawHub 市场 1646.4 万 OpenClaw 有
灵魂追踪 联网访问 GitHub 仓库 758.9 万 Codex、Claude、Cursor 有
自我完善 联网访问 ClawHub 市场 682.9 万 OpenClaw 有
微软代工厂 调用外部服务 GitHub 仓库 661.4 万 Codex、Claude、Cursor 有

SKILL.md 全文

85.3 KB
模型实际读到的说明书原文,来自技能仓库

Stock Thesis Tracker — 持仓股跟踪器

一句话概括

围绕你的投资逻辑(Thesis),每天自动告诉你的持仓有没有变化需要关注。


怎么用(3 句话讲完)

  1. 写逻辑:用自然语言告诉我每只股票的投资逻辑——"我看盐湖是因为锂价中枢抬升 + 钾肥战略属性"
  2. 说「跟踪持仓」:我自动从 Wind 专业数据(行情/财务/公告/新闻/宏观/行业景气/板块大盘情绪)+ 知识星球(券商点评/外资研报/专家交流,看你这行今天在讨论什么、预期什么) + 行业信源多路抓增量,先拆清涨跌里多少是市场给的、多少是公司自己的,再逐条标注对你的逻辑是利好还是利空、市场有没有已经定价,异动了帮你溯源
  3. 要审视时:说「审查这个逻辑」——我帮你找假设漏洞、反方论点、失效路径、隐藏风险,逼你重新想一遍

使用说明

日常跟踪

对 AI 说「跟踪持仓」或「跟踪 [标的名]」。AI 自动完成:

  1. 先看市场:抓大盘/板块/主题指数,判断今天的风向和资金流向
  2. 再看预期:扫知识星球当下热点(券商点评/外资研报/专家交流),看市场今天在讨论什么、预期什么
  3. 再看景气:抓行业量价库存指标(EDB),判断生意本身在变好还是变差
  4. 最后看个股:多路数据源抓增量信息,并拆出涨跌里多少是板块带的、多少是公司自己的
  5. 逐条标注对你的逻辑是利好(+)还是利空(-),市场是否已定价
  6. 若满足异动判定任一条件(跌幅 ≥ 默认 5% 阈值 或 |z| ≥ 2σ),触发 7 维度异动溯源
  7. 生成结构化日度报告(市场环境 + 今日热点 + 横截面快照 + 逐标的增量分析 + 一句话结论)
  8. 更新每只标的的事件日志

示例对话:
> 你:跟踪持仓
> AI:[运行采集 → 分析 → 输出报告]

深度分析(每周)

对 AI 说「深度分析持仓」。在日度摘要基础上增加:
- 短/中/长期逻辑逐段验证(成立/需观察/边际削弱)
- 行业景气周期定位(更长序列的 EDB 量价库存,判断在产能/库存周期哪个阶段)
- 板块趋势与个股背离检查(板块涨而个股跌 = alpha 为负,要查原因)+ 板块估值历史分位
- 竞品横截面对比(估值分位、近期催化、财务横截面)
- 估值状态快照(当前 PE/PB 分位 vs 历史)
- 本周预期差全景

建议每周一执行一次。

建立新标的

直接告诉 AI:

> 「我要跟踪 XX 股票,代码 XXXX,投资逻辑是:[你的逻辑]」

AI 会自动完成所有配置:创建 thesis.md + 配置 portfolio.json + 自动匹配行业信源 + 拆解投资逻辑为跟踪清单。

也可以手动操作(见下方「上手准备」)。

拆解投资逻辑

对 AI 说「拆解 [标的名] 的投资逻辑」。AI 会将你的逻辑拆成:

类别 跟踪指标 优先级 信源
[需求/供给/价格/政策] [具体可量化数据] ★★★/★★/★ [网站/报告]

日常跟踪时 AI 会按这个清单重点采集对应数据。

对抗式审查

对 AI 说「审查 [标的名] 的投资逻辑」。AI 会:

  1. 逐条假设挑战——"这条逻辑成立需要什么前提?如果前提不成立最可能的原因?"
  2. 搜集市场上反对这条逻辑的观点和论据
  3. 列出最可能击穿你逻辑的 2-3 条具体事件链
  4. 检查隐藏风险——逻辑对但赚不到钱的场景(估值陷阱、时间成本、杠杆风险等)

建议每月执行一次,或在重大市场事件后立即执行。

修改投资逻辑

直接告诉 AI 你想修改哪个标的的哪部分逻辑。AI 会更新 thesis.md,并自动重新拆解跟踪清单。


上手准备(AI 自动创建更简单,见上方「建立新标的」)

如果需要手动操作:

  1. 复制 coverage/portfolio_example.json → portfolio.json,编辑为你的持仓
  2. 复制 coverage/thesis_template.md 为每只标的写投资逻辑
  3. pip install akshare pandas
  4. 对 AI 说「跟踪持仓」

> v5.7 数据源优先级:Wind Alice(硬数据)+ 知识星球(市场预期,主源) 为必配;IMA 浑水知识库(id: 7297249738490228)可选——仅回溯完整研报原文时才需要,不添加则日常跟踪不受影响。


功能概览

模式 触发方式 输出 频率
摘要模式 "跟踪持仓" / "跟踪[标的名]" 市场环境与板块情绪 + 今日市场在讨论什么(星球热点) + 行业景气(EDB) + 增量信息标注(+/-/0) + 失效条件检查 + 三层归因横截面快照 + 波动率标尺(σ20/z-score/一年分位) 日常
深度模式 "深度分析持仓" 短/中/长期逻辑完整验证 + 竞品分析 + 估值状态 每周/事件触发
Thesis 拆解 "拆解[标的名]投资逻辑" / 修改 thesis 后 关键假设→可跟踪指标→数据清单(含优先级+信源) 新建/修改 thesis 时
对抗式审查 "审查[标的名]投资逻辑" / "对抗式审查持仓" 逻辑漏洞扫描+反方论点+失效路径+隐藏风险 按需/定期

数据源

优先级 数据源 内容 用途 配置
★★★ 首选 Wind Alice 行情快照/财务/估值分位/公告/新闻/事件/股东/技术指标/风险/宏观/板块与大盘指数/行业景气指标(EDB) 一站式结构化数据,可追溯 连接 Wind 连接器
★★ 兜底 巨潮/港交所 WebFetch cninfo + hkexnews 公告 Wind 公告不可用时 portfolio.json → announcement_source
★★ 兜底 脚本三源链 新浪→东方财富→腾讯行情 Wind 行情不可用时 无需配置
★★ 兜底 AKShare 东方财富个股新闻 Wind 新闻不可用时 pip install akshare
★★★ 市场预期主源 知识星球 zsxq-cli 券商点评 / 外资研报 / 专家交流 / 当日异动快评 市场当下在讨论什么、预期什么(目标价/业绩预测/一致预期)+ 叙事解释 + 数据口径变更预警 —— v5.7 起替代浑水作为预期差判定的第一来源 portfolio.json → zsxq_groups
★ 可选 IMA 浑水调研 53k+ 外资研报/电话会 仅在需要完整研报原文时调用;日常预期差判定已由知识星球覆盖(星球更快、更贴当下) IMA 知识库
★★ 补充 行业信源映射表 25 行业 × 3 类信源 行业定点 WebSearch portfolio.json → industry_sources
★★ 补充 WebSearch 全品类实时信息 政策/竞品/共识 无需配置

> 已清理:旧版 search_config 配置块(含 ima_cninfo.folder_id 巨潮公告库路径)已从 portfolio.json 移除。公告统一走 Wind get_company_announcements,Wind 不可用兜底走 cninfo/hkexnews WebFetch。


Wind Alice 数据接入(v5.2 新增)

Wind Alice 是 AI 层的 MCP 工具,脚本层(fetch_data.py)无法调用。因此 Wind 作为 AI 层第一优先数据源,脚本三源链降为兜底。连接 Wind 连接器后,以下所有数据优先走 Wind。

windcode 规则

交易所 后缀 示例
深交所 .SZ 000792.SZ / 300750.SZ
上交所 .SH 600897.SH
北交所 .BJ 920522.BJ
港股 .HK 00700.HK

每只标的的 wind_code 已写入 portfolio.json,竞品的 competitors_wind_codes 也已预生成。

> 已知代码不一致(纳科诺尔):symbol=688047(688 是科创板前缀,历史遗留错误),真实北交所代码是 em_code=920522。
> 处理规则(不要"修正" symbol):symbol 维持 688047 不变——coverage/688047_纳科诺尔/ 文件夹路径、log.md、snapshot.json 全部依赖它,改动会牵动所有历史引用。所有外部数据源(Wind、行情接口)统一用 wind_code=920522.BJ / em_code=920522 绕开。脚本侧已由 exchange=北交所 正确推导(v4.0 修复)。

跟踪需求 → Wind 工具映射(核心)

跟踪需求 Wind 工具 关键参数 替代的旧数据源
实时价格+涨跌幅+主力资金+PE/PB/股息率/市值 get_stock_price_indicators windcode 批量逗号分隔;indexes 逐字取清单 新浪三源链 + 乐估全市场PB
周涨跌幅/52周高低/年初至今 同上,indexes 加「5日涨跌幅」「52周最高」 手工算「较上周」
日K/周K get_stock_kline windcode + begin_date/end_date + period —
财务(ROE/毛利率/营收净利) get_stock_fundamentals question 自然语言 深度分析手工查
PE/PB/股息率历史分位 get_stock_fundamentals question 含「历史分位」 乐估全市场PB
公司公告(年报/季报/分红) get_company_announcements query + top_k cninfo WebFetch
财经新闻 get_financial_news query + top_k AKShare 新闻
分红/增发/减持/解禁/ST/诉讼 get_stock_events question 失效条件手工搜
股东结构/前十大/解禁时间表 get_stock_equity_holders question 融资盘/解禁手工搜
技术指标/连涨连跌/新高新低 get_stock_technicals question —
Beta/波动率/最大回撤 get_risk_metrics question 隐藏风险手工估
大盘/指数行情+资金面 get_index_price_indicators windcode 000300.SH 等 异动溯源「大盘资金」
行业指数估值 get_index_fundamentals question 行业估值对比
宏观/行业时间序列(碳酸锂价/储能装机) natural_language_get_edb_data executionMode + question WebSearch 碎片搜
跨实体聚合/竞品对比 get_financial_data question 竞品横截面手工算
公司身份/行业分类(建仓校验) get_stock_basicinfo question —
日内分钟走势(异动形态) get_stock_quote windcode + begin/end + count=-20(从后往前取,控体积) 只能看收盘价的空白
大盘/板块行情+情绪(宽度/资金/强弱) get_index_price_indicators windcode 逗号分隔;indexes 加「上涨家数,下跌家数,平盘家数,换手率,近5日主力净流入额」 「板块联动」口头判断
行业景气指标(量/价/库存/产能) natural_language_get_edb_data 仅提数 + 已固化代码,observation=4~6 WebSearch 碎片搜
板块指数 K 线(趋势/beta 归因) get_index_kline windcode + begin_date/end_date + period —
板块指数估值(PE/PB/分位) get_index_fundamentals question 含「市盈率 市净率 历史分位」 —
ETF/REIT 行情(贴水率/IOPV) get_fund_price_indicators windcode 如 508039.SH —
基金分红/分派(REIT 分派率验证) get_fund_financials question 含「分红次数/单位分红/分红总额」 手工翻招募书

效率要点

  1. 一次 get_stock_price_indicators 批量调用即可拿到全部持仓的价格、涨跌幅、主力资金净流入、PE(TTM)、PB、股息率、总市值——原来要脚本+乐估+WebSearch 三个数据源拼。
  2. indexes 字段值必须逐字取自工具可选值清单(如「涨跌幅」「市盈率(TTM)」「市净率(LF)」「近5日主力净流入额」),不能自造字段名。
    - ⚠️ 实测坑:用「市净率」返回 0.000,必须用「市净率(LF)」才返回真实值(LF=最新财报口径)。
    - 港股代码 Wind 会规范化为 4 位(00700.HK → 返回 0700.HK),传 00700.HK 或 0700.HK 均可。
  3. 港股(腾讯 00700.HK)用同一套股票工具,代码 .HK 后缀。
  4. 北交所(纳科诺尔)Wind 可能数据不全,若 get_stock_price_indicators 返回空,回退脚本腾讯行情(qt.gtimg.cn 含北交所)。
  5. Wind 取价后必须落盘(见下方「价格落盘」),否则 snapshot.json 的 price_history 会断档。
  6. 时间序列类工具必须控体积:get_stock_quote 单日约 240 条、get_stock_kline 长区间按天放大、natural_language_get_edb_data 宽泛词 318KB——三者都会撑爆上下文。规则:分钟级用 count=-20;K 线限定日期区间;EDB 一律两步走(见下)。
  7. 指数快照支持超大批量的逗号分隔(实测一次取 18 个指数正常返回),大盘+行业+概念可以一次调用拿全,不必分批。但任一代码无效会导致整批失败,新代码先单独验证。
  8. EDB 批量提数以最低频指标对齐(实测 S6137468,S5479685 取 observation=4 正常返回且体积小)。混合月频/年频指标时会按最低频补齐,别把日频和年频混在一次调用里。

⚠️ EDB 宏观指标:必须两步走(实测硬规则)

natural_language_get_edb_data 用 executionMode="搜索并提数" + 宽泛词会返回 318KB 直接 token 溢出(实测「碳酸锂价格」)。必须拆两步:

步骤 executionMode question 返回
① 找代码 仅搜索 「电池级碳酸锂 现货均价」 约 11 个指标的 meta(含 code/单位/频率/更新日期),精简不溢出
② 取数据 仅提数 指标代码,如 S5811336 时间序列数值

禁止:搜索并提数 + 宽泛词。仅提数 可逗号分隔多代码批量取:S5811336,D6067904。

指标代码一旦验证可用,固化进 portfolio.json 的 wind_edb_codes,下次直接「仅提数」,不再重复搜索。

已固化的盐湖股份指标(2026-09-21 实测验证):

指标 EDB 代码 单位/频率 说明
碳酸锂价格(电池级99.5%国产) S5811336 元/吨 / 日 Wind 官方源,thesis 头号指标
碳酸锂注册仓单量 D6067904 手 / 日 广期所,库存代理变量
钾肥现货价 S5470454 元/吨 / 日 化工在线,钾肥端主价格锚(有真实波动)
钾肥港口库存(主要港口合计) S5444348 万吨 / 周 隆众,进口供给代理,交叉判读的价格对手方
氯化钾到站价(青海盐湖) S5424440 元/吨 / 日 隆众,盐湖自家报价,⚠️ 已僵死见下
~~氯化钾市场价(俄白62%边贸)~~ ~~S9984052~~ — 已报废:无权限,由 S5470454 替代

> ⚠️ 报价类指标要先查「是否僵死」:S5424440(盐湖到站价)自 2026-05-21 起连续 4 个月钉死在 3100 元/吨,任意时间取数都一样——这种指标没有边际信息量,用它做判断会得出"价格稳定"的错误结论。同期 S5470454 从 3090 走到 3075,才是可用的价格信号。取值后先看近 N 期是否完全相同,全等则视为僵死并在报告中标注。

> 实测样例(2026-09-18):碳酸锂 S5811336 = 134,360 元/吨,较 8 月的 14.6 万继续下行——这类日频数据替代了原来 WebSearch 的碎片搜索。

行业基本面数据:从「个股指标」升级到「景气度」

> v5.5 设计原则:机构持仓是季频、滞后 1-2 个月的存量数据,且只反映"谁拿着",不反映"生意好不好"。跟踪的价值重心应放在行业景气度——它高频、前瞻、直接驱动盈利预期修正。因此 v5.5 移除了机构持仓穿透模块,把 EDB 从「个股 thesis 指标」扩展为「行业景气指标组」。

景气指标六维框架

不要只盯一个价格。行业景气要多维交叉,单维数据会骗人(价格涨可能是供给收缩而非需求好):

维度 回答的问题 典型指标 盐湖 宁德/纳科 厦门空港 腾讯
价 产品卖多少钱 现货价/出厂价 碳酸锂、氯化钾 电芯/储能系统价 票价 游戏ARPU
量 卖出去多少 产量/销量/装车量 钾肥产量、锂盐产量 动力电池装车量 机场旅客吞吐量 游戏市场收入
库存 渠道压了多少 仓单/社会库存 碳酸锂仓单、钾肥港口库存 电池厂库存 — —
产能 供给端什么状态 开工率/新增产能/装机 盐湖产能利用率 锂电设备招标 机场时刻 版号发放
下游 需求端什么状态 新能源车销量/装机 新能源车产销 新能源车+储能 出入境客流 手游月活
成本 利润空间变化 原材料/运费 卤水采集成本 碳酸锂(宁德是买方) 航油 算力成本

交叉判读矩阵(核心)

单一指标的方向没有意义,两维交叉才有信号:

价格 量 / 库存 解读 对 Thesis 的含义
↑ ↓ 需求驱动的真景气(买得多把库存买空了) [+] 强信号,可持续
↑ ↑ 补库/投机囤货,顶部风险 [±] 警惕,可能是最后一波
↓ ↓ 主动去库,供给收缩 [0/+] 接近底部,等价格企稳
↓ ↑ 过剩格局,最差组合 [-] 强利空,规避
平 ↑ 需求走弱,价格还没反应 [-] 领先指标,价格将补跌

> 「量」与「库存」在多数场景下互为镜像(卖得多 = 库存降),两列可互换使用——没有库存数据时用产量/销量代替。

> 实测样例(盐湖 2026-09):碳酸锂价 13.4 万(较 8 月 14.6 万继续下行)+ 钾肥产量 70.14 万吨(较 5 月 89.51 万吨大幅回落)→ 锂端「价↓量↓」= 主动去库接近底部区间;钾肥端若只看产量会读成"供给收缩支撑价格"。

> ⚠️ 同一个标的可以同时有两个方向的信号,别急着下结论。加上钾肥端的价 × 库存交叉再看(2026-09-21 实测):钾肥现货价 3090 → 3075 元/吨(微降),主要港口库存 367.5 → 391.92 万吨(连续 6 周累库,+6.6%)→ 落在矩阵「价↓ 库存↑」= 过剩/需求走弱,与"产量下滑利好"方向相反。
>
> 这正是矩阵的价值:只看产量会得出"供给收缩利好",补上库存维度才发现港口在累库——进口钾肥供给充裕正在压制价格。
> 维度冲突时的优先级:价 + 库存(贴近当下成交)> 产量(月度滞后)。 库存是"当期卖不动"的直接证据,产量只是"产了多少"。

已验证的行业 EDB 指标库(固化进 portfolio.json)

natural_language_get_edb_data 用 executionMode="仅提数" + 以下代码,可逗号分隔批量取,observation=4~6 控体积:

行业 指标 EDB 代码 频率 单位 来源 更新时间
锂电 中国:装车量:动力电池 S6137468 月 兆瓦时 新闻整理 2026-09-15
锂电/储能 中国:装机容量:新能源:新型储能 T3206609 年 万千瓦 国家能源局 2026-09-03
锂电/储能 中国:当年新增装机容量:新能源:新型储能 U4654734 年 万千瓦 国家能源局 2026-09-03
化肥 中国:产量:钾肥 S5479685 月 万吨 隆众资讯 2026-08-31
化肥 中国:现货价:钾肥 S5470454 日 元/吨 化工在线 2026-09-21
化肥 中国:主要港口:库存量:钾肥 S5444348 周 万吨 隆众资讯 2026-09-17
民航 中国:机场旅客吞吐量 S0180516 月 万人次 中国民航局 2026-09-21
民航 中国:民航机场旅客吞吐量:厦门/高崎 F5629379 年 人 从统计看民航 2026-03-30
传媒/游戏 中国:实际销售收入:游戏市场 H4434598 月 亿元 新闻整理 2026-09-20
传媒/游戏 中国:实际销售收入:游戏市场:当月同比 O3600946 月 % 新闻整理 2026-09-20
传媒/游戏 中国:实际销售收入:游戏市场 T2720599 季 亿元 新闻整理 2026-07-31

> ⚠️ 四个实测坑:
> 1. 搜索词要「用行业通用词」,不要用化学名/学名——指标库的命名用的是行业口语,不是化工命名。实测:
> - 搜「钾肥」→ 命中 11 条(现货价 / 主要港口库存 / 分港库存 / 开工率 / 竞品库存)✅
> - 搜「氯化钾」→ 几乎命中不到有效指标 ❌
> 这和「搜行业词不搜公司名」是同一条原则的延伸:先想行业里大家怎么叫它,而不是它的化学名。
> 但也别走向另一个极端——另一个方向是太宽泛:搜「民航机场旅客吞吐量」返回 47 条(含一堆年频分机场垃圾)。目标是一个词能圈住 5-15 条。
> 2. magnitude 字段不可靠,以 unit/enUnit 为准。如 S6137468 的 magnitude 标 "mn" 但 unit 是 MWh,值 79000 = 79 GWh(符合中国月装车量常识)。
> 3. 固化前必须查 endDate——搜索结果 meta 里的 endDate 距今超过 1 年 = 已停更。实测「钾肥」返回的 11 条里有 4 条是死数据:开工率 S9987168/S9987257 停在 2023-12-31、赤湾港库存 S5444344 停在 2025-12-25、竞品库存 B2934380 是年频。光看名称会全部固化进来,白占配置。
> 4. 「无权限」≠「代码不存在」,两者报错行为不同:
> - 软剔除:返回 "受限指标已剔除:无权限:S9984052",同批其他代码照常返回 → 不影响批量取数,剔除该条即可
> - 硬失败:代码写错 / 不存在 → 整批报错,全军覆没
> 所以看到软剔除不用慌;但代码本身写错会废掉整批,新代码仍须单独先试。

配置结构

portfolio.json 里两类 EDB 代码分开存放,用途不同:

字段 粒度 用途 调用频率
holdings[].wind_edb_codes 个股 thesis 指标(★★★) 验证「我的逻辑」 每次跟踪
industry_edb_codes(顶层,按行业 key) 行业景气指标 判断「生意好不好」 每次跟踪(每组 2-3 个即可)

日常跟踪必取行业景气(v5.5 起从"深度分析才取"提升为"日常必取")——它比公告和新闻更早反映拐点。


板块与大盘情绪:三层归因(v5.5 新增)

个股每天的涨跌里,大部分是市场给的,不是公司给的。不拆开就会把 beta 当 alpha——涨了以为逻辑兑现,跌了以为逻辑破了。

指数代码速查(实测可用)

层级 指数 Wind 代码 说明
大盘-A股 上证指数 000001.SH 全市场涨跌家数最全(实测 1663涨/620跌/78平)
沪深300 000300.SH 大盘基准
中证500 / 中证1000 000905.SH / 000852.SH 中小盘风格
创业板指 / 北证50 399006.SZ / 899050.BJ 成长/北交所风格
大盘-港股 恒生指数 / 恒生科技 HSI.HI / HSTECH.HI ⚠️ 后缀是 .HI 不是 .HK,传 HSI.HK 报"未识别标的"
申万行业 基础化工 801030.SI 801xxx.SI 系列,带涨跌家数
电力设备 / 传媒 801730.SI / 801760.SI
机械设备 / 交通运输 801890.SI / 801170.SI
Wind 概念 固态电池 / 锂电池 8841671.WI / 884039.WI 884xxx.WI、886xxx.WI
储能 / 盐湖提锂 / 机场 884790.WI / 8841082.WI / 886029.WI

> 💡 概念指数可以用中文名直接查(实测传「固态电池指数」返回代码 8841671.WI)——记不住代码就传中文名,工具会回带 Wind 代码,验证后固化进配置。
> ⚠️ 批量查询一旦有一个代码无效,整批失败(实测「机场指数,免税指数,游戏指数,钾肥指数」因"免税指数"不存在全批报错)。未验证过的代码必须单独试。
> ⚠️ 指数「量比」字段实测全返回 0.000,不要用。

采集方式(一次调用拿全)

get_index_price_indicators(
  windcode="000001.SH,000300.SH,000905.SH,000852.SH,399006.SZ,899050.BJ,HSI.HI,HSTECH.HI,801030.SI,801730.SI,801760.SI,801890.SI,801170.SI,8841671.WI,884039.WI,884790.WI,8841082.WI,886029.WI",
  indexes="中文简称,最新成交价,涨跌幅,5日涨跌幅,20日涨跌幅,年初至今涨跌幅,成交额,换手率,上涨家数,下跌家数,平盘家数,当日主力净流入额,近5日主力净流入额,市盈率(TTM),市净率(LF)"
)

> 全部代码已验证,可安全批量。新增代码先单独验证再并入。

三层归因公式

个股涨跌幅 ≈ 大盘涨跌 + 板块相对强弱 + 个股特质(alpha)
拆解项 计算 含义
大盘贡献 对应基准指数涨跌幅(A股用沪深300 或上证;港股用恒指) 今天市场给的
板块强弱 板块指数涨跌幅 − 大盘涨跌幅 行业今天相对强/弱
个股 alpha 个股涨跌幅 − 板块指数涨跌幅 真正属于这家公司的部分

用法:报告里每只标的都给这三个数。若「个股 alpha ≈ 0」说明今天只是跟着板块走,不构成 thesis 层面的信号,不要写进增量分析。

情绪打分卡(每日输出)

指标 取数 乐观区间 谨慎区间
市场宽度 上涨家数 / (上涨+下跌) > 0.6 普涨 < 0.4 普跌
成交额 上证+深证成交额 vs 20 日均值 放量上行 缩量(观望)
主力资金 近5日主力净流入额(大盘/板块) 持续净流入 持续净流出
板块相对强弱 板块 5日/20日涨跌幅 − 大盘同期 跑赢 = 资金在流入该行业 跑输 = 行业遭抛弃
位置 52周最高/最低 + 年初至今涨跌幅 距高点远 = 空间大 创新高 = 追高风险

输出要求:报告开头必须有「市场环境」块(见下方报告模板),5 行以内说清——今天大盘怎么样、钱在往哪个板块流、我的持仓所在板块是顺风还是逆风。

波动率标尺:用个股自己的尺度判断今天算不算事(v5.9 新增)

为什么需要它:不同标的的日常波动能差 5 倍。实测 2026-10-09:

标的 σ20(日) ATR14% 波动比20/60 hv20 一年分位
沪深300 0.83% 1.31% 0.64 20%
盐湖股份 1.58% 2.39% 0.75 2%
腾讯控股 1.91% 2.88% 0.88 52%
宁德时代 2.09% 3.61% 0.89 38%
厦门空港 2.84% 3.55% 1.58 82%
纳科诺尔 4.43% 6.22% 1.05 80%

同一套固定阈值(如「跌 5% 才算异动」「|alpha| < 1pct 是噪声」)在这批标的上不是同一个意思:纳科一天 ±4.4% 是日常,5% 阈值几乎天天假报警;反过来厦门空港 2026-10-08 跌 3.18%(翔安方案落地)按 5% 不触发,但相对它自己 1.8% 的日常波动已是近 2σ 的真事件。用百分比做门槛 = 用同一把尺子量不同东西。

指标口径(脚本自算,update_volatility.py)

指标 算法 用来干什么
σ20 / σ60 近 20/60 个交易日对数收益率的标准差(前复权) 这只票一天正常晃多少
hv_ann σ × √252 年化,便于与研报/Wind 口径对话
parkinson20 √(Σln(H/L)²/(4·ln2·n)) × √252 用高低价的估计量,效率约为收盘价口径 5 倍;与 σ 差太多 = 有跳空或长上下影,形态层要去看分钟线
z_today ⭐ 当日涨跌幅 ÷ σ20 核心。今天是常态还是异常
波动比 σ20 / σ60 >1.2 波动抬升(有事发生/分歧加大)、<0.8 收敛(趋于平静)
一年分位 当前 σ20 在过去一年滚动 σ20 序列中的位置 100% = 一年里最躁的时候;接近 0% = 极度平静,平静本身也是信号(变盘前夜)

判读标准:

| |z_today| | 判定 | 动作 |
|---|---|---|
| < 1σ | 常态 | 不写进增量分析,不溯源 |
| 1 - 2σ | 偏大 | 正常跟踪,报告里点一句 |
| ≥ 2σ | 异常 | 触发 7 维溯源(即使没到 5%) |

用法

python scripts/update_volatility.py                            # 全部持仓
python scripts/update_volatility.py --symbol 600897            # 单只
python scripts/update_volatility.py --event 600897=2026-09-30  # 事件前后波动对比
python scripts/update_volatility.py --no-bench                 # 不取大盘基准

输出 reports/volatility_latest.json(单份覆盖):每标的 + 两地大盘基准的 σ/年化/分位/z,以及 --event 的事前 20 日 σ vs 事后 σ。

数据源与坑(实测)

  • 主源:东方财富 push2his 日线 fqt=1(前复权),300 根。覆盖 A股/北交所/港股(北交所 secid=0.920522 实测 260 行正常)。
  • 备源:腾讯 web.ifzq.gtimg.cn 日线 qfq。⚠️ 北交所只返回 1 根,救不了北交所标的;东财偶发 Remote end closed(实测 1/6 概率),此时腾讯接管,结果差异 <0.03σ。
  • 港股指数(100.HSI)在东财不通,基准恒指走腾讯 hkHSI。
  • 盘中 bar 必须排除:脚本一律用 rows[:-1] 算 σ(当日 bar 未完成),只拿最后一根算当日涨跌幅。收盘后跑则最后一根是完整日线,JSON 会标 note。
  • 事件窗口样本 <5 个交易日时 σ 估计不稳,脚本输出 warn,报告中要照抄这个提醒。

Wind 双轨:什么时候信谁

get_risk_metrics 给「过去 1 年年化波动率 / Beta / 最大回撤」,可与脚本交叉。但两处要当心:

  1. 偶发返回空(实测 600897 首次返回「没找到数据」,换宁德正常,再问一次又正常)→ 不要因为 Wind 空就写"无数据",跑脚本。
  2. Beta 口径存疑:实测厦门空港「过去1年 Beta = 0.106」而「年化波动率 = 28.72%」——这两个数不可能同时成立。Wind Beta 的基准未明示,不要直接用于归因;要用 beta 就自己拿「个股 vs 沪深300」日收益回归。
  3. 不一致时以脚本为准并标注:脚本口径完全透明(窗口=20/60、√252、前复权),可复现。Wind 值差 20% 以上时在报告里写 [口径差异] Wind年化X% vs 脚本Y%(窗口/复权可能不同)。

日内分钟走势:异动形态的第 6 个维度

异动溯源原来只有 5 个维度(公司/行业/竞品/大盘/资金),但都回答不了"这根阴线是怎么走出来的"。get_stock_quote 补上第 6 维:

{&quot;windcode&quot;: &quot;000792.SZ&quot;, &quot;begin&quot;: &quot;2026-09-18&quot;, &quot;end&quot;: &quot;2026-09-18&quot;, &quot;count&quot;: -20}

> ⚠️ 体积控制:单日约 240 条,全量返回会撑爆上下文。必须传 count(负数 = 从结束时间往前取 N 条)。日常取 count=-20(尾盘 20 分钟)即可判断形态,最多 -60。

形态判读:

形态 分钟数据特征 归因方向
尾盘突袭 全天平稳、最后 1-3 分钟放量急跌/急涨 被动指数调仓、集合竞价、程序化单
全天阴跌 逐分钟重心持续下移 资金持续出货,情绪性抛压
开盘跳水后横盘 前 30 分钟跌完,之后走平 消息面一次性定价,非持续抛压
午后拉升 13:00 后放量上行 资金午后进场,可能有增量信息

实测样例(盐湖 9/18):14:39–14:57 平稳在 24.85–24.88,15:00 集合竞价单分钟成交 1.006 亿股、价格砸到 24.74——典型尾盘被动单冲击,而非全天资金出逃。这类信息收盘价完全看不出来。

价格落盘(Wind 时代必做)

Wind 接管行情后,fetch_data.py 的 update_snapshot() 不再被调用(它依赖脚本自己抓的价格)。若不落盘,snapshot.json 的 price_history 会断档——实测 2026-08-25 → 09-21 断了 27 天,导致「较上周」失去历史基准。

取到 Wind 价格后,执行:

# 1) 把 Wind 价格写成 JSON(键为 portfolio.json 的 symbol)
cat &gt; reports/wind_prices.json &lt;&lt;&#x27;EOF&#x27;
{&quot;000792&quot;: {&quot;price&quot;: 25.01, &quot;change_pct&quot;: 1.09, &quot;source&quot;: &quot;Wind&quot;},
 &quot;600897&quot;: {&quot;price&quot;: 15.31, &quot;change_pct&quot;: 1.26, &quot;source&quot;: &quot;Wind&quot;},
 &quot;300750&quot;: {&quot;price&quot;: 299.63, &quot;change_pct&quot;: -0.77, &quot;source&quot;: &quot;Wind&quot;},
 &quot;00700&quot;:  {&quot;price&quot;: 426.80, &quot;change_pct&quot;: 1.86, &quot;source&quot;: &quot;Wind&quot;},
 &quot;688047&quot;:{&quot;price&quot;: 17.27, &quot;change_pct&quot;: 0.12, &quot;source&quot;: &quot;Wind&quot;}}
EOF

# 2) 落盘
python scripts/sync_snapshot.py --prices-file reports/wind_prices.json

脚本按日去重追加 price_history(保留最近 60 条),不触碰 thesis.md / log.md。

分层调用原则

  • 日常跟踪:Wind 个股行情快照(1 次批量)+ 落盘 + 板块与大盘情绪快照(get_index_price_indicators 1 次批量取全部指数) + 行业景气指标 EDB(每标的 2-3 个,1 次批量) + Wind 公告/新闻(每标的 1-2 次)+ 知识星球双路采集(热点扫描 + 主题深挖,市场预期主源) + 行业信源 + WebSearch 补充(IMA 浑水可选)
  • 深度分析:日常基础上加 get_stock_fundamentals(财务+估值分位)+ get_stock_events + get_stock_equity_holders(解禁时间表)+ get_index_fundamentals(板块估值/历史分位)+ get_index_kline(板块趋势 vs 个股趋势背离检查)+ get_financial_data(竞品财务横截面)
  • 对抗式审查:深度基础上加 get_risk_metrics(Beta/波动率/最大回撤,量化隐藏风险) + get_stock_technicals + 行业景气指标的更长序列(判断周期位置:当前在产能周期的哪个阶段)
  • 异动溯源 7 维度:公司层 get_company_announcements + 行业景气层 natural_language_get_edb_data + 竞品层 get_stock_price_indicators(竞品) + 大盘/板块层 get_index_price_indicators(含涨跌家数判宽度) + 资金层 get_stock_price_indicators(主力净流入) + 形态层 get_stock_quote(分钟走势,判尾盘突袭 vs 全天阴跌) + 圈内舆情层 zsxq-cli topic +search(口径变更/相反说法)

可选扩展:基金 / ETF / REITs 数据线(非个股持仓业务线)

> 本节不属于个股 Thesis 跟踪主流程,仅当用户从事基金/ETF/REITs 相关工作时按需启用。

Wind 的基金工具(10 个)可覆盖公募/ETF/REITs 全链路:

需求 工具 实测要点
REIT/ETF 实时行情(价格/涨跌/YTD/贴水率/IOPV/流通市值) get_fund_price_indicators 场内代码带交易所后缀,如首农REIT = 508039.SH
REIT 实际分派(分红次数/单位分红/分红总额) get_fund_financials 可用于验证招募书分派率真实性(实测首农REIT:区间分红 2.547 亿、2 次、单位 0.2547 元)
基金净值/区间收益/同类排名/最大回撤/夏普 get_fund_performance 货基用万份收益、7 日年化
基金重仓股 + 申万行业配置 + 持股集中度 get_fund_holdings FOF 穿透底层用
规模变动 / 机构 vs 个人持有比例 / 申赎 get_fund_holders 看资金进出
基金公司档案(在管规模/经理团队) get_fund_company_info 管理人尽调用
按条件反查产品 search_funds / search_stocks 选基/选股筛选

> ⚠️ get_fund_financials 的「区间」口径需确认(累计 or 年化),算分派率前先用 get_fund_info 核对成立日与分红条款。


市场预期采集:知识星球替代浑水(v5.7 重构)

v5.7 定位变更:「市场当下在讨论什么、预期什么」的第一来源改为知识星球,IMA 浑水降为可选。

维度 知识星球 IMA 浑水
内容形态 券商点评 + 外资研报 + 专家交流 + 当日异动快评 外资研报/电话会存量库
时效 当天(实测 30 条全落在当日 13:01–14:17) 偏存量,滞后
预期载体 标题自带 【券商+行业组】,正文含目标价/业绩预测 需翻研报全文才能提取
「当下热度」 ✅ group +topics 时间倒序 = 当日热点快照 ❌ 无此能力
日常用途 预期差判定的主源 仅当需要完整研报原文时

浑水备用规则(被星球替代,仅在需要完整研报原文时调用):搜索是话题驱动而非公司名驱动——
CATL/BYD/Tencent/Potash/ESS ✅ 有效;中文公司名(宁德时代)、股票代码(000792)、泛化词(锂矿/互联网)❌ 0 条。
> 核心原则:搜行业不搜公司。 这条对星球同样适用。


知识星球:市场预期与当下共识的主源(v5.6 新增,v5.7 定位升级)

定位:市场预期的一手载体(v5.7 升级)

星球里流动的就是卖方当天正在输出的东西——券商点评、外资研报摘要、专家交流纪要、异动快评。这正好回答了双层验证第二层最难的问题:市场当下在讨论什么、预期什么。

信息源 给的是什么 缺什么
Wind EDB 硬数据(价/量/库存的数值) 不说为什么变,更不会说口径变了
Wind 财务/估值 已实现的历史 + 估值分位 不含未实现的预期
浑水研报 卖方观点(目标价/一致预期) 滞后,且是卖方立场
行业信源 WebSearch 新闻/报价 碎片,无分析
知识星球 市场当下在讨论什么 + 券商目标价/业绩预测 + 专家一手说法 + 数据口径变化解释 质量参差,需交叉验证

星球独有的三类信息:

  1. 市场预期——当日券商点评里的目标价、业绩预测、"强CALL / 推荐 / 超预期 / 低于预期"措辞。这是预期差判定的原料,其他数据源都拿不到"当天版本"的卖方预期。
  2. 叙事解释——数字背后的原因。实测样例(2026-09-11):碳酸锂主力跌 4.99%,星球给出的解释是「SMM 启用新版库存统计口径,把贸易商/电芯厂纳入样本,周度库存一次性从 7 万余吨上修至 16.93 万吨」——旧口径"持续去库、现货紧缺"的叙事被改写为"隐性库存远超预期"。Wind EDB 只会给你库存数字,不会告诉你口径变了。
  3. 即时点评——当日盘中券商点评、交易台纪要,比正式研报快 1-3 天。

内容类型识别:读懂标题就知道怎么用

实测(2026-09-21 group +topics --limit 30)返回的 30 条中,类型按标题特征清晰可分:

类型 标题特征 实测样例 用法 可信度
券商点评 【券商名+行业组】(东财食饮/长江电新/中信电子/国金机械…) 【西南机械】金刚石散热专题报告、【中泰地产】地产股因何连续大涨 提取目标价/观点 → 市场预期主料 中高(卖方立场,注意"强CALL"是推销)
专家交流 专家交流 / 对话产业链 / 调研 固态电池专家交流要点、【固态电池设备专家】对话产业链 产业链一手信息,比研报原始 中(必须交叉验证)
异动快评 大涨点评 / 回调 / 涨停封板 / ❗ / 🔥 福赛科技大涨点评、白电回调主要或跟产… 当日异动的解释 中(情绪化,别当结论)
深度专题 深度 / 专题报告 / 系列 [烟花]【长江电新】深度丨掘金… 逻辑框架 高(少见,遇到就读)
外资研报 外资行名——(伯恩斯坦/野村/美银/高盛/摩根大通/GS) 伯恩斯坦——全球储能:中国电池…、摩根大通——储能需求:逆流而上、📌GS 中国午间#交易台 外资视角 + 全球可比,与内资观点对照看分歧 高(注意立场与中国资产偏好)
数据跟踪 数据跟踪 / 高频数据 电力设备出口数据跟踪、【招商房地产】高频数据 补 Wind EDB 之外的硬数据 高
附件 标题就是 「文件」 / 「图片」 — 标题零信息,无法匹配,需 +detail 或跳过 —

> 表情前缀是星球的标记习惯(🔥 [红包] [烟花] ❗️ 🍁),通常表示星主主推,不等于重要性更高——反而要警惕推销倾向。

可用星球(2026-09-21 实测,10 个里只有 2 个开通权限)

group_id 名称 类型 定位(2026-09-21 实测) 30 条覆盖时长
15552822254242 ⭕ 短评&信息 pay(3468 人) 内资券商即时点评(天风/广发/长城/中泰/华泰…)+ 异动快评(XX大涨点评/XX在跌什么)+ 小作文 ≈11 分钟(极高频)
15285211418852 ⭕ 基业长青 pay 外资券商研报主阵地(伯恩斯坦×3 / 野村×2 / 美银 / 高盛 / 摩根大通 / GS午间交易台)+ 深度专题 + 专家会 ≈8.5 小时

> 两个星球互补,都要跑:短评看「当下内资在说什么」(高频切片),基业长青看「外资研报和深度」(覆盖大半天)。
> 🔴 覆盖时长差 40 倍:短评 30 条只覆盖约 11 分钟——只看一次等于只看了一个瞬间。要覆盖更多时段需分多次采样(间隔几小时)。基业长青一次就够。
> 🔴 「文件」类型是盲区:部分条目标题就是「文件」(研报 PDF 附件),标题无法判断内容,做不了关键词匹配——只能 topic +detail 看描述,或直接跳过。实测基业长青 30 条里有 8 条是「文件」。

> 🔴 8/10 星球未开通 Skill 权限:思想钢印、看多君和他的朋友圈、FundTalk-精英路演、喵财君带你一起去探店、免费调研纪要研报投研快评、财经财富、自由讨论、换到新短评星球。调用 +topics / +search 一律报「该星球暂未开通 Skill 权限,如需使用可联系星主申请开通」。
> 处理:写进配置的 blocked 列表,不要反复重试。需要时让用户向星主申请开通,开通后把 group_id 从 blocked 移到 enabled 即可。
> 新增星球先跑一次 group +topics 探活,能返回再写进 enabled。

双路采集法:一路看「当下」,一路挖「主题」

两个接口能力不同,必须并用(topic +search --help 实测只有 group-id/query/json 三个参数,无排序、无时间过滤、无 limit):

目的 接口 排序方式 实测表现
市场当下在讨论什么(热点扫描) group +topics --limit 30 时间倒序,天然新鲜 30 条全部落在当日 13:01–14:17
某个主题的脉络(主题深挖) topic +search --query [行业词] 按相关性,无时间过滤 搜「固态电池」15 条,横跨 2024-03 ~ 2026-09

> 🔴 顺序不能反:先 group +topics 定「今天市场在说什么」,再 topic +search 挖具体主题。
> 只跑搜索会看不到当下热点——搜索按相关性排,最新一条也可能是一个月前的。

热点扫描怎么用:拿到 30 条标题后,按每只标的 zsxq_queries.hot_match 做标题匹配(不是再搜一遍),命中的即「今天有人在说我的行业」。一条都没命中就直接跳过,不要硬凑。

> 🔴 必须用 hot_match,不要用 keywords:热点标题只有十几个字,泛词会大量误命中。实测当日 30 条里出现 AI制药 / AI安全 / AI中长视频 / 通用AI厂商——用裸「AI」匹配会误报腾讯控股(实际与游戏/AI变现无关)。所以腾讯的 hot_match = 游戏/腾讯/版号/微信/AI应用/AI变现,而 keywords 仍保留 AI(供 topic +search 深挖用,搜索有正文可判相关性)。

四条硬规则(实测踩过)

  1. 🔴 搜索没有时间过滤,按相关性排序——实测搜「锂」返回 2022-08、2022-12、2026-02、2026-04、2026-09,跨度 4 年。
    必须先看 CREATED AT:>30 天直接丢弃,不要读详情。 对星球内容,时效筛是强制的,不是可选的。

实测演示(2026-09-21 搜「钾肥」,12 条结果正好铺满三档):

时效档 命中示例 处置
≤7 天(增量) 藏格矿业收购刚果布钾盐矿点评(09-18) ✅ 读 detail,进增量分析
8-30 天(已知事实) 亚钾国际中报点评(08-28)、中金海外农化(09-08)、基础化工 26H1 综述(09-11) 进背景区
>30 天(丢弃) 钾肥行业更新(2025-12-16)、Mosaic K3(2025-12-16) ❌ 不读、不写

> 「藏格矿业收购刚果布钾盐矿」是盐湖股份的直接竞品动态,且落在增量窗口内——这类信息正是竞品公告交叉验证之外最有价值的补充。
2. 列表/搜索只给摘要(DIGEST 截断)——要全文必须 topic +detail。单条详情约 2KB,体积安全;但只对「≤7 天 + 与 thesis 相关」的主题取详情,不要批量 detail。
3. 搜行业词不搜公司名——与浑水同理。搜「碳酸锂」能命中盐湖相关的完整分析,搜「盐湖股份」命中率低。
🔴 也不要搜「预期」「目标价」这类元词——实测搜「预期」返回的全是无关跨年内容(沃尔调研 2024-07、NVIDIA 2024-05、CPI 2024-03)。市场预期要从券商点评的正文里「提取」,不是靠搜索词「搜」出来的。
4. 🔴 --limit 上限是 30(实测 31 即报 无效的count)。且高频星球的 30 条只覆盖约 1–2 小时(实测 13:01–14:17)——短评类星球一天发几百条,30 条只是一个时间窗口的切片,不是全天汇总。要覆盖更长时段就分多次跑。

调用方式

# 1) 热点扫描(先跑):时间倒序,看「当下市场在讨论什么」。limit 上限 30,不可超
zsxq-cli group +topics --group-id 15552822254242 --limit 30

# 2) 主题深挖(后跑):行业关键词搜索。搜行业词,别搜公司名,别搜「预期」
zsxq-cli topic +search --group-id 15552822254242 --query &quot;固态电池&quot;

# 3) 命中后取全文(只对 ≤7 天且相关的)
zsxq-cli topic +detail --topic-id 22258815182821211 --json

> Windows 环境两个坑:
> ① zsxq-cli 可能不在 PATH。定位顺序:先 Get-Command zsxq-cli;若为空,到 ~/.workbuddy/binaries/node/cli-connector-packages/node_modules/zsxq-cli/node_modules/ 下找 @zsxq/cli-&lt;平台&gt; 目录(Windows 为 cli-win32-x64,macOS 为 cli-darwin-arm64 等),其 bin/zsxq-cli 即为可执行文件,调用时写全路径。
> ② 输出是 UTF-8,PowerShell 捕获需先执行 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8,否则中文全部乱码。

⭐ 数据口径变更预警(跨模块整合,最值钱的一点)

星球是唯一能提前告诉你"数据口径变了"的信源。口径一变,历史序列就断层,环比分析全部失效。

发现「调整统计口径 / 启用新样本 / 纳入新来源」时的处理:

  1. 立即在报告的行业景气块标注 ⚠️ 口径变更 [日期],写清变化方向(上修/下修/幅度)
  2. 暂停该指标的环比解读,只做定性描述,等新口径积累 2-3 期后再恢复
  3. 同步写进 portfolio.json 该指标的 note 字段,避免下次重复踩坑

> 实测案例:SMM 碳酸锂库存口径变更后,周度库存 7 万吨 → 16.93 万吨。不标注就会误判成"库存暴增 140% = 过剩利空",实际是统计范围扩大,真实供需没变那么多。这类误判会直接导致 [-] 误标。

从星球提取市场预期(v5.7 核心)

这是星球不可替代的能力:拿到"当天版本"的卖方预期,而不是滞后的存量研报。

Step 1|识别预期载体——券商点评(【券商+行业组】前缀)正文里找这些信号词:

信号词 提取什么 对预期差的用处
目标价 XX 元 / 看至 XX 卖方目标价 与现价对比 → 隐含空间
预计 26 年净利润 XX 亿 / 上调至 / 下调至 盈利预测 判断修正方向(比绝对值更重要)
强CALL / 重点推荐 / 强烈推荐 卖方立场强度 强推=预期已高,警惕"利好出尽"
超预期 / 大超预期 / 低于预期 相对一致预期的方向 直接就是预期差标注
市场担心 / 普遍认为 / 一致预期是 市场共识本身 罕见且珍贵,直接用作第二层基准

Step 2|热度 → 定价程度判定([已定价] vs [未定价] 的可操作标准):

观察 判定
同一主题当天被 ≥3 家券商点评覆盖,或标题反复出现 [已定价]——利好也推动不了股价
当天仅 1 条提及、无券商跟进、只出现在专家交流里 [未定价]——最值钱的窗口
圈内说法与卖方研报相反 预期差信号,优先核实
星主用 🔥/[红包] 主推但无券商跟进 警惕:可能是推销不是共识,按 [未定价但存疑] 处理

Step 3|纪律:

  • 星球内容只能生成假设,必须经 Wind/公告/EDB 交叉验证,验证前一律标 [待验证]
  • 卖方预期天然偏乐观("强CALL"是推销话术),与 Wind 实际数据冲突时以 Wind 为准
  • 报告中标注 [星球-星球名] + 内容类型(券商点评 / 专家交流 / 异动快评),便于回查可信度

> ⚠️ 星球内容质量参差、无署名责任,不能单独作为 thesis 判断依据。正确用法是用它生成假设 → 用 Wind 数据或公告交叉验证,验证前一律标 [待验证]。


行业信源自动查表(v5 新增)

系统根据标的 industry 字段自动从 portfolio.json 顶层的 industry_sources 映射表获取行业信源,无需手动配置。

映射规则

  • 标的声明 industry: [&quot;基础化工/钾肥化肥&quot;, &quot;有色金属/锂业/碳酸锂&quot;]
  • 系统先试子级 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:数据采集(Wind 优先,脚本兜底)

  1. 板块与大盘情绪快照(先行,定环境):读 portfolio.json 的 market_indexes.watchlist + 每标的 wind_index_codes(benchmark / sector_sw / themes),去重后合并为一份代码清单,get_index_price_indicators 一次批量取全,indexes 取「中文简称,最新成交价,涨跌幅,5日涨跌幅,20日涨跌幅,年初至今涨跌幅,成交额,换手率,上涨家数,下跌家数,平盘家数,当日主力净流入额,近5日主力净流入额,市盈率(TTM),市净率(LF)」。据此先算好「大盘涨跌 / 板块相对强弱 / 市场宽度」,后面分析个股时才知道哪些波动是市场给的。⚠️ 新指数代码未验证前必须单独调用试错,不能混进批量(一个无效代码整批失败)。
  2. Wind 个股行情快照:get_stock_price_indicators 批量查询全部持仓(wind_code 逗号分隔),indexes 取「最新成交价,涨跌幅,近5日主力净流入额,市盈率(TTM),市净率(LF),股息率,总市值1」。若 Wind 断开或返回空 → 回退 fetch_data.py --mode all(脚本三源链:价格+异动+AKShare新闻+PB+公告源导出)
  3. 价格落盘(不可跳过):把上一步 Wind 价格写成 reports/wind_prices.json(键为 symbol),执行 python scripts/sync_snapshot.py --prices-file reports/wind_prices.json。不做这步 price_history 会断档,「较上周」失去基准。
  4. 行业景气指标 + Thesis 指标取数(EDB,两类都取):
    a) 行业景气:读 portfolio.json 顶层 industry_edb_codes,按每标的 industry 取 2-3 个景气指标(executionMode=&quot;仅提数&quot;,observation=4~6)。v5.5 起为日常必做项——行业量价库存比公告更早反映拐点。优先取「价 + 库存」两个维度(才能跑交叉判读);只有单维度时在报告中说明无法交叉。
    b) 个股 thesis 指标:读 holdings[].wind_edb_codes,取 thesis ★★★ 指标序列(observation=6~10)。
    c) 取完先做「数据体检」(3 秒,但能避免误读):
    • 僵死? 近 N 期数值完全相同 → 是滞后挂牌价,无边际信息量,改用有波动的同类指标,并在报告「指标可用性」行标注
    • 停更? endDate 距今 > 1 年 → 剔除不用
    • 无权限? 报错含 受限指标已剔除 → 剔除该条(同批其他不受影响),并在配置中标注
      d) 按「交叉判读矩阵」做两维交叉(价 × 库存 / 价 × 量),不要只报单一指标的方向;两维冲突时以价+库存优先(贴近当下成交 > 月度滞后)。
      禁止用「搜索并提数」+宽泛词(会 318KB 溢出)。无固化代码时,先「仅搜索」找代码并回填配置——搜索词用行业通用词(如「钾肥」),不要用化学名(如「氯化钾」);也不要过宽(返回几十条垃圾)。
  5. 公告采集(Wind 优先,两轮):
    a) 标的公告:get_company_announcements(query="[标的名] 最新公告",top_k=5)。Wind 不可用 → 读 announcement_sources.json 用 cninfo/hkexnews WebFetch(仅取标题+日期)
    b) 竞品交叉公告:读 holdings[i].competitors_a / competitors_global,优先用 competitors_wind_codes(已预生成 .SZ/.SH/.BJ 后缀)作为 query 提高命中率;对每个竞品 get_company_announcements(top_k=5),合并为"[标的]+竞品公告流"。报告中标注 [Wind-竞品名] 区分来源
  6. 财经新闻(Wind 优先):get_financial_news(query="[标的名]",top_k=5);Wind 不可用 → AKShare/WebSearch 兜底
  7. 知识星球(市场预期主源,双路采集):读 portfolio.json 的 zsxq_groups.enabled(跳过 blocked),对每个可用星球:
    a) 热点扫描(先跑):group +topics --limit 30(上限 30,31 会报 无效的count)。拿标题后按每标的 zsxq_queries.keywords 做标题匹配——命中的即「今天有人在说我的行业」。
    b) 主题深挖(后跑):topic +search --query [行业关键词](行业词;不搜公司名,不搜「预期」)。
    时效筛强制:按 CREATED AT 筛——>30 天直接丢弃不读详情,≤7 天才 topic +detail 取全文(单条约 2KB)。
    重点提取四类信息:① 市场预期——券商点评里的目标价/业绩预测/「超预期」措辞(走「从星球提取市场预期」流程);② 数据口径变更(命中则走「口径变更预警」流程);③ 与卖方研报相反的圈内说法;④ 专家交流的产业链一手信息。
    全部标注 [星球-星球名] + 内容类型(券商点评/专家交流/异动快评),未经 Wind/公告交叉验证前一律标 [待验证]。
  8. IMA 浑水(可选,v5.7 降级):仅在需要完整研报原文时才调用(如某条星球点评需回溯研报全文)。日常预期差判定已由第 7 步覆盖,不必每次跑。若跑:搜行业关键词(不搜公司名),is_end=false 或数据截断时用 next_cursor 逐页取,累计 5-10 条后停止,避免 token 溢出。
  9. 读 portfolio.json 的 industry_sources 和每标的 industry 字段,自动查表获取对应行业协会/数据平台/媒体站点 → 按站点类型选择搜索策略:SEO 可见站用 site:[站名] [关键词],paywall/JS 渲染站用 [站名] [关键词](去 site: 限制)。
  10. 并行 WebSearch 补充(competitor + thesis_trigger + consensus_search)
  11. 波动率标尺(脚本,一次全组合):python scripts/update_volatility.py(需事件对比时加 --event SYM=YYYY-MM-DD),读输出的 reports/volatility_latest.json。Step 3 做归因前先看它——同一天的涨跌在低波动票上是信号、在高波动票上可能只是呼吸。

Step 2:时效筛 ← 关键步骤,不可跳过

在写入报告之前,逐条检查所有采集到的信息的日期。
- 日期 ≤ 7 天 → 放入「增量信息标注」
- 日期 8-30 天,且仍影响 Thesis → 放入「已知事实」
- 日期 > 30 天 → 丢弃,不写入报告
- 如果一条信息没有明确日期 → 标记为「日期未确认」放在已知事实区

豁免:以下属于状态数据(描述当前状态而非事件),不走时效筛,直接进估值/风险快照区——
Wind 的 PE/PB/市值/股息率、估值历史分位、Beta/波动率/最大回撤、股东结构与解禁时间表、大盘/板块指数行情与情绪指标(涨跌幅/涨跌家数/主力净流入/换手率)、EDB 行业景气指标当前值。
(这些数据的"最新更新日期"在 Wind 返回的 updateDate 字段,若距今 > 30 天需标注「数据陈旧」。)

时效筛检查清单:在生成每只标的的报告前,先回答——"这条信息的原始发布日期是哪天?距离今天几天了?属于哪个区域?"

Step 3:双层分析

每条款式标注:

[日期 来源] 事件 → [+] / [-] / [0]  ← Thesis影响
                  → [超预期] / [符合预期] / [低于预期] / [已定价] / [未定价]  ← 预期差

Step 4:生成报告

严格按下方强制模板输出。 横截面表的列名和顺序不可改变。

Step 5:更新 log.md

追加关键事件的日志到每只标的的 coverage/{标的}/log.md。


数据源降级矩阵

数据源 正常状态 降级方案 检测方法
Wind Alice 返回结构化数据 行情→脚本三源链;公告→cninfo/hkexnews WebFetch;新闻→AKShare/WebSearch;财务/估值→WebSearch 手工查 工具调用报错或返回空
知识星球 zsxq-cli 返回主题列表 ① 某星球「未开通 Skill 权限」→ 跳过(在 blocked 列表里),换下一个可用星球;② 全部不可用 → 用 WebSearch site:xueqiu.com [行业词] + 行业信源替代,报告标注星球不可用 报 未开通 Skill 权限 / 无效的count / 命令不存在
IMA 浑水 搜索返回结果 由知识星球替代(v5.7 起浑水非必需);再不行切 WebSearch 增补 搜索返回空或 connector disconnected
巨潮/港交所公告 WebFetch 正常返回 WebSearch site:cninfo.com.cn [标的名] 或 site:hkexnews.hk [标的名] 替代 WebFetch 无公告列表数据
新浪实时行情 返回有效价格 新浪空→东方财富push2(重试3次)→腾讯行情(qt.gtimg.cn)→快照回退/占位 价格=null
行业信源定点站 WebSearch site: 有返回 降级为普通关键词搜索(去 site: 限制) 连续3站无返回
WebSearch 正常返回 报告底部标注不可用 返回空

> 核心原则:数据源断了不能导致报告不生成。降级后标注,不停机。

Wind 不可用时的公告/行情降级接口(v5.9 实测可用)

Wind connector 未连上时(表现为 ToolSearch 找不到 mcp__wind-finance__*、DeferExecuteTool 报 not found),不要干等,直接切这两个 HTTP 接口(2026-10-08 实跑验证):

① 公告列表(免 Key,返回 JSON)

https://np-anotice-stock.eastmoney.com/api/security/ann?page_size=50&amp;page_index=1&amp;ann_type=A&amp;client_source=web&amp;stock_list=600897&amp;f_node=0&amp;s_node=0
  • stock_list 填纯数字代码(沪深通用);page_size 最大 50
  • 关键字段:notice_date(披露日)、art_code(正文 ID)、columns[].column_name(公告类型,用它快速筛这批在讲什么事)、title_ch
  • ⚠️ Bash 直接 curl 中文会 GBK 乱码 → 用 Python urllib 抓 + decode(&#x27;utf-8&#x27;) 后写文件,再用 Read 工具读,不要靠 stdout

② 公告全文(拿 art_code 换正文,够读关联交易/框架协议的条款和数字)

https://np-cnotice-stock.eastmoney.com/api/content/ann?art_code=AN202609301830055487&amp;client_source=web&amp;page_index=1
  • 取 data.notice_content,剥 HTML 标签后即得全文
  • ⚠️ PDF 类公告(年报全文、审计报告、部分估值报告)返回的是空壳,提取不到正文 → 遇到这类改用同类「摘要」公告 / 相关议案公告取数,不要在这上面反复重试
  • 📌 同一控制下追溯调整公告、法案的「提示性公告」、临时股东会通知往往藏着主线,务必一并读

③ 价格兜底(腾讯行情,沙箱可达率最高)

https://qt.gtimg.cn/q=sh600897,sh600004,sh000001     # 快照:现价/昨收/今开/PE/PB/市值/换手
https://web.ifzq.gtimg.cn/appstock/app/fqkline/get?param=sh600897,day,,,15,qfq   # 15日前复权K线
  • 快照为 ~ 分隔的一维串,用图标注对照解析;sh/sz/bj 前缀
  • K 线 JSON:data[&#x27;sh600897&#x27;][&#x27;qfqday&#x27;]
  • ⚠️ 多个代码批量时任一代码无效不影响其他(与 Wind 整批失败相反,这也是它的好处)

强制输出模板(MUST)

A0. 市场环境与板块情绪(MUST,放在报告最顶部)

先看市场,再看个股。5 行以内说清今天的风向:

## 市场环境 — YYYY-MM-DD

| 层级 | 指数 | 涨跌幅 | 5日 | 20日 | YTD | 涨跌家数 | 主力净流入(5日) |
|------|------|--------|-----|------|-----|---------|---------------|
| 大盘 | 上证指数 | | | | | 1663涨/620跌 | |
| 大盘 | 沪深300 / 恒生指数 | | | | | | |
| 板块 | [标的所属申万行业] | | | | | | |
| 主题 | [相关概念指数] | | | | | | |

**一句话**:[市场宽度 0.68 = 普涨 / 缩量分化 / 放量下跌];资金[流入/流出][XX]板块;我的持仓所在板块今日[顺风/逆风],跑[赢/输]大盘 [X]pct。

必答三问(答不上来说明 Step 1 第 1 步没做):
1. 今天是普涨还是普跌?(市场宽度 = 上涨家数 /(上涨+下跌))
2. 钱在往哪个板块流?(对比各板块 5 日主力净流入 + 板块相对强弱)
3. 我的持仓今天是板块带的还是自己的?(个股 alpha = 个股涨跌幅 − 板块涨跌幅)

A0.5 今日市场在讨论什么(MUST,星球热点扫描)

紧跟市场环境。用 group +topics --limit 30 的标题匹配结果,说清「今天卖方在聊什么、预期什么」,并标出与持仓相关的部分:

**今日圈内热点**([星球名],30 条覆盖 HH:MM–HH:MM):[主题1] / [主题2] / [主题3] …

| 命中持仓 | 内容类型 | 要点 | 预期信号 |
|---------|---------|------|---------|
| 宁德时代(动力电池) | 券商点评【XX电新】 | [一句话] | 目标价 XX元 / 预计26年净利 XX亿 |
| 纳科诺尔(固态电池) | 专家交流 | [一句话] | [待验证] |

**与持仓无关的热点**:[一句话,如「今日热点集中在 AI制药/机器人刀具,与持仓无关」]

规则:
- 一条都没命中就写「今日圈内热点与持仓无关」,不要硬凑——热点不在你的行业是正常且有价值的信息(说明今天没有行业级催化)
- 「预期信号」列只填正文中真实出现的目标价/业绩预测/共识措辞,没有就留空或写「无明确预期」
- 同一主题若被 ≥3 家券商同时覆盖 → 在「预期信号」标 [已定价];仅 1 条且无券商 → [未定价]

放在市场环境之后。列名和顺序不可变:

标的 收盘价 日涨跌幅 板块涨跌 个股alpha 较上周 预期差信号 优先级
  • 「板块涨跌」:该标的所属申万行业指数(或最贴近的概念指数)当日涨跌幅
  • 「个股alpha」:个股涨跌幅 − 板块涨跌幅。|alpha| < 1pct 视为噪声,不写进增量分析(并行参考:|alpha| < 0.5σ20 也在个股自身尺度上属于噪声,两只取严者)
  • 「较上周」:与上一个交易周收盘的累计涨跌幅
  • 「预期差信号」:选择最显著的预期差标注(超预期/低于预期/未定价/符合预期)

B. 每只标的章节

## [标的名] (代码) 每日跟踪摘要

### 涨跌归因(MUST)
- 大盘贡献:[基准指数] [X]%
- 板块贡献:[板块指数] [Y]% − 大盘 [X]% = [Z]%
- 个股 alpha:个股 [A]% − 板块 [Y]% = [B]%
- 判断:[今天主要是市场/板块在动,公司层面无新信息] 或 [跑赢/跑输板块 B pct,需查原因]

### 波动位置(MUST)
- 自身尺度:σ20 [X]%(年化 [Y]%) / σ60 [Z]% → 波动比 [R](&gt;1.2 抬升 / &lt;0.8 收敛)
- 今日定位:涨跌幅 [A]% ÷ σ20 = **z = [N] 倍** → [常态&lt;1σ / 偏大1-2σ / **异常≥2σ**]
- 一年分位:[P]%(0% 极度平静 = 变盘前夜;100% 一年最躁)
- 大盘参照:[沪深300/恒指] σ20 [B]%、今日 [C]% → [今天主要是市场在动 / 个股独立行情]
(数据来自 `reports/volatility_latest.json`;脚本取不到时降级用 Wind `get_risk_metrics` 的年化波动率,手算 z = 涨跌幅 ÷ 年化/√252,并标注「估算」)

### 行业景气(EDB,MUST)
| 指标 | 最新值 | 上期 | 环比 | 维度 |
|------|--------|------|------|------|
| [如 动力电池装车量] | 79,000 MWh | 74,600 | +5.9% | 量 |
| [如 碳酸锂价格] | 134,360 元/吨 | ... | ... | 价 |
**交叉判读**:[价↑量↓ → 主动去库,接近底部] / [价↓库存↑ → 过剩,最差组合](用交叉判读矩阵,不要只报单一方向)
**⚠️ 口径变更**:[无] 或 [例:SMM 碳酸锂库存 2026-09-11 启用新口径,7万吨→16.93万吨,本期环比暂停解读]
**⚠️ 指标可用性**:[全部正常] 或 [例:S5424440 连续 4 个月恒为 3100 = 僵死报价,价格判断改用 S5470454;S9984052 无权限已剔除](取到僵死/停更/无权限数据时必须在此标注,避免误读成&quot;价格稳定&quot;)

### 增量信息标注(≤7天)
[日期 来源] 事件描述
  → Thesis: [+] / [-] / [0]
  → 预期差: [超预期] / [符合预期] / [低于预期] / [已定价] / [未定价]

### 预期差检查
- 市场共识:[当前市场一致预期的核心假设]
- 偏差发现:[新信息与市场共识之间的差距在哪里?]

### 已知事实(8-30天持续背景)
[仍在影响Thesis但超过7天的关键信息]

### 失效条件状态
[逐条检查,标注是否触发]

### ⚠️ 股价异动溯源(仅触发阈值时)
7维度:公司公告 / 行业景气(EDB量价) / 竞品联动 / 大盘板块(三层归因) / 资金流向 / 分时形态 / 圈内舆情

### 一句话结论
&gt; [Thesis判断] + [预期差判断]

C. ⚠️ 异动溯源(触发阈值时)

满足以下任一条件时必须输出完整 7 维度溯源(两条规则并行,不可省略为普通跟踪格式):

规则 触发条件 适用
a. 绝对阈值 单日跌幅 ≥ alert_threshold_pct(默认 5%) 兜底:保证大幅下杀一定被查
b. 相对尺度 ⭐ |z_today| ≥ 2σ(个股自身波动 2 倍标准差) 抓「低波动票的小跌幅其实是大事」——如厦门空港 -3.18%(σ20≈1.8%)被捕捉到

> 只满足 b 不满足 a 时,通常意味着个股自身事件而非普跌,直接锁定第 1 维(公告/公司)和第 7 维(圈内舆情)。
> 两条都不满足时不要溯源——把日常呼吸当成信号是另一种噪声。

先做归因再溯源——如果三层归因显示 alpha ≈ 0(跟着板块走),则第 1、3 维度基本可排除,重点查 2、4、5:

维度 查什么 Wind 工具
1. 公司层 有无公告/事件 get_company_announcements
2. 行业景气层 量价库存有无异动、有无行业新闻 natural_language_get_edb_data + get_financial_news
3. 竞品层 竞品是否同涨同跌(同跌=行业性,独跌=公司性) get_stock_price_indicators(competitors_wind_codes)
4. 大盘/板块层 大盘涨跌 + 板块相对强弱 + 市场宽度 get_index_price_indicators
5. 资金层 个股与板块主力净流入方向 get_stock_price_indicators + get_index_price_indicators
6. 形态层 尾盘突袭 vs 全天阴跌 get_stock_quote(count=-20)
7. 圈内舆情层 星球里有无相关讨论/口径变更/相反说法 zsxq-cli topic +search

深度分析模式(周度/事件触发)

触发方式:说「深度分析持仓」。每周一自动执行。

内容要求

深度模式 = 日度摘要骨架 + 以下 4 个额外维度:

1. 短/中/长期逻辑逐段验证
- 对 thesis.md 中每段逻辑,写明当前状态:“成立 / 需观察 / 边际削弱”
- 引述本周增量信息作为证据

2. 竞品横截面对比
- 当前价格位置、估值分位、近期催化对比表
- 回答:“相对竞品,我的持仓被高估还是低估?”

3. 估值状态快照
- 当前 PE/PB 分位 vs 历史分位
- 当前隐含的长期增长预期 vs 我的 thesis 假设
- 标注:“当前估值在定价什么故事?”

4. 预期差全景
- 市场共识(EPS/目标价/关键假设)vs 我的判断
- 本周新增的预期差有哪些?有哪些旧预期差被修复了?

Wind 调用清单(深度模式额外调用)

日常跟踪的 Wind 数据不够支撑深度分析,额外调用:

深度维度 Wind 工具 说明
逻辑逐段验证 get_stock_fundamentals question 自然语言问 ROE/毛利率/营收净利趋势
估值分位 get_stock_fundamentals question 含「历史分位」,替代乐估全市场 PB
事件扫描 get_stock_events 分红/增发/减持/解禁/ST/诉讼,检查失效条件
股东与解禁 get_stock_equity_holders 前十大股东变动 + 限售解禁时间表(解禁压制量化)
竞品对比 get_financial_data 跨实体聚合;竞品行情用 competitors_wind_codes 批量取
行业景气全景 natural_language_get_edb_data 取更长序列(observation=12~24)判周期位置:当前在产能/库存周期哪个阶段;按「价×库存」交叉判读矩阵定调
板块估值与趋势 get_index_fundamentals + get_index_kline 板块 PE/PB 历史分位 + 板块趋势;与个股趋势做背离检查(板块涨个股跌 = 个股 alpha 为负,要查原因)

输出格式

# 持仓股深度分析 — YYYY-MM-DD

## 全景透视
[所有标的的横截面对比表 + 预期差矩阵]

## 逐标深度分析
### [标的1]
#### 短/中/长篇逻辑逐段验证
#### 竞品对比
#### 估值快照
#### 本周预期差

### [标的2] ...

频率

  • 常规:每周一 08:00 自动执行(模型 deepseek-V4-Pro)
  • 手动:市场有重大事件时手动触发

文件结构

项目根目录/
├── coverage/
│   ├── portfolio.json           ← 持仓配置 + industry_sources + market_indexes + industry_edb_codes + zsxq_groups + zsxq_expect_terms
│   ├── market_pb_latest.json    ← 全市场PB分位(单份)
│   └── {代码}_{名称}/
│       ├── thesis.md            ← 投资逻辑(必填)
│       ├── log.md               ← 边际变化流水账(自动追加)
│       ├── snapshot.json        ← 价格快照 + price_history
│       └── news_latest.json     ← AKShare新闻快照
├── scripts/
│   ├── fetch_data.py            ← 数据采集脚本 v4.1(兜底链 + 公告源导出)
│   ├── sync_snapshot.py         ← Wind 价格落盘(v5.3,防 price_history 断档)
│   └── update_volatility.py     ← 波动率标尺 v5.9(σ20/60、z_today、波动比、一年分位、事件前后对比)
└── reports/
    ├── YYYY-MM-DD_daily.md      ← 日度分析报告
    ├── fetch_report_latest.json ← 脚本采集汇总(覆盖)
    ├── intraday_latest.json     ← 盘中异动检测
    ├── volatility_latest.json   ← 波动率标尺输出(v5.9,覆盖,含各地大盘基准)
    ├── announcement_sources.json← 公告源导出(AI层消费)
    └── wind_prices.json         ← Wind 价格中间文件(供 sync_snapshot 消费)

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 中每条短/中/长期逻辑,依次执行以下检查:
1. 隐含假设显性化——"这条逻辑成立需要哪些前提?"
2. 假设失效测试——"如果这个前提不成立,最可能的原因是?"
3. 未明说的信仰——"作者没说出来但默认相信的是什么?"

Step A2:反方论点矩阵
为每只标的构建市场反方观点表。来源包括:知识星球里的看空/分歧观点(搜行业词,重点找与卖方主流相反的说法)、浑水研报中的看空观点、财报中的风险提示、行业竞争者的威胁、WebSearch 的负面讨论。

反方论点 来源 可信度 对Thesis的冲击
[反方观点] [出处] 高/中/低 哪些逻辑会被击穿

Step A3:最可能失效路径分析
列出 2-3 条最可能击穿 thesis 的路径(不是泛泛的不利情况,而是具体的事件链),并评估每条路径的触发概率。

Step A4:隐藏风险清单
找出那些"逻辑正确但可能赚不到钱"的场景:

  • 估值陷阱:基本面正确,但市场永远不给合理估值(如市场把"稳定盈利"当"没有增长")
  • 时间成本:逻辑需要 3-5 年兑现,但持仓期只有 12-18 个月
  • 杠杆/仓位风险:正确的逻辑被融资盘/仓位管理放大为亏损
  • 相关性风险:标的与大盘/板块高度相关,Beta 掩盖 Alpha(用三层归因验证:连续 10 个交易日个股 alpha 均 < 1pct,说明你买的其实是板块 beta,不是这家公司)
  • 流动性风险:小市值标的即使逻辑兑现也无法顺利退出

先用 Wind 量化,再定性判断(不要凭感觉估):

get_risk_metrics(question=&quot;查询 [标的1](代码)、[标的2](代码) 过去1年的Beta、年化波动率和最大回撤&quot;)

一次批量返回全部持仓,可直接支撑上表后三项:

风险类型 用什么 Wind 数据判断 参考阈值
相关性风险 过去1年 Beta Beta > 1.5 = 涨跌被板块放大,Alpha 难分离
杠杆/仓位风险 过去1年年化波动率 波动率 > 50% = 杠杆仓位极易被打爆
流动性/回撤风险 过去1年最大回撤 回撤 > -50% = 需评估自己能否扛住

> 实测基准(2026-09-21,过去1年):纳科诺尔 Beta 1.67 / 波动率 61.6% / 回撤 -70.2%;宁德时代 1.02 / 33.6% / -34.1%;盐湖股份 1.00 / 44.6% / -39.4%。——纳科诺尔是三只里风险最极端的,此前只定性说"北交所流动性差",有了数据才知波动是宁德的 1.8 倍。

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 + [未定价]——这是买入窗口。

如何获取市场共识

  1. 知识星球(v5.7 主源,当日版本):
    a) 券商点评正文——提取目标价、业绩预测、超预期/低于预期 措辞,以及 市场担心 / 普遍认为 / 一致预期是 这类直述共识的句子(罕见且珍贵,可直接作为第二层基准)。
    b) 讨论热度——判断「已定价 vs 未定价」的可操作代理:同一主题当天被 ≥3 家券商覆盖 = [已定价];仅 1 条提及、无券商跟进 = [未定价](最值钱的窗口)。详见「从星球提取市场预期」。
    ⚠️ 星球内容只生成假设,必须经 Wind/公告/EDB 交叉验证,验证前标 [待验证];与 Wind 实际数据冲突时以 Wind 为准(卖方天然偏乐观)。
  2. 浑水研报(可选):需完整研报原文或外资视角时,从目标价和一致预期中提取
  3. WebSearch:搜索 [标的] 一致预期 2026 EPS 券商 目标价 [标的]
  4. 近期价格:价格本身隐含了市场当前定价
  5. 估计修正方向:最近一个月 EPS 估计是上调还是下调?(修正方向比绝对值更重要)

> ⚠️ 旧版 portfolio.json 的 search_config 字段已移除,不要引用它。v5.7 起共识预期主源改为知识星球券商点评(当日版本),辅以 WebSearch「[标的] 一致预期 EPS 目标价」;Wind 侧可用 get_stock_fundamentals 问「一致预期净利润」补充。浑水仅在需完整研报原文时调用。


重要原则

  1. 围绕 Thesis 分析 — 所有结论必须映射回你的投资逻辑
  2. 增量思维 — 只关注边际变化,不重复已知信息
  3. 失效条件优先 — 首先检查 Thesis 的失效条件是否被触发
  4. 预期差优先于方向 — [+]利好+[已定价]不如[0]中性+[未定价]有价值
  5. 不替你做决策 — 提供分析框架,买卖由你决定
  6. 时效纪律 — 每日摘要只展示最近 7 天增量,老数据放背景区

依赖

  • Wind Alice 连接器(第一优先数据源:行情/财务/公告/新闻/事件/股东/宏观/指数/EDB)
  • 知识星球连接器 zsxq-cli(推荐:市场预期主源——券商点评/外资研报/专家交流;10 个星球只有 2 个开通权限,见 zsxq_groups 配置。全部不可用则降级 WebSearch + 行业信源)
  • IMA MCP 连接(可选:浑水调研知识库,v5.7 起仅用于回溯完整研报原文,日常已被知识星球替代;巨潮公告库已由 cninfo WebFetch 替代)
  • Python 3.8+ (pip install akshare pandas) — 仅脚本兜底需要,Wind 可用时非必需
  • 网络连接(脚本三源链 + cninfo + hkexnews + WebSearch)

常见问题

5 问
答案由本站依据条目字段整理
持仓股跟踪器怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_c2b475a3/stock-thesis-tracker。安装方式为未标注。装完刷新技能列表或重开客户端。

持仓股跟踪器支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

持仓股跟踪器权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

持仓股跟踪器收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

持仓股跟踪器用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。