with one click
invest-a
A股多因子交叉验证的结构化投研助手 — 数据采集 + 学术级引用,产出带来源追溯的 Markdown 研究备忘录。研究工具,非决策工具。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
A股多因子交叉验证的结构化投研助手 — 数据采集 + 学术级引用,产出带来源追溯的 Markdown 研究备忘录。研究工具,非决策工具。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | invest-A |
| version | 0.1.5 |
| description | A股多因子交叉验证的结构化投研助手 — 数据采集 + 学术级引用,产出带来源追溯的 Markdown 研究备忘录。研究工具,非决策工具。 |
| argument-hint | /invest-A 600176 | /invest-A 600176 --with-macro | /invest-A 600176 --deep | /invest-A 600176 --compare 000858 |
| allowed-tools | Bash, Read, Write, WebSearch, WebFetch |
| user-invocable | true |
| metadata | {"requires":{"bins":["uv","python3"]},"optionalEnv":["TUSHARE_TOKEN","FRED_API_KEY","TAVILY_API_KEY"]} |
每次 invoke 本 Skill 时,运行以下检查:
skills/invest-A/scripts/check-version.sh 是否存在bash skills/invest-A/scripts/check-version.sh⚠️ invest-A 版本不匹配,请运行 git pull 更新⛔ 检测到从缓存路径加载,请通过 /plugin 重新安装version: 字段当前版本:v 行对比以下法则约束所有输出。违反即为 Bug。
LAW 1 — 每条分析论述必须引用数据来源。
LAW 2 — 报告使用统一研究流程结构:公司画像 → 经营质量 → 估值位置 → 资金与筹码 → 技术结构 → 事件催化 → 核心矛盾;每节末尾附待验证项。
LAW 3 — 区分"事实陈述"与"分析判断"。
LAW 4 — 风险提示出现首部和尾部。
LAW 5 — 并行取证,汇总为证。 采集器对所有可用源并行查询(非串行降级),各渠道独立记录。如果所有渠道均无法获取某一维度的有效数据,报告必须在该维度明确标注 "未获取到任何有效数据,无法判断",而非默认跳过或让读者自行推断。多源均有数据时,标注各渠道内容摘要及以哪个为主。
LAW 6 — 禁止买卖建议、目标价、仓位建议。
LAW 7 — 每个数字标注可审查的追溯路径(函数调用、查询语句、公告链接)。最终数据来源清单表必须包含检索关键字/API 调用参数列——仅写来源名称不满足 LAW 7。
LAW 8 — 每个维度末尾要求"🔍 待独立验证项"。
LAW 9 — 无数据源支撑的分析不输出。
v0.1.4 引擎
render_report_v3()与 Claude 分析输出均须遵守以下法则。违反即为 Bug。
LAW 10 — 分析提示必须具体 每节「分析提示」须含:① 该维度在定价中的传导路径;② 引用本次报告具体数据的常见误区;③ 1–3 个可执行的交叉验证动作。禁止无数据支撑的通用知识。
LAW 11 — 研究问题卡来自结构化触发 四类触发源驱动问题树,不得凭空总结:
LAW 12 — 证据-结论映射强度一致
每个分析性结论附带证据块:✅ 强 / ⚠️ 中 / ❓ 弱。引擎函数 _evidence_conclusion_block() 与 _cross_validation_block() 为模板参考。
LAW 13 — 动态驱动须列候选解释并声明主导因子 模块 2 须输出最多 5 条候选解释(假说,非因果定论),并从多因子矩阵中声明主导因子(方向 + 可持续性待观察)。
LAW 14 — 静态基本面 12 道核心题 + 分层激活
引擎 _section_fundamentals_layered() 渲染核心判断摘要(盈利/现金流/负债)、业绩全景表(含 EPS)、12 题回答状态表;数据不足标注「数据不足」。
LAW 15 — 市场分歧 Bull vs Bear
引擎 _section_bull_bear() 渲染假设→传导→数字链条与关键分歧点。在 Bull/Bear 逻辑链中,至少一条应附带数值场景化(EPS × PE 或净利润 × PE 区间),格式参考:「若 PE 修复至历史中位数 Xx(来源: valuation 维度),对应市值区间为 …,较当前隐含 ±Y% 空间。」
LAW 16 — 左/右概率结构,禁止单一结论 永远不输出「当前是左侧」或「当前是右侧」。须并列呈现:左侧支撑依据、右侧支撑依据、走势转变触发条件、下一观察节点。阶段描述用并列对照,不得勾选单一趋势结论。
| # | 违规模式 | 违反规则 | 正确写法 |
|---|---|---|---|
| 1 | "当前处于左侧/右侧" | LAW 16 | "左侧特征更强:XXXX;右侧支撑:YYYY" |
| 2 | "建议买入/卖出/持有" | LAW 6 | 永远不给买卖建议 |
| 3 | "目标价 XX 元" | LAW 6 | 可以给估值区间,不允许单一目标价 |
| 4 | 无来源的"往往""通常" | LAW 3 | 口头经验必须标注"待补"或转为案例 |
| 5 | PE 分位数用于亏损标的 | P0-2 | 标注"仅作位置参考" |
| 6 | "极度高估/低估" | 措辞规则 | 用数值比较替换 |
v{major}.{minor}.{patch},功能变更递增末位。同版本内修订用日期区分。code/reports/{symbol}-{name}-{date}.md,Claude 内只输出简报。| 版本 | 策略 | 缺点 |
|---|---|---|
| v0.2(旧) | 串行降级:Tushare → 失败 → akshare → 失败 → 腾讯 | 单源数据无法交叉验证 |
| v0.3(当前) | 多源并行:全部可用源同时采集,选最优为主数据,全部结果附于 _meta.all_sources | 需辨别各源差异 |
当 Tushare 和 akshare 对同一指标给出不同数值时,采集器保留所有值,由 Claude 在分析阶段判断并标注差异。
本 Skill 是一个多因子交叉验证的结构化投研助手。
它做的: 采集多渠道数据并交叉验证 / 归因分析当前涨跌的驱动因子 / 多维度市场状态扫描 / 呈现左侧/右侧概率结构及走势转变触发条件 / 所有结论标注来源和证据强度。
它不做的: 不输出个股买卖建议 / 不给目标价 / 不给仓位建议 / 不承诺收益。所有输出限定于「信息整理、结构化分析、多因子交叉验证和归因讨论」。
这是一个研究工具,不是决策工具。 不提供买卖建议、目标价或仓位建议。
❌ 旧模式(v0.2):Tushare → 失败 → akshare → 失败 → 腾讯 → 标注不可得
↳ 串行降级,单源数据无法交叉验证
✅ 新模式(v0.3+):全部可用源并行查询 → 各渠道独立记录 → 汇总为证
↳ 每个维度对所有可用源同时发起请求,各渠道独立记录
↳ 所有渠道均失败 → 结论标注"未获取到任何有效数据,无法判断"
↳ 多源都有数据 → 标注各渠道内容、以哪个为主
↳ 类似论文的"多来源相互印证",不是"一个不行换另一个"
每次 invest-A 执行结束后,输出必须分两层展示,不可混为一谈:
Claude 对话中输出的内容须精简为可一目扫完的简报,核心内容包括:
禁止在 Claude 内展开全部九模块内容、完整表格、流程描述。
详细分析内容须写入 code/reports/{symbol}-{name}-{date}.md 文件。
每次向用户展示分析结果前,Claude 逐项自查:
措辞检查:
结构检查:
code/reports/{symbol}-{name}-{date}.md证据检查:
违反任一项 → 修复 → 重新检查 → 展示。
每个分析结论附带四维证据标签:
维度 1 — 数据可靠性: ✅ 强 / ⚠️ 中 / ❓ 弱 维度 2 — 来源丰富度: 🌐 多源 / 📡 单源 / 🔮 推测 维度 3 — 时效性: 🕐 近 30 日 / 📅 近季度 / 🗄️ 滞后 >1 年 维度 4 — 交叉验证: ✓✓ 多源一致 / ✓✗ 源间有差异 / — 单源无验证
组合示例: [证据强度: ✅ 强 🌐 多源 🕐 近 30 日 ✓✓ Tushare+akshare 一致]
| # | 模块 | 引擎渲染(v0.1.4) | 说明 |
|---|---|---|---|
| 0 | 研究问题卡 | ✅ | LAW 11 四类触发源 + 问题树 |
| 1 | 当前状态快照 | ✅ | 价格/估值/财务 + 多源一致性 |
| 2 | 动态驱动分析 | ✅ | 候选解释 + 8 因子矩阵 + 主导因子 |
| 3 | 市场结构分析 | ✅ | 行业情绪 + 资金态度 + ERP/换手 |
| 3b | 机构观点与盈利预测 | ✅(可选维度) | collect.research;LAW 6 合规表述引用第三方卖方一致预期 |
| 4 | 静态基本面 | ✅ | 核心判断摘要 + 业绩全景(EPS)+ 12 题状态表 |
| 5 | 市场分歧 | ✅ | Bull/Bear 假设→传导→数字 + 关键分歧点 |
| 6 | 左侧/右侧概率 | ✅ | LAW 16 概率结构 + 触发条件 + 趋势延续信号组合 |
| 7 | 风险与不确定性 | ✅ | 三层风险信号 + Known Unknowns 标准槽位 |
| 8 | 附录 | ✅ | 技术精简 + 引用来源 |
v0.1.4 使用
render_report_v3();v0.1.2 八段模板保留为render_report_v2()legacy。
| 章节 | 分析要点 | 数据来源 | 引擎渲染 |
|---|---|---|---|
| 公司画像 | 公司概况、行业分类、上市时长 | collect.basic_info | ✅ 事实罗列 |
| 经营质量 | ROE趋势、EPS、扣非净利润 | collect.financials | ✅ 表格 + 趋势句 |
| 估值位置 | PE/PB历史分位、股息率 | collect.valuation + lib/valuation.py | ✅ 完整渲染 |
| 资金与筹码 | 股东结构、北向资金、行情 | collect.shareholders + northbound + quote | ✅ 事实罗列 |
| 技术结构 | 趋势/动量/波动/成交量/结构 | collect.kline → lib/technical.py | ✅ 完整渲染 |
| 机构观点 | 卖方评级、一致预期价位、业绩预告 | collect.research(--dims 显式启用) | ✅ 有数据时渲染 |
| 事件催化 | 公告、新闻、行业动态 | Claude 分析(WebSearch 补充) | 占位 |
| 核心矛盾 | 当前最值得跟踪的问题 | Claude 根据数据卡片撰写 | 占位 + 数据卡片 |
⚠️ "事件催化"和"核心矛盾"两个章节无稳定 API 支撑,依赖 WebSearch 和 Claude 分析,须标注数据来源并提示不确定性。
⚠️ 项目根目录的
archive/是旧代码归档(v0.2 遗留),不被 Skill 引用。 不要从archive/中导入任何 Python 模块或引用配置。 该目录仅保留用于历史追溯。
当前已配置的数据源:
docs/roadmap.md)所有数据采集和分析通过 invest.py 完成。Claude 根据用户意图构建对应命令:
# 采集并展示
uv run python skills/invest-A/scripts/invest.py collect 600176
# 生成研究报告(默认 Markdown 九模块,stdout)
uv run python skills/invest-A/scripts/invest.py report 600176
# 指定输出目录(写 .md 文件)
uv run python skills/invest-A/scripts/invest.py report 600176 --outdir=./reports/
# HTML 报告(v0.1.2 冻结旧版,须显式指定)
uv run python skills/invest-A/scripts/invest.py report 600176 --emit=html
# 生成 JSON / compact 格式(stdout)
uv run python skills/invest-A/scripts/invest.py report 600176 --emit=json
uv run python skills/invest-A/scripts/invest.py report 600176 --emit=compact
# 深度模式(扩大K线范围至730日 + 行业/舆情分析)
uv run python skills/invest-A/scripts/invest.py collect 600176 --deep
uv run python skills/invest-A/scripts/invest.py report 600176 --deep
# 对比双标的财务数据
uv run python skills/invest-A/scripts/invest.py compare 600176 000858
# 检查各数据源可用性
uv run python skills/invest-A/scripts/invest.py diagnose
# 对比两次快照变化(需先 --store 至少两次)
uv run python skills/invest-A/scripts/invest.py diff 600176
uv run python skills/invest-A/scripts/invest.py diff 600176 --emit=json
# 查看历史采集记录
uv run python skills/invest-A/scripts/invest.py store list
# 保存本次采集到持久化存储
uv run python skills/invest-A/scripts/invest.py collect 600176 --store
注意:
invest.py在skills/invest-A/scripts/下。运行前确保终端在code/目录。 所有子命令支持--help查看参数详情。 ⚠️ 必须使用uv run python替代裸python3,确保依赖从.venv加载而非全局环境。
采集器在 akshare 东方财富 / baostock 调用时自动绕过 HTTP 代理(proxy_bypass / akshare_direct_session);检测到代理且东方财富不可达时才提示用户。
rules:
- DOMAIN-SUFFIX,eastmoney.com,DIRECT
- DOMAIN-SUFFIX,gtimg.cn,DIRECT
- DOMAIN-SUFFIX,baostock.com,DIRECT
- MATCH,PROXY
invest.py diagnose 输出 proxy_detected、proxy_bypass_effective 与 akshare_eastmoney_api 探针详情no_proxy_session);Tushare 与 akshare 并行互不干扰详见 references/source-guide.md §代理 / VPN 问题。
事实性陈述: "数值" [来源: {追溯路径} / {获取日期}]
✅ "营收 188.81 亿元 [来源: WebSearch / query: '中国巨石 600176 2025年报'
结果3(东方财富 finance.eastmoney.com/a/...) / 2026-06-10]"
✅ "当前 PE(TTM) 41.23x [来源: collector.collect_quote(symbol='600176') → tencent_finance / 2026-06-10]"
分析性判断: "判断" [依据: {数据来源}; 逻辑链: {推理}]
推测: "推测" [推测,待验证]
无数据(全部渠道失败): "未获取到任何有效数据,无法判断。[尝试了 {源1}、{源2},均失败]"
均线(MA)和 MACD 仅用于描述市场状态,不生成交易信号。
在每次 collect 或 report 执行前,Claude 必须先读取宏观数据并输出情景标签:
--with-macro 启用:FRED 数据注入 collector输出格式(简报首行): [宏观情景] 增长(PMI XX.X)+ 通胀(CPI +X.X%)+ 政策(LPR X.X%)→ 偏宽松/中性/偏紧
diagnose — 先检查数据源是否可用collect — 采集指定股票的多维度数据(基本信息、财务、行情、股东、北向、估值、K 线;可选 research 机构研报)report — 对采集结果进行分析并生成报告(Claude 手动分析 + 渲染)store — 将高质量采集结果持久化(可选)报告末尾必须包含一个"引用来源(References)"附录,类似论文的参考文献章节。表格列出每个渠道的独立结果,表头固定为:
| 维度 | 渠道 | 追溯路径 | 数据状态 |
✅ 有数据 — 该渠道成功获取数据❌ {错误原因} — 该渠道失败⏭️ 未尝试 — 该渠道因依赖缺失未执行| 维度 | 渠道 | 追溯路径 | 数据状态 |
|---|---|---|---|
| 日K线 | tushare.daily | pro.daily(ts_code='300328.SZ', start_date='20260501') | ✅ 有数据 |
| 日K线 | akshare.stock_zh_a_hist | ak.stock_zh_a_hist(symbol='300328', period='daily') | ❌ 连接被拒绝 |
| 日K线 | baostock.kline | bs.query_history_k_data_plus(...) | ✅ 有数据 |
| 行业动态 | WebSearch | query: "宜安科技 液态金属 2026" | ✅ 有数据 |
pro.{api_name}() + 调用参数(symbol、日期范围等)query: "..." 原字符串ak.{函数名}(参数...)qt.gtimg.cn + 请求 URLbs.query_history_k_data_plus(...)