mingli30119/stock-analysis/stock-analysis
Claude Code and agent skill by mingli30119/stock-analysis
- community
Checking that the SKILL.md file is still in the repository.
一句话搞定个股分析 — 说"分析XXX",自动采集30+数据源 → AI完成基本面(Step 0-8)+技术面+资金面的完整研报 → 生成交互式HTML报告。支持增量更新(K线/行情/技术指标自动刷新)。触发词:"分析XXX股票"(首次)或"更新XXX股票"(增量)。
Install
npx vskill@latest install mingli30119/stock-analysis/stock-analysisSKILL.md
一句话搞定个股分析
版本:v3.1 | 更新:2026-05-30 | 用户说一句话 → 30+数据源采集 → Step 0-8 基本面 + 第9章技术面 + 资金面 → 双主题交互式HTML
📋 快速导航
- ⚡ 使用方式 — 一句话触发,全自动执行
- 场景判断
- 场景A:首次分析 — 完整三阶段
- 场景B:增量更新 — 快速刷新数据
- 🏗️ 三层架构 — Phase 1 数据采集 → Phase 2 AI分析 → Phase 3 HTML
- 📊 输出内容 — MD 报告 + HTML 报告的完整结构
- 🎨 HTML手写规范 — 分批手写 + grep 机械校验
- 🔧 执行流程 — Phase 1/2/3 详细步骤
- 🔄 增量更新详细说明 — 脚本自动 + AI 手动
⚡ 使用方式
场景判断
AI必须根据用户输入的关键词判断场景:
场景A:首次分析(完整流程)
触发关键词:
- "分析 XXX股票"
- "个股分析 XXX"
- "研究 XXX"
- "生成 XXX报告"
- 用户明确说"首次分析"
判断逻辑:
- 用户输入包含上述关键词 → 执行首次分析(Phase 1→2→3)
场景B:增量更新(只更新数据)
触发关键词:
- "更新 XXX股票"
- "刷新 XXX报告"
- "增量更新 XXX"
- "更新报告"
- 用户明确说"更新"
判断逻辑:
- 用户输入包含上述关键词
- 检查
output/个股研究-{股票名称}.html是否存在 - 如果存在 → 执行增量更新
- 如果不存在 → 提示用户:"未找到 XXX 的报告,是否需要首次分析?"
场景A:首次分析
当用户说"分析 XXX股票"时,一句话触发全流程:
Phase 1: 数据采集(3-5分钟)
示例:
唯一输出: 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:增量更新
执行命令:
常用参数:
更新内容:
- ✅ K线数据(rawData数组)
- ✅ Hero区域(最新价、涨跌幅)
- ✅ 第9章技术指标(MACD/KDJ/RSI/BOLL图表)
- ❌ 基本面分析(Step 0-8,不更新)
详细说明: 见本文件末尾"🔄 增量更新详细说明"章节
Phase 2: AI深度分析(30-60分钟)
AI必须手动执行以下步骤:
- 读取数据:
output/data_<股票代码>.json - 执行MCP搜索: 根据实际需要搜索(通常3-6次)
- 行业趋势、市场规模
- 竞争对手、市场份额
- 券商研报、目标价
- 最新新闻、政策动态
- 逐步完成Step 0-8分析: 严格按照分析框架,每个Step达到要求
- 输出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。
执行步骤:
- 读取模板:
shared/template_base.css+shared/template_base.js - 读取范例并提取参照:
examples/个股研究-中国长城.html→ 用 grep 提取 nav 锚点列表、section id 列表,保存为临时参照文件 - 读取校验规范:
HTML手写参考.md→ 严格按「分批机械校验」表格逐批执行 - 读取数据:
output/个股研究-{股票名称}.md+output/data_{代码}.json - 分批手写HTML(每批 = Write + grep校验):
- 每批 ≤300行,用 Write工具 直接写HTML markup
- 写完后立即跑该批对应的 grep 校验命令(命令清单见
HTML手写参考.md§ 分批机械校验) - 校验通过 → 下一批。校验失败 → grep 范例对应行 → 比对 → Edit 修正 → 重新校验
- 合并: 仅用
cat做机械字节拼接 - 终验: 运行合并后终验命令(nav-id 配对 + 结构完整性),全部通过才输出最终文件
- 输出:
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 步:必须用 Read 工具打开范例对应行号区间。读完范例段落后立即 Write,中间不做其他操作。
- 写完后跑第 3 步 grep。对不上 →
grep范例对应行 →grep自己写的 → 看差异 → Edit 修正 → 重跑 grep。 - 三步全部通过才进入下一批。
若各批写为独立文件,用 `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-subclass - 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(暖奶油色),白色文字完全不可见 - 近期动态强制规范:禁止使用滚动容器(
max-height/overflow-y),固定高度展示。每条新闻用纯文本<span>(暂不设链接)。每条右侧必须有利好/利空/中性标签(<span>+ 内联style),利好=红色背景+红字(background:rgba(245,86,86,0.15);color:var(--red-up)),重大利好另加红色左边框(border-left:3px solid var(--red-up)),中性=金色背景+金字(background:rgba(212,168,83,0.15);color:var(--gold)),利空=绿色背景+绿字。标签文字≤4字。增量更新时,近期动态必须替换为当日最新新闻,重新判断利好利空属性 - K线图强制技术标注:必须包含4条markLine(虚线金色
#d4a853):前高压力位/关键均线(MA20或MA60)/加仓位/止损位,价格取自MD报告分析内容。2个markPoint(pin图标):当前价位(金色#d4a853)+关键历史价位(红色#f55656)。label用#fff字号11px fontWeight bold。markLine label用#d4a853字号10px
输出文件
🔧 配置要求
所有版本通用
必需配置:
- Python 3.8+
- akshare库(数据采集)
- Claude Code环境(AI分析和HTML生成)
- 智谱AI MCP配置(
.mcp.json):用于Phase 2的中文信息搜索
配置示例:
.mcp.json(智谱AI搜索):
说明:
- Enhanced版本:本地使用,MCP已配置
- Competition版本:比赛提交,需确保MCP配置文件存在
- GitHub版本:开源发布,需在README中说明MCP配置步骤
🏗️ 三层架构
架构图
📊 输出内容
MD报告结构(540-740行)
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingSKILL.md
Popularity
- Repository stars
- 488
- Repository forks
- 87
- 7-day trend score
- 31
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 20 May 2026, 5 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/mingli30119/stock-analysis/stock-analysis)