stock-analysis-enhanced
一句话搞定个股分析 — 说"分析XXX",自动采集30+数据源 → AI完成基本面(Step 0-8)+技术面+资金面的完整研报 → 生成交互式HTML报告。支持增量更新(K线/行情/技术指标自动刷新)。触发词:"分析XXX股票"(首次)或"更新XXX股票"(增量)。
Source facts
- Repository
- mingli30119/stock-analysis
- Last source activity
- May 30, 2026 at 15:00
- Detected SKILL.md language
- Chinese
- Stars
- 620
- Forks
- 100
Install options
The review-first prompt is selected by default. You can switch to a direct command or download a local copy.
Review the source files
Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.
Showing SKILL.md
SKILL.md
Source instructions · Read-only preview- name
- stock-analysis-enhanced
- description
- 一句话搞定个股分析 — 说"分析XXX",自动采集30+数据源 → AI完成基本面(Step 0-8)+技术面+资金面的完整研报 → 生成交互式HTML报告。支持增量更新(K线/行情/技术指标自动刷新)。触发词:"分析XXX股票"(首次)或"更新XXX股票"(增量)。
- trigger_keywords
- ["分析股票","个股分析","股票研究","分析一只股票","更新股票","刷新报告","增量更新"]
- version
- 3.1
- last_updated
- 2026-05-30T00:00:00.000Z
- variant
- enhanced
# 一句话搞定个股分析
> 版本:v3.1 | 更新:2026-05-30 | 用户说一句话 → 30+数据源采集 → Step 0-8 基本面 + 第9章技术面 + 资金面 → 双主题交互式HTML
---
## 📋 快速导航
- [⚡ 使用方式](#使用方式) — 一句话触发,全自动执行
- [场景判断](#场景判断)
- [场景A:首次分析](#场景a首次分析) — 完整三阶段
- [场景B:增量更新](#场景b增量更新) — 快速刷新数据
- [🏗️ 三层架构](#三层架构) — Phase 1 数据采集 → Phase 2 AI分析 → Phase 3 HTML
- [📊 输出内容](#输出内容) — MD 报告 + HTML 报告的完整结构
- [🎨 HTML手写规范](#html手写规范) — 分批手写 + grep 机械校验
- [🔧 执行流程](#执行流程) — Phase 1/2/3 详细步骤
- [🔄 增量更新详细说明](#增量更新详细说明) — 脚本自动 + AI 手动
---
## ⚡ 使用方式
### 场景判断
**AI必须根据用户输入的关键词判断场景:**
#### 场景A:首次分析(完整流程)
**触发关键词:**
- "分析 XXX股票"
- "个股分析 XXX"
- "研究 XXX"
- "生成 XXX报告"
- 用户明确说"首次分析"
**判断逻辑:**
- 用户输入包含上述关键词 → 执行首次分析(Phase 1→2→3)
#### 场景B:增量更新(只更新数据)
**触发关键词:**
- "更新 XXX股票"
- "刷新 XXX报告"
- "增量更新 XXX"
- "更新报告"
- 用户明确说"更新"
**判断逻辑:**
1. 用户输入包含上述关键词
2. 检查 `output/个股研究-{股票名称}.html` 是否存在
3. 如果存在 → 执行增量更新
4. 如果不存在 → 提示用户:"未找到 XXX 的报告,是否需要首次分析?"
---
### 场景A:首次分析
**当用户说"分析 XXX股票"时,一句话触发全流程:**
### Phase 1: 数据采集(3-5分钟)
```bash
cd G:/vibe/my-skills/stock-analysis-enhanced
python stock_full_report.py <股票代码>
```
**示例:**
```bash
python stock_full_report.py 600519 # 贵州茅台
python stock_full_report.py 600673 # 东阳光
```
**唯一输出:** `output/data_<股票代码>.json`(包含K线、财务、股东、业务构成等完整数据,供Phase 2/3使用)
**⚠️ Phase 1完成后立即进入Phase 2**,不要停下来询问用户。JSON只是数据中间产物。
**⚠️ Phase 1 新增功能:** 自动计算技术指标(MACD/KDJ/RSI/BOLL/MA),保存到 `data_{代码}.json` 的 `technical_indicators` 和 `technical_signals` 字段,供 Phase 3 生成第9章使用。
---
### 场景B:增量更新
**执行命令:**
```bash
cd G:/vibe/my-skills/stock-analysis-enhanced副本
python update_stock_report.py <股票代码>
```
**常用参数:**
```bash
# 基本用法(自动查找HTML文件)
python update_stock_report.py 000066
# 指定HTML文件
python update_stock_report.py 000066 --html output/个股研究-中国长城.html
# 强制更新(跳过检查,直接更新)
python update_stock_report.py 000066 --force
```
**更新内容:**
- ✅ K线数据(rawData数组)
- ✅ Hero区域(最新价、涨跌幅)
- ✅ 第9章技术指标(MACD/KDJ/RSI/BOLL图表)
- ❌ 基本面分析(Step 0-8,不更新)
**详细说明:** 见本文件末尾"[🔄 增量更新详细说明](#增量更新详细说明)"章节
---
### Phase 2: AI深度分析(30-60分钟)
**AI必须手动执行以下步骤:**
1. **读取数据:** `output/data_<股票代码>.json`
2. **执行MCP搜索:** 根据实际需要搜索(通常3-6次)
- 行业趋势、市场规模
- 竞争对手、市场份额
- 券商研报、目标价
- 最新新闻、政策动态
3. **逐步完成Step 0-8分析:** 严格按照分析框架,每个Step达到要求
4. **输出MD报告:** `output/个股研究-<股票名称>.md`
**⚠️ 三阶段连续执行,中间不中断:** Phase 2完成后**立即进入Phase 3**,不要停下来询问用户是否继续。MD报告只是中间产物,HTML才是最终交付物。
---
### Phase 3: HTML生成层(AI手动分批拼装 + 逐批机械校验)
> ⚠️ 写 HTML 只用 Write 工具。整个 Phase 3 只需 6 次 Write 调用,约 30 分钟,完全在单会话内完成。不要用 Python 替代。
**原理:** AI手写完整HTML——从范例提取结构参照,从 `shared/` 搬运CSS/JS,从MD报告提取内容。**分批 Write,每批写完后立即用 grep 对范例做机械校验,通过才继续。**
**核心规则:不靠记范例,靠每批 grep diff。**
**执行步骤:**
1. **读取模板:** `shared/template_base.css` + `shared/template_base.js`
2. **读取范例并提取参照:** `examples/个股研究-中国长城.html` → 用 grep 提取 nav 锚点列表、section id 列表,保存为临时参照文件
3. **读取校验规范:** `HTML手写参考.md` → 严格按「分批机械校验」表格逐批执行
4. **读取数据:** `output/个股研究-{股票名称}.md` + `output/data_{代码}.json`
5. **分批手写HTML(每批 = Write + grep校验):**
- 每批 ≤300行,用 **Write工具** 直接写HTML markup
- **写完后立即跑该批对应的 grep 校验命令**(命令清单见 `HTML手写参考.md` § 分批机械校验)
- 校验通过 → 下一批。校验失败 → grep 范例对应行 → 比对 → Edit 修正 → 重新校验
6. **合并:** 仅用 `cat` 做机械字节拼接
7. **终验:** 运行合并后终验命令(nav-id 配对 + 结构完整性),全部通过才输出最终文件
8. **输出:** `output/个股研究-{股票名称}.html`
### ⚠️ 分批手写规则(强制)
**禁止行为:**
| 禁止 | 原因 |
|------|------|
| ❌ **Python f-string/template 生成HTML** | 需要大量 `{{}}` 转义,易出错不可维护 |
| ❌ **Bash heredoc 生成HTML** | 多行HTML下经常EOF匹配失败 |
| ❌ **一次性写出整个HTML** | >300行文件必须分批,每批独立一个Write调用 |
| ❌ **用 `python -c` 拼接HTML字符串** | 属于Python生成,不是手写 |
**正确做法:**
| 操作 | 工具 | 说明 |
|------|------|------|
| 写入HTML内容 | **Write** | 直接写HTML markup,无转义问题 |
| 精确局部修改 | **Edit** | 替换特定行,不改动其他部分 |
| 机械合并部分文件 | **Bash `cat`** 或 **Python `file.read()`** | 仅读取+拼接字节,不生成任何markup |
**标准分批方案(~900行HTML)—— 每批三步:Read范例 → Write → grep:**
**参考范例:** `examples/个股研究-中国长城.html`(864行,金标准成品)
> ⚠️ **参考范例路径不可变。** 该文件位于 `examples/` 目录(稳定范例),禁止替换为 `output/` 下的生成结果。行号基于当前版本,如范例更新需同步修正行号。
| 批次 | Step 1: Read范例(先看再写) | Step 2: Write | Step 3: grep兜底 |
|------|---------------------------|---------------|------------------|
| Batch 0 | `Read 中国长城 line=1-129`(head+style段) | Write DOCTYPE + `<head>` + `<style>` | `grep -c '<style>'`=1, `grep 'echarts\|MathJax'` 确认CDN |
| Batch 1 | `Read 中国长城 line=130-195`(nav+hero+conclusion+profile网格) | Write `<body>` + nav + hero + conclusion(含交易参数行) + grid-2(公司画像+近期动态) | `grep -oc 'href="#'`=14, `grep -c 'hero-meta-item'`=5, `grep 'nav-analysis-date'`存在, `grep -c '利好\|利空\|中性'`≥5, `grep 'overflow-y\|max-height:300'`=0, `grep -c 'style="[^"]*color:#fff[^"]*"\|style="[^"]*color:white[^"]*"\|style="[^"]*color:rgba(255'`=0, `grep -c '买入区间\|止损位\|目标价\|建议仓位'`≥4 |
| Batch 2 | `Read 中国长城 line=196-260`(饼图+财务+K线) | Write 饼图+财务grid-2 + K线card(kline-section) | `grep 'id="kline-section"'` 存在, `grep 'height:480px'` 存在, `grep -c 'markLine'`≥1, `grep -c 'markPoint'`≥1 |
| Batch 3 | `Read 中国长城 line=260-397`(Step 0-3) | Write Step 0-3 卡片(mission/macro/chain/quality) | `grep -o 'id="[^"]*"'` → mission/macro/chain/quality 四者存在 |
| Batch 4 | `Read 中国长城 line=398-550`(Step 4-6) | Write Step 4-6 卡片(elasticity/risk/valuation) | `grep -o 'id="[^"]*"'` → elasticity/risk/valuation 三者存在, `grep -c 'score-fill.*width'`≥10, `grep 'border-top:2px solid var(--gold)'` 弹性树横线存在 |
| Batch 5 | `Read 中国长城 line=551-863`(Step 7-8+第9章+footer) | Write Step 7-8 卡片 + 第9章技术面卡片(信号总览6卡片→技术图表2x2→多周期趋势→位置形态→动量量价→资金面→市场风格→综合研判)+ footer + `</div>` | `grep -o 'id="[^"]*"'` → compare/tracking/technical 存在, `grep '📌'` 存在, `grep -c '<p>' footer段`=5, `grep 'strong' footer段`=0, `grep '催化剂兑现追踪\|已兑现\|待兑现'`存在, `grep '📋 事件记录'`存在, `grep -c 'chart-macd\|chart-kdj\|chart-rsi\|chart-boll'`=4 |
| Batch 6 | `Read 中国长城 line=864-1155`(script段);从 `data_{代码}.json` 提取K线(最近120条)和业务构成 | Write `<script>...</script>`(搬运 `template_base.js` 完整内容,替换4处占位符:`__RAW_DATA_ARRAY__` → K线JSON数组、`__PIE_DATA_ARRAY__` → 业务构成JSON数组、`__MARKLINE_DATA__` → markLine数组、`__MARKPOINT_DATA__` → markPoint数组。模板已含技术指标计算+6个渲染函数,直接搬运无需修改) | `grep -c '__'`=0, `grep -cF 'const rawData'`=1, `grep -c 'renderMACD'`=1, `grep -c 'renderKDJ'`=1, `grep -c 'renderRSI'`=1, `grep -c 'renderBOLL'`=1, `grep -c '</script>'`=1 |
| 合并+终验 | — | Bash `cat _h_part*.html > 最终文件`,然后运行 **`HTML手写参考.md` § 终验自检清单** 全部 **16** 条 | 全部通过才输出最终文件 |
**执行规则(不可跳过):**
1. 每批第 1 步:**必须用 Read 工具打开范例对应行号区间**。读完范例段落后立即 Write,中间不做其他操作。
2. 写完后跑第 3 步 grep。对不上 → `grep` 范例对应行 → `grep` 自己写的 → 看差异 → Edit 修正 → 重跑 grep。
3. 三步全部通过才进入下一批。
> **若各批写为独立文件,用 `cat _h_part*.html > 最终文件` 合并,然后删临时文件。**
**Step 0-8 关键可视化组件清单:**
- **Step 0:** 4个信息卡片(标的/周期/风格/命题)
- **Step 1:** 核心矛盾高亮框
- **Step 2:** 产业链SVG图谱、grid-2布局、关键判断提示框
- **Step 3:** grid-2布局、6个评分条、评级徽章
- **Step 4:** 弹性树、公式卡片2x2、情景分析grid-3
- **Step 5:** grid-2布局、止损信号列表
- **Step 6:** grid-2布局、三档目标价、盈亏比量化卡片
- **Step 7:** 对比表格、增长引擎切换3卡片
- **Step 8:** grid-2布局、执行清单、verdict-highlight、五维评分、📌总结框(强制,红色左边框)
**关键约束:**
- **OHLC 转换**:`ohlc.push([d[1], d[4], d[3], d[2]])` — rawData 格式 `[日期, 开盘, 最高, 最低, 收盘, 成交量]`(akshare 原生列序),itemStyle 用 `color: c.upColor, color0: c.downColor`。与 stock-analysis-github 验证通过版本一致
- 成交量柱必须每根单独着色(红涨绿跌)
- 产业链 SVG 文字使用 `.svg-hdr` / `.svg-sub` class
- MathJax 使用 `\\(...\\)` 行内分隔符 → **HTML源码中写 `\(...\)`(单反斜杠),禁止 `\\(...\\)`(双反斜杠)**。HTML text 中反斜杠不是转义符,双反斜杠会导致 MathJax 分隔符匹配失败
- 所有CSS class必须来自 `shared/template_base.css`
- **内容区子标题禁止编号前缀**(不用 "1a/1b/2a"),直接写中文描述文字
- **禁止 h2/h3 标题带"Step X"编号前缀**:卡片标题只写中文描述(如"任务锁定与核心矛盾",不写"Step 0 · 任务锁定"),`.sub` 同样禁止编号
- **Hero meta-item 5项固定顺序**:①分析基准日(`data-cutoff`日期,标签"分析基准日",值格式`YYYY-MM-DD`)②公司质地等级(Step 3评分,标签"公司质地")③中期目标价 ④盈亏比 ⑤风险等级
- **两套评分标签区分**:Step 3 评分 → 标签"公司质地评分";Step 8 评分 → 标签"综合交易评分"。两套分维度不同、数值不同是正常的,标签区分清楚即可
- **产业链 SVG 内容质量**:不满足于基础的3节点模板。根据 MD 分析内容扩充节点——多业务线(如 IVD vs SPD)、分支节点(如子公司网络)、关键数据标注(如各业务毛利率)。**每个`<text>`元素≤14个中文字**,超出换新`<text>`行(y+22)。写完自检:最长text字符数×13px < 所在rect的width
- **📌总结框为强制组件**:Step 8 底部必须有一个独立的红色左边框总结框(`border-left:4px solid var(--red-up)`),包含 `📌 总结` 标题和一段话总结,不可省略或用 verdict-highlight 替代
- **弹性树强制HTML模板**:使用flex+CSS边框构建树形图——顶层节点(金色边框)→竖线(2px×6px gold)→横线(border-top:2px solid gold)→三列子节点flex(2:1:1)。🔴红色/🟡金色/⚪灰色分别标记核心/次要/其他业务。每个子节点含业务名+营收占比+毛利率+业务线+弹性因子。**禁止纯文本无树形图**
- **评分条score-fill宽度强制**:每个 `.score-fill` 必须为 `<div>`(**禁止 `<span>`**,inline 元素 width 无效),必须有内联 `style="width:X%"`,X为该维度得分百分比。格式:`<div class="score-fill" style="width:65%;"></div>`——不可省略style属性,不可用CSS class替代width。高分段(≥70%)金色,中分段(40-69%)橙色,低分段(<40%)红色
- **核心结论区强制附加交易参数行**:`.conclusion-top` 内 verdict-tags 下方必须有一行 `border-top:1px dashed var(--border)` 分隔,展示5个关键交易参数(flex行,居中排列):①买入区间(绿色)②止损位(绿色)③目标价(红色)④建议仓位(金色)⑤盈亏比(金色)。格式:`<div style="font-size:11px;color:var(--text-muted);">标签</div><div style="font-weight:700;color:语义色;font-size:15px;">值</div>`。参数来源于 MD 报告 Step 6/8 分析结论
- **Hero标签限制**:`.hero-tags` 内标签≤5个,每个标签≤4个中文字
- **Footer格式**:作者行和联系方式行**禁止使用strong标签和金色高亮**,保持纯文本
- **禁止HTML body内联硬编码颜色**:所有 `style="color:#fff"` / `style="color:white"` / `style="color:rgba(255,255,255,...)"` 必须改用CSS变量(`var(--text-primary)` / `var(--text-secondary)` 等),确保双主题切换时文字始终可见。浅色模式下 `card-bg-alt` 为 `#fef5e7`(暖奶油色),白色文字完全不可见
View on GitHubThis SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub