Skip to main content

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 GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub