Install
openclaw skills install @pm2-567/company-deep-analysisA股/港股公司深度分析。输入公司名称或股票代码,自动完成 6 步分析流程: 数据采集 → 公司画像 → 产业链五力 → 竞争护城河 → 财务四维 → 相对估值。 输出双产物:公司深度分析报告 + 投研简报 支持单步模式:用户指定"财务情况/财务分析/公司画像/公司基本面"时,按路由表只跑对应步骤并输出对应单文件。 触发词:公司分析 / 深度分析 / 公司调研 / 投资初筛 / 深度调研 / 公司研究 / 行业研究 / 投研简报 / 财务情况 / 财务分析 / 公司画像 / 公司基本面
openclaw skills install @pm2-567/company-deep-analysis输入 A 股/港股公司名称或股票代码,默认执行 6 步分析,输出双产物:
{公司名}_深度分析报告_{YYYYMMDD}.md){公司名}_投研简报_{YYYYMMDD}.html)单步模式:用户说"看一下 XX 的财务情况" / "XX 的公司画像" 时,按 执行模式路由 表只跑对应步骤,输出对应单文件(不要双产物)。
| 用户关键词(任一命中) | 模式 | 跑的步骤 | 输出文件 |
|---|---|---|---|
| (默认)/ 没有任何特殊词 | full | Step0 + Step1 + Step2 + Step3 + Step4 + Step5 | 双产物:_深度分析报告.md + _投研简报.html |
| 财务 / 财务情况 / 财务分析 / 看看财务 | financial | Step0(数据采集) + Step4(财务四维) | _财务分析.md(单文件) |
| 画像 / 公司画像 / 公司基本面 / 看看公司 | profile | Step0(数据采集) + Step1(公司画像) | _公司画像.md(单文件) |
最具体的优先:financial > profile > full
例:
financial(命中"财务情况")profile(命中"公司画像")full(默认)financial(最具体的优先,不双跑)/tmp/{code}_data.json路由判断完成后,在对话中展示一行:
🔍 识别到:{公司全称}({代码})· {市场} · 即将进入「{模式}」模式({跑哪几步}),输出 {单/双} 产物:{文件清单}
ai-internal-rules.md §3.1-3.4 硬要求(结论先行 + 主谓宾结构)前置检查:市场范围
支持 A 股 + 港股,拒绝美股:
识别输入类型 + 市场判定
判断用户输入(顺序敏感,先看代码长度/格式):
| 输入特征 | 模式 | 市场 |
|---|---|---|
| 5 位纯数字(如 00700、09988) | 港股代码模式 | 港股 |
| 6 位纯数字(如 600519、000858) | A 股代码模式 | A 股 |
hk00700 / sh600519 / sz000001 / bj430047 | 带前缀代码模式 | 按前缀判定 |
00700.HK / 600519.SH(带 .XX 后缀) | 港交所/上交所规范后缀模式 | 按后缀判定(需规整成 hk00700 / sh600519) |
| 含 5-6 位数字 + 公司名(如"腾讯 00700") | 公司名+代码模式 | 按代码长度判定 |
| 其他 | 公司名模式 | search 后由候选判定 |
代码规整:所有变体在传给脚本前统一为 hk{5位} / sh{6位} / sz{6位} / bj{6位},collect_data.py 用 westock_data.market_prefix() 重新识别。
情况 A:公司名模式(如"贵州茅台"、"腾讯控股")
执行 westock-data search <公司名>,取 Top 3 匹配结果(默认含 A 股/港股/美股个股)。
情况 B:股票代码模式(如"600519" / "00700" / "hk00700" / "00700.HK")
执行 westock-data quote {full_code}(取 name 字段),反查公司全称和市场。
情况 C:公司名+代码模式(如"贵州茅台 600519"、"腾讯 00700")
执行 westock-data quote {full_code}(取 name 字段),验证匹配性。
确认信息格式(在对话中展示,不弹窗):
执行 scripts/collect_data.py {股票代码},脚本自动采集 10+1 项数据:
| 模块 | 数据源 | 备注 |
|---|---|---|
| finance | 东财主要财务指标 | 已有 |
| f10 | 东财 F10 五大类 | 已有 |
| lrb | westock CLI(默认)/ 新浪(降级) | 利润表,westock 失败自动降级 |
| fzb | westock CLI(默认)/ 新浪(降级) | 资产负债表,同上 |
| llb | westock CLI(默认)/ 新浪(降级) | 现金流量表,同上 |
| quote | 腾讯行情 | 已有 |
| em_info | 东财个股信息 | 已有 |
| blocks | 百度概念板块 | 已有 |
| reports | 东财研报 | 已有 |
| ths_forecast | 同花顺一致预期 | 已有 |
以上 10 项为数据采集项,外加 1 项衍生:
| 衍生项 | 拆解方式 | 用途 |
|---|---|---|
| ebitda | westock 三表 → calc_ebitda() 拆解 | 估值 EV/EBITDA 方法 |
全部写入 /tmp/{股票代码}_data.json,终端只输出采集摘要。
批量模式(不写文件,stdout 输出 JSON,进度走 stderr):
| 模式 | 命令 | 输出 | 用在哪 |
|---|---|---|---|
--quotes | collect_data.py --quotes 600519,000858 | 多家公司行情(PE/PB/市值/股价) | Step3.2 估值章节竞对 PE/PB |
--finances | collect_data.py --finances 600519,000858,002768 | 多家公司财务比率(毛利率/净利率/ROE/营收/同比/8 期报告期) | Step4 §6 可比公司财务对比(强制走 collect_data.py --finances 直采) |
三表数据源说明:默认走
npx -y westock-data-skillhub@1.0.3 finance(一次拿全三表),失败时自动降级到原新浪接口(sina_report())。环境变量WESTOCK_TRIPLE=0强制走新浪。
执行方式:
# 获取 skill 目录路径,然后执行脚本
python3 <skill_dir>/scripts/collect_data.py {CODE}
westock-data report <代码> --limit 5 # 券商研报(战略方向、风险因素)
westock-data notice list <代码> --limit 5 # 公司公告(管理层变动、重大事项)
2 次拉取覆盖战略方向、风险因素、管理层变动、商誉减值等定性信息。
westock-data 其它命令补充)报告采集摘要(数据等级 + 获取项 + 缺失项),自动进入Step1。
输入:从 /tmp/{股票代码}_data.json 读取 f10.公司概况、f10.股东研究、f10.股本结构、em_info、blocks。
业务模式标签判定按 templates/company-profile-template.md §0 执行(申万行业 + 主营占比双判定,主业占比 50% 是分水岭),产物作为 Step2 五力框架选择器、Step3 护城河框架选择器、Step4 财务权重调整表的查询键。
输出:使用 templates/company-profile-template.md 生成 {公司名}_公司画像.md。
质量门:
输入:Step1 公司画像中的"业务模式标签" + 从 /tmp/{股票代码}_data.json 读取 f10.行业分析、blocks。
Step2 启动前置检查:Step2 §2.0「行业大盘前置」必须先生成(行业规模/CR3-CR10/生命周期定位),作为五力分析的"行业大盘"基线;若数据等级 C 级,Step2 五力表需标注"行业数据基础薄弱,五力评级置信度降低"。
模板位置:本节产出物写入主报告模板的
§2.1 行业概览(行业定位 + §2.1.1 行业规模 + §2.1.2 市场份额 + §2.1.3 行业生命周期定位)。 数据获取:从/tmp/{股票代码}_data.json读取 f10.行业分析 + westock-data sector ranking + westock-data news search <行业>。
按 ai-internal-rules.md §2.0 选五力框架(业务模式标签 → 框架 A/B/C),加载 porter-five-forces-template.md 对应章节执行。
| 力量 | 分析要点 | 数据来源 |
|---|---|---|
| 供应商议价力(上游) | 原材料/技术供应方、供应商集中度、切换成本 | f10.行业分析 + westock-data report <代码> --limit 5 |
| 买方议价力(下游) | 客户集中度、产品可替代性、议价能力 | f10.财务分析 + westock-data report <代码> --limit 5 |
| 现有竞争者威胁 | 同行数量、市场份额分布、竞争强度 | westock-data sector ranking + westock-data sector constituent |
| 新进入者威胁 | 资金/技术/牌照壁垒 | f10.行业分析 + westock-data report <代码> --limit 5 |
| 替代品威胁 | 替代产品/服务、替代趋势 | westock-data news search <行业> 替代品 |
五力搜索合并为 2-3 次(互相独立,可并行执行),命令清单按 porter-five-forces-template.md §3 / §4 各力量「数据来源」字段执行。
每项评级:强/中/弱 + 至少 2 条数据支撑。
质量门:
输入:Step2 五力分析 + 从 /tmp/{股票代码}_data.json 读取 reports、quote。
从Step2提取同行 + westock-data sector constituent <板块代码>(拿申万成份股列表)+ westock-data report <代码> --limit 5(券商研报里的竞品分析),筛选 5-8 家主要竞对。
竞对选取方法论:
核心原则:从"业务模式"和"产业链位置"双维度匹配。先找同行业(高可比),再找上下游/相似业务(中可比),最后是行业参考(低可比)。
具体步骤:
反例警示(必须避免):
最终报告规则:可比公司在双产物中的差异化处理:
产物归属:本步骤识别结果作为模板 §2.3 行业与竞争分析的前置输入,不单独占用模板小节。
竞对主营/营收用 westock-data report <竞对代码> --limit 3(研报里覆盖)。竞对 PE/PB/市值用脚本的批量行情入口一次获取:
python3 <skill_dir>/scripts/collect_data.py --quotes {目标代码},{竞对代码1},{竞对代码2},...
该命令直接打印各代码的 name/price/pe_ttm/pb/mcap_yi。整理对比表:公司名/主营/营收/市值/PE/PB/市场份额。
方法论升级说明:Porter 1985 经典六类护城河已扩展为按行业适配的 6 套框架, 并引入 Hamilton Helmer 7 Powers、Ben Thompson Aggregation Theory 等现代权威方法论。 加载
references/moat-analysis-framework.md后,第一步:用 §0 行业适配选择器选定框架,再按该框架的指标体系执行。
按 ai-internal-rules.md §2.5 选护城河框架(业务模式标签 → 框架 A-F),加载 moat-analysis-framework.md 对应章节执行。
三轮反问机制(可复制性 / 周期韧性 / 隐蔽威胁):按 references/moat-analysis-framework.md §8 执行。
按所选框架(§0 选择器)的核心维度逐项评级(宽/窄/无)。
数据来源:f10.财务分析 + westock-data report <代码> --limit 5(研报观点)。
每轮记录:反问问题 → 分析过程 → 评级是否调整 → 理由。
质量门:
3 问与 §3.3 护城河三轮反问的区分:§3.3 问的是"竞对能不能复制你的护城河"(竞对视角);§3.4 问的是"客户为什么非选你不可"(客户视角)——两个视角互补,§3.4 必须基于 §3.3 的护城河综合评级输出。
按 §3.3 选定的护城河框架(消费/平台/制造/金融/医药/地产)→ references/moat-analysis-framework.md §11 取对应 Q1/Q2/Q3 指标定义,填到 deep-analysis-report-template.md §2.5 的 3 个 {Q? 指标} 占位符。
输入:从 /tmp/{股票代码}_data.json 读取 lrb(利润表)、fzb(资产负债表)、llb(现金流量表)、finance(主要财务指标)、f10.财务分析。
加载 references/financial-analysis-guide.md,第一步:根据 Step1 的"业务模式标签"选定权重表,再按选定的权重做四维分析。
ai-internal-rules.md §0.1)跑报告第一步:按 references/ai-internal-rules.md §0.1 判定基准年,所有模板列名引用 {基准年} / {基准年-1} 变量,不允许硬编码具体年份。
按 ai-internal-rules.md §3.0 选财务权重(详见 financial-analysis-guide.md §0.1)。报告"摘要"必须说明选用了哪套权重。
按 ai-internal-rules.md §3.6 执行:ROE = 销售净利率 × 总资产周转率 × 权益乘数。亏损公司不豁免,4 种替代公式任选其一(扣非归母 ROE / ROA / EBIT ROIC / 三年平均)。
输出表(必做):
| 报告期 | 销售净利率 | 总资产周转率 | 权益乘数 | ROE | 行业 ROE | 驱动因子 |
|---|---|---|---|---|---|---|
| 4 期 | {净利率/周转率/杠杆} |
| 维度 | 权重(已调整) | 得分 | 加权得分 |
|---|---|---|---|
| 盈利能力 | {选定%} | __/100 | __ |
| 偿债能力 | {选定%} | __/100 | __ |
| 营运能力 | {选定%} | __/100 | __ |
| 成长能力 | {选定%} | __/100 | __ |
| 合计 | 100% | __/100 |
输出:使用 templates/financial-analysis-template.md 生成 {公司名}_财务分析.md。
质量门:
输入:竞对公司 + 从 /tmp/{股票代码}_data.json 读取 quote、reports、ths_forecast。
加载 references/valuation-methods.md。
方法选取:按 ai-internal-rules.md §7.1 选 1-3 种估值方法(PE-TTM / PB-MRQ / EV/EBITDA-TTM / PS-TTM / NAV 等),按 §7.2 写估值结论。
自动判定:scripts/valuation.py 的 _classify_industry(data) 已实现上述判定逻辑,输入申万一级行业自动返回首选方法 + 交叉验证方法。
实操流程:
调估值脚本(scripts/valuation.py):
python3 scripts/valuation.py 600519 peers.json
# peers.json 示例:{"peer_pe_median": 25.0, "peer_pb_median": 8.0}
脚本输出 JSON:行业分类 / 首选方法 / 合理股价 / 上行空间 / 数据完整度
交叉验证(10 个变体中至少 2 个):
数据完整度检查:< 60% 时提示补充行业数据
报告写作:templates/deep-analysis-report-template.md §四估值(只展示数字,公式放 valuation-methods.md)
跑完 6 步分析后,输出两份产物(默认行为):
| 产物 | 文件名 | 模板 |
|---|---|---|
| 深度分析报告 | {公司名}_深度分析报告_{YYYYMMDD}.md | templates/deep-analysis-report-template.md |
| 投研简报 | {公司名}_投研简报_{YYYYMMDD}.html | templates/briefing-card-template.html |
分析完成后清理临时数据:
rm -f /tmp/{股票代码}_data.json