一句话搞定个股分析 — 说"分析XXX",自动采集30+数据源 → AI完成基本面(Step 0-8)+技术面+资金面的完整研报 → 生成交互式HTML报告。支持增量更新(K线/行情/技术指标自动刷新)。触发词:"分析XXX股票"(首次)或"更新XXX股票"(增量)。
Resources
16Install
npx skillscat add mingli30119/stock-analysis Install via the SkillsCat registry.
一句话搞定个股分析
版本:v3.1 | 更新:2026-05-30 | 用户说一句话 → 30+数据源采集 → Step 0-8 基本面 + 第9章技术面 + 资金面 → 双主题交互式HTML
📋 快速导航
- ⚡ 使用方式 — 一句话触发,全自动执行
- 🏗️ 三层架构 — 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分钟)
cd G:/vibe/my-skills/stock-analysis-enhanced
python stock_full_report.py <股票代码>示例:
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:增量更新
执行命令:
cd G:/vibe/my-skills/stock-analysis-enhanced副本
python update_stock_report.py <股票代码>常用参数:
# 基本用法(自动查找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必须手动执行以下步骤:
- 读取数据:
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
输出文件
output/
├── data_<股票代码>.json # Phase 1: 原始数据(akshare采集)
├── 个股研究-<股票名称>.md # Phase 2: 完整分析报告
└── 个股研究-<股票名称>.html # Phase 3: 可视化HTML报告🔧 配置要求
所有版本通用
必需配置:
- Python 3.8+
- akshare库(数据采集)
- Claude Code环境(AI分析和HTML生成)
- 智谱AI MCP配置(
.mcp.json):用于Phase 2的中文信息搜索
配置示例:
.mcp.json(智谱AI搜索):
{
"mcpServers": {
"zhipu": {
"command": "npx",
"args": ["-y", "@zhipu-ai/mcp-server"],
"env": {
"ZHIPU_API_KEY": "your_zhipu_api_key"
}
}
}
}说明:
- Enhanced版本:本地使用,MCP已配置
- Competition版本:比赛提交,需确保MCP配置文件存在
- GitHub版本:开源发布,需在README中说明MCP配置步骤
🏗️ 三层架构
架构图
┌─────────────────────────────────────────────┐
│ 用户输入 │
│ "分析 XXX股票" 或 "分析 600519" │
└────────────────────┬────────────────────────┘
│
┌──────────────────▼──────────────────┐
│ Phase 1: 数据采集(脚本) │
│ python stock_full_report.py <code> │
│ → output/data_{代码}.json │
└──────────────────┬──────────────────┘
│
┌──────────────────▼──────────────────┐
│ Phase 2: AI分析(手写) │
│ 读取 data JSON → MCP搜索 │
│ → 逐步完成 Step 0-8 │
│ → output/个股研究-{名称}.md │
└──────────────────┬──────────────────┘
│
┌──────────────────▼──────────────────┐
│ Phase 3: HTML生成(手写) │
│ CSS/JS 从 shared/ 搬运 │
│ 内容从 MD + data JSON 提取 │
│ 结构参考 examples/ 范例 │
│ → output/个股研究-{名称}.html │
└──────────────────┬──────────────────┘
│
┌──────▼──────┐
│ 完成 ✓ │
└─────────────┘📊 输出内容
MD报告结构(540-740行)
# {股票名称}({股票代码})深度研究
## 基本信息
- 股票名称、代码、行业、市值、PE、PB等
## 财务摘要(最近一年)
- 营业收入、净利润、毛利率、ROE
## 股东结构
- 十大股东表格
## 主营业务构成
- 业务构成表格
---
## Step 0: 任务锁定(10行)
- 标的、周期、数据截止日、研究状态、风格预判
## Step 1: 宏观与周期定位(50行)
- 1a. 经济周期映射
- 1b. 政策与环境扫描
- 1c. 核心矛盾提炼
## Step 2: 产业链深度拆解(100行)
- 2a. 题材来源判断
- 2b. 产业链图谱(ASCII/Mermaid)
- 2c. 趋势三要素
- 2d. 价值链利润分布
## Step 3: 公司筛选与质量评分(50行)
- 3a. 正面筛选清单
- 3b. 不碰清单
- 3c. 质量评分(100分制)
## Step 4: 业绩弹性测算(80行)
- 4a. 分业务弹性树
- 4b. 价格敏感度公式
- 4c. 情景分析
## Step 5: 风险分析(40行)
- 5a. 风险清单
- 5b. 逻辑破坏条件(5个止损信号)
## Step 6: 估值与买卖时机(100行)
- 6a. 估值方法
- 6a+. 资金面分析
- 6a++. 技术面分析
- 6b. 三档目标价
- 6c. 盈亏比量化
## Step 7: 对标分析(60行)
- 7a. 案例类比法
- 7b. 增长引擎切换
## Step 8: 跟踪计划与综合结论(50行)
- 8a. 分层跟踪锚点
- 8b. 执行清单
- 8c. 综合结论(一句话判断、风险等级、操作建议)
- 8d. 五维综合评分HTML页面结构(实际输出格式)
<!DOCTYPE html>
<html>
<head>
<meta> + <title>
<script src="echarts CDN">
<script src="MathJax CDN">
<style> /* = template_base.css 完整搬运 */ </style>
</head>
<body>
<nav class="top-nav"> <!-- 顶部导航(sticky) -->
股票名+代码 · logo · **14个固定nav-links(含技术面)**(行情/结论/画像/K线/任务/宏观/产业链/质量/弹性/风险/估值/对标/跟踪)· **分析基准日**(格式:`📅 YYYY-MM-DD`,12px字号,颜色跟随主题)· 主题切换按钮
</nav>
<div class="container">
<div class="hero"> <!-- Hero行情卡片 -->
价格 + 涨跌幅 + **hero-meta 5项固定**(分析基准日/质量评级/中期目标价/盈亏比/风险等级)+ 标签组
</div>
<div class="conclusion-top"> <!-- 结论置顶卡片 -->
核心结论标签 + 综合判断 + 详细说明 + 标签组
</div>
<!-- 公司画像 + 新闻(grid-2) -->
<!-- 主营业务饼图 + 关键财务指标(grid-2) -->
<!-- K线图卡片(ECharts candlestick + 成交量) -->
<!-- K线底部4指标行(向上空间/盈亏比/目标价/周期) -->
<!-- 分析章节卡片:任务/宏观/产业链/质量/弹性/风险/估值/对标/跟踪 -->
<!-- 页脚(固定模板,见 HTML手写参考.md) -->
<!-- 页脚含:免责声明 + 数据截止/研究状态/分析基准日 + 数据来源行 + 作者信息 + 联系方式 -->
<!-- 分析基准日格式:📅 分析基准日:YYYY-MM-DD(数据截止日当天或最近交易日) -->
</div>
<script> /* = template_base.js 骨架搬运 + 数据注入 */ </script>
</body>
</html>关键约束: HTML不使用左侧目录导航(旧设计规范中的
nav.toc已废弃),改用顶部 sticky 导航 + 滚动高亮。
🎨 HTML手写规范
Phase 3开始时,必须读取
HTML手写参考.md。该文件包含:组件速查表、颜色语义、以及分批机械校验的 grep 命令清单。校验命令不可跳过。
核心要点
<style>=shared/template_base.css完整搬运,不做修改<script>=shared/template_base.js骨架 + 注入 rawData(K线)+ pieData(业务构成)<body>结构参考examples/个股研究-中国长城.html- OHLC 格式
[open, close, low, high],成交量每根单独着色 - 红涨绿跌全篇一致,所有CSS class来自template_base.css
- 产业链SVG文字用
.svg-hdr/.svg-subclass,MathJax用\\(...\\)
页面结构(强制顺序)
top-nav → .hero → .conclusion-top → grid-2(公司画像+动态) → grid-2(饼图+财务)
→ .card(K线图) → 分析章节9卡片 → footer详细参考
完整组件速查表、颜色语义表、CHECKS自检清单 → HTML手写参考.md
🌓 双主题颜色规范
浅色/深色模式切换通过
<button class="theme-toggle" id="themeToggle">实现,CSS 变量切换由:root和body.light-mode两组变量控制。
浅色模式强制检查清单
Phase 3 分批校验时,每批完成后必须逐项确认浅色模式覆盖完整:
| 检查项 | 深色模式 | 浅色模式要求 | grep 校验命令 |
|---|---|---|---|
| Nav logo文字 | color:#fff |
color:var(--text-primary) |
grep -c 'light-mode.*logo' ≥1 |
| Nav logo-icon | color:#fff |
color:var(--card-bg) |
grep 'light-mode.*logo-icon' 存在 |
| Nav stock-name/stock-code | 继承logo白色 | 继承修复后可见 | 同上条覆盖即可 |
| 卡片标题 h2 | color:#fff |
color:var(--text-primary) |
grep -c 'light-mode.*card-header h2' ≥1 |
| Hero区域 | color:#fff |
color:var(--text-primary) |
grep -c 'light-mode.*\.hero' ≥1 |
结论大字 .big-verdict |
color:#fff |
color:var(--text-primary) |
grep 'light-mode.*big-verdict' 存在 |
| Hero meta label | color:rgba(255,255,255,0.7) |
color:var(--text-muted) |
grep 'light-mode.*hero-meta-item.*label' 存在 |
| Hero meta val | color:var(--gold-light) |
color:var(--gold) |
grep 'light-mode.*hero-meta-item.*val' 存在 |
评级标题 .body .title |
color:#fff |
color:var(--text-primary) |
grep 'light-mode.*rating-callout.*title' 存在 |
产业链SVG .svg-hdr |
fill:#e8e9ec |
fill:#2a1f12 |
grep 'light-mode.*svg-hdr' 存在 |
产业链SVG .svg-sub |
fill:#b0b3be |
fill:#6b5634 |
grep 'light-mode.*svg-sub' 存在 |
KPI value .value |
color:var(--gold-light) |
color:var(--gold) |
grep 'light-mode.*kpi-info-item.*value' 存在 |
| Theme toggle按钮 | 默认样式 | 浅底深字可辨识 | grep 'light-mode.*theme-toggle' 存在 |
新闻链接 .news-item a |
继承text-secondary | 保持可点击辨识 | 无需额外覆盖 |
浅色模式覆盖CSS模板
以下代码必须完整出现在 <style> 标签中(template_base.css 已包含):
body.light-mode .top-nav{background:rgba(255,251,245,0.92);border-bottom-color:var(--gold)}
body.light-mode .top-nav .logo{color:var(--text-primary)}
body.light-mode .top-nav .logo-icon{color:var(--card-bg)}
body.light-mode .top-nav .stock-name{color:var(--text-primary)}
body.light-mode .top-nav .stock-code{color:var(--text-muted)}
body.light-mode .theme-toggle{background:rgba(0,0,0,0.05);border-color:var(--gold);color:var(--gold)}
body.light-mode .theme-toggle:hover{background:rgba(0,0,0,0.1)}
body.light-mode .nav-links a{color:var(--gold)}
body.light-mode .nav-links a:hover,body.light-mode .nav-links a.active{background:rgba(0,0,0,0.05);color:#7f1d1d}
body.light-mode .hero{background:linear-gradient(105deg,#fef5e7,#fffbf5);color:var(--text-primary);border-color:var(--gold)}
body.light-mode .hero-price{color:var(--text-primary)}
body.light-mode .hero-change{background:rgba(220,38,38,0.1);color:var(--red-up)}
body.light-mode .hero-meta-item .val{color:var(--gold)}
body.light-mode .hero-meta-item .label{color:var(--text-muted)}
body.light-mode .hero-tag{background:rgba(212,168,83,0.15);border-color:var(--gold);color:var(--gold)}
body.light-mode .conclusion-top{background:linear-gradient(135deg,#fff9f0,#fef5e7)}
body.light-mode .conclusion-top .big-verdict{color:var(--text-primary)}
body.light-mode .card-header h2{color:var(--text-primary)}
body.light-mode .tag{background:rgba(212,168,83,0.15);color:var(--gold);border-color:var(--gold)}
body.light-mode table.cons thead th{background:linear-gradient(180deg,#f55656,#c0392b)}
body.light-mode .score-bar .score-track{background:#f0e4ce}
body.light-mode .rating-callout{background:linear-gradient(135deg,#fff9f0,#fef5e7)}
body.light-mode .rating-callout .body .title{color:var(--text-primary)}
body.light-mode .verdict-highlight{background:#fef5e7}
body.light-mode .verdict-highlight .judgment{color:var(--gold)}
body.light-mode .verdict-highlight .v-val{color:var(--text-primary)}
body.light-mode .chain-svg .svg-hdr{fill:#2a1f12}
body.light-mode .chain-svg .svg-sub{fill:#6b5634}
body.light-mode .kpi-info-item .value{color:var(--gold)}禁止的硬编码颜色
| 禁止写法 | 原因 | 正确写法 |
|---|---|---|
color:#fff(无浅色覆盖) |
浅色模式白色背景上看不见 | 用CSS变量 + body.light-mode覆盖 |
color:white(无浅色覆盖) |
同上 | 同上 |
fill:#fff(SVG文字,无浅色覆盖) |
SVG白字在浅色背景不可见 | 用.svg-hdr/.svg-sub class,已含双主题覆盖 |
color:rgba(255,255,255,0.7)(无浅色覆盖) |
半透明白色同理 | 用var(--text-muted) + light-mode覆盖 |
🔧 执行流程
Phase 1: 数据采集层(3-5分钟)
脚本: stock_full_report.py
功能:
- 使用akshare采集数据源
- Fallback机制:akshare失败→跳过
- 唯一输出:
output/data_{代码}.json(供Phase 2/3使用)
数据源: 基础信息、行情(3年日K线)、主营业务、资金流向、财务数据、股东结构、公告新闻、研究报告
Phase 2: AI分析层(45-75分钟)
AI手动执行,无自动化脚本。
2.1 基础信息写入(5分钟)
- 读取
output/data_{代码}.json - 写入MD头部:股票名称、代码、行业、市值、PE/PB、财务摘要、股东结构、主营业务构成
2.2 MCP搜索(10分钟)
- 用智谱AI搜索行业趋势、竞争对手、券商研报、最新新闻(通常3-6次)
- 智谱失败则fallback到Tavily
2.3 AI逐步分析Step 0-8(30-60分钟)
⚠️ MD写作禁止事项(防止内容泄露到HTML):
- ❌ MD正文任何位置禁止出现:
@明立玩AI/作者:明立/ll-mingli1221/ 社交媒体ID - ❌ MD末尾禁止添加署名行(如
> 分析框架:... | @明立玩AI) - ✅ 这些信息仅出现在HTML的footer中,由Phase 3统一添加
强制执行清单:
□ Step 0: 任务锁定(10行)
├─ 标的(公司名、代码、交易所)
├─ 周期(短线/中线/长线)
├─ 数据截止日(YYYY-MM-DD)
├─ 研究状态(首次覆盖/持续跟踪)
└─ 风格预判(配置型/交易型/左侧博弈型)
□ Step 1: 宏观与周期定位(50行)
├─ 使用MCP搜索结果:行业趋势
├─ 1a. 经济周期映射
├─ 1b. 政策与环境扫描
└─ 1c. 核心矛盾提炼(XX vs YY)
□ Step 2: 产业链深度拆解(100行)
├─ 使用MCP搜索结果:竞争对手、产业链
├─ 2a. 题材来源判断
├─ 2b. 产业链图谱(ASCII或Mermaid代码块)
├─ 2c. 趋势三要素(表格+打分)
└─ 2d. 价值链利润分布(表格)
□ Step 3: 公司筛选与质量评分(50行)
├─ 使用akshare数据:财务、股东
├─ 3a. 正面筛选清单(6项标准)
├─ 3b. 不碰清单(负面排查)
└─ 3c. 公司质地评分(100分制,6个维度——注意:与Step 8综合交易评分维度不同,两个分不一定相等)
□ Step 4: 业绩弹性测算(80行)
├─ 使用akshare数据:主营业务、财务
├─ 4a. 分业务弹性树(ASCII代码块)
├─ 4b. 价格敏感度公式(3个公式)
└─ 4c. 情景分析(悲观/基准/乐观表格)
□ Step 5: 风险分析(40行)
├─ 5a. 风险清单(表格:风险类型、影响程度、发生概率)
└─ 5b. 逻辑破坏条件(5个止损信号)
□ Step 6: 估值与买卖时机(100行)
├─ 使用MCP搜索结果:券商研报
├─ 使用akshare数据:K线、资金流向
├─ 6a. 估值方法选择
├─ 6a+. 资金面分析(筹码分布、主力资金)
├─ 6a++. 技术面分析(均线、支撑阻力)
├─ 6b. 三档目标价(短期/中期/长期表格)
└─ 6c. 盈亏比量化(向上空间 vs 向下空间)
□ Step 7: 对标分析(60行)
├─ 使用MCP搜索结果:竞争对手
├─ 7a. 案例类比法(对比表格)
└─ 7b. 增长引擎切换(如果适用)
□ Step 8: 跟踪计划与综合结论(50行)
├─ 8a. 分层跟踪锚点(高频/季度/事件)
├─ 8b. 执行清单(短线/中线)
├─ 8c. 综合结论(一句话判断、风险等级、操作建议)
└─ 8d. 五维综合交易评分(基本面/资金面/技术面/情绪面/事件——与Step 3公司质地评分维度不同)
✅ 总计:540行(最低要求)执行规则:
- AI必须严格按照Step 0→Step 8顺序执行
- 每完成一个Step,输出:
✅ Step X完成(XX行) - 不能跳过或简化任何Step
- 每个Step必须达到最低行数要求
Phase 3: HTML生成层(AI手动分批拼装)
原理: AI手写完整HTML——从 shared/ 搬运CSS/JS,从MD报告提取内容,从范例参考结构。分批用Write工具写,禁止用Python/Bash heredoc生成HTML内容。
执行步骤:
- 读取模板:
shared/template_base.css+shared/template_base.js - 读取范例:
examples/个股研究-中国长城.html - 读取数据:
output/个股研究-{股票名称}.md+output/data_{代码}.json - 分批手写HTML:
- 每批 ≤300行,用 Write工具 直接写HTML markup
<style>= 完整搬运 template_base.css(Write工具写入)<script>= template_base.js 骨架 + 注入 rawData + pieData(独立一批,Write工具写入)<body>= 参考范例结构,分2-4批写入各section
- 合并部分文件(如有): 仅用
cat或 Pythonfile.read()做机械字节拼接,绝不生成HTML内容 - 输出:
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):
Batch 0: Write — DOCTYPE + <head> + <style>(CSS完整复制) ~180行
Batch 1: Write — <body> + nav + hero + conclusion-top + profile ~150行
Batch 2: Write — K线图卡片 + Step 0-3 卡片 ~200行
Batch 3: Write — Step 4-6 卡片(弹性/风险/估值) ~200行
Batch 4: Write — Step 7-8 卡片 + footer + </div> ~150行
Batch 5: Write — <script>(JS完整复制 + 注入rawData + pieData) ~150行若各批写为独立文件,用
cat part*.txt >> main.html合并,然后删临时文件。Python仅用于file.read()字节拼接,绝不用f-string生成HTML markup。
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,字号.svg-hdr≥14px,.svg-sub≥12px - MathJax 使用
\\(...\\)行内分隔符 → HTML源码中写\(...\)(单反斜杠),禁止\\(...\\)(双反斜杠)。HTML text 中反斜杠不是转义符,双反斜杠会导致 MathJax 分隔符匹配失败 - 所有CSS class必须来自
shared/template_base.css - 禁止占位符:HTML 全文不得残留任何
<!-- AI填充或<!-- XXX_PLACEHOLDER注释 - 弹性树必须用
grid-2(2×2),禁止 flex 单行4列 - 📌总结框必须为独立
.card(红色左边框),位于 Step 8 之后、footer 之前
归档说明:
gen_html.py、gen_ganfeng_html.py(硬编码模板)、phase3_html_builder.py(骨架生成)、phase3_md_parser.py(MD解析)、stock_analysis_main.py(早期主控)均已归档至archive/。Phase 2/3 全部由AI手写,不使用自动化脚本。
📝 使用示例
示例:分析赣锋锂业(002460)
cd G:/vibe/my-skills/stock-analysis-competition
python stock_full_report.py 002460输出:
[Phase 1/3] 数据采集中...
✅ Phase 1完成,数据已保存:output/data_002460.json
[Phase 2/3] AI分析中...
✅ Step 0-8 完成,MD已保存:output/个股研究-赣锋锂业.md(619行)
[Phase 3/3] AI手写HTML中...
✅ 模板已读取(shared/template_base.css + shared/template_base.js)
✅ HTML已保存:output/个股研究-赣锋锂业.html(991行/63KB)🔍 常见问题
Q1: 为什么Phase 2这么慢?
A: Phase 2需要AI逐步分析Step 0-8,每个Step都需要深度思考和MCP搜索,总计需要30-60分钟。这是为了保证分析质量。
Q2: 可以跳过某些Step吗?
A: 不可以。Step 0-8是完整的分析框架,跳过任何一步都会导致分析不完整。
Q3: MCP搜索失败怎么办?
A: 系统会自动fallback:智谱搜索失败→Tavily搜索→继续执行。
Q4: HTML太长写不下怎么办?
A: HTML最终约900行/60KB,远非"太大"。关键是分批写:用Write工具每批≤300行,分5-6批写完。若写为独立文件,最后用 cat 做机械合并。禁止用Python f-string生成HTML。
📚 相关文档
- shared/template_base.css — 规范CSS模板,AI复制到
<style> - shared/template_base.js — 规范JS模板,AI复制到
<script>并注入数据 - examples/个股研究-中国长城.html — 成品参考范例
- HTML报告设计规范v1.0.md — CSS设计系统详细文档
- 分析框架.md — Step 0-8 完整分析方法论
- 第9章技术分析设计.md — 第9章技术面分析HTML结构设计
- archive/ — 已归档的旧脚本和文件
🗄️ 已归档
以下脚本/文件已移至 archive/:
gen_html.py、gen_ganfeng_html.py— 硬编码模板(每股票需单独写脚本)phase3_html_builder.py— 中间骨架生成(产出_skeleton.html,与终版混淆)phase3_md_parser.py— MD解析工具(Phase 2/3 由AI手写,不需要)stock_analysis_main.py— 早期主控脚本(已被三层架构替代)stock_report_*.html— stock_full_report.py 自动生成的简化HTML(只有JSON是Phase 1产出)
📈 第9章:技术面与资金面分析(强制章节)
章节定位
第9章是基本面分析(Step 0-8)的补充,用于短期择时和交易信号验证。每次首次分析和增量更新都必须包含此章节。
- 位置:在 Step 8(跟踪计划)之后,footer 之前
- 导航:顶部 nav 第14个链接
<a href="#technical">技术面</a> - 风格:与 Step 0-8 保持一致的
.card布局,标题用.card-header - 标题:
技术面与资金面分析,sub 写多周期联动 · 形态识别 · 量价配合 · 操作计划
数据来源
- JS 端计算(首选): 从
rawData实时计算 MACD/KDJ/RSI/BOLL(template_base.js已含计算函数,AI 搬运即可) - Python 预计算(备选): 从
data_{代码}.json读取technical_indicators和technical_signals(由stock_full_report.py生成) - MD 报告内容: 从 Phase 2 的 MD 报告中提取关键技术位、形态判断、资金面描述(AI 分析产出)
HTML结构(9.1-9.7,强制完整)
<div class="card" id="technical">
<div class="card-header"><span class="icon">📈</span><h2>技术面与资金面分析</h2><span class="sub">多周期联动 · 形态识别 · 量价配合 · 操作计划</span></div>
<!-- 当前技术信号速览(6个指标卡片,grid-3) -->
<h3 style="...">当前技术信号</h3>
<div class="grid-3">
<div>MACD 信号卡片</div> <div>KDJ 信号卡片</div> <div>RSI 信号卡片</div>
<div>BOLL 信号卡片</div> <div>均线 信号卡片</div> <div>成交量 信号卡片</div>
</div>
<!-- 技术指标图表(紧接信号速览,与MACD/KDJ等指标关联最近) -->
<h3>技术指标图表</h3>
<div class="grid-2"><div id="chart-macd"></div><div id="chart-kdj"></div></div>
<div class="grid-2"><div id="chart-rsi"></div><div id="chart-boll"></div></div>
<!-- 多周期趋势分析(grid-3 → 月线/周线/日线,含状态标记+技术信号标签) -->
<h3>多周期趋势分析</h3>
<div class="grid-3">月线 · 周线 · 日线 三列卡片</div>
<p>多周期判断总结(带💡前缀的提示框)</p>
<!-- 位置与形态分析(grid-2:关键技术位表 + 形态识别表) -->
<h3>位置与形态分析</h3>
<div class="grid-2">关键技术位表格 · 形态识别表格</div>
<!-- 9.4 动量与量价分析(grid-2:动量指标表 + 量价配合表) -->
<h3>动量与量价分析</h3>
<div class="grid-2">动量指标表格 · 量价配合表格</div>
<p>⚠️ 动量预警提示框</p>
<!-- 9.5 资金面分析(ul列表:主力资金/北向资金/龙虎榜) -->
<h3>资金面分析</h3>
<ul>主力资金 · 北向资金 · 龙虎榜</ul>
<!-- 9.6 市场风格与板块轮动(grid-2:板块TOP5表 + 风格判断卡片) -->
<h3>市场风格与板块轮动</h3>
<div class="grid-2">板块TOP5表格 · 风格判断卡片</div>
<!-- 9.7 综合研判与操作计划(grid-2:技术面评分5维+评级 + 操作计划表) -->
<h3>综合研判与操作计划</h3>
<div class="grid-2">技术面评分 · 操作计划表</div>
</div>各节详细规范
第9章内部顺序(强制)
信号速览 → 技术指标图表 → 多周期趋势 → 位置与形态 → 动量与量价 → 资金面 → 市场风格 → 综合研判(操作计划已移至核心结论区)
当前技术信号速览(6卡片)
- 布局:
grid-3(3列×2行 = 6卡片) - 每个卡片:
card-bg-alt背景 +border-left:3px solid语义色 + 指标名 + 状态 + 数值 - 颜色语义:多头=红色、空头=绿色、中性=金色、弱势=灰色
- 指标:MACD、KDJ、RSI、BOLL、均线、成交量
技术指标图表(紧接信号速览,与上方MACD/KDJ等指标关联最近)
- 布局:
grid-2× 2行 = 4个图表 - MACD图:DIF(金色折线) + DEA(蓝色折线) + MACD柱(红涨绿跌)
- KDJ图:K(金色) + D(蓝色) + J(红色),Y轴0-100
- RSI图:RSI6(蓝) + RSI12(金) + RSI24(红),Y轴0-100
- BOLL图:上轨(红) + 中轨(金) + 下轨(绿) + 收盘价折线(蓝) + 填充区域
- JS 来源:
template_base.js已含全部计算函数和渲染函数,AI Phase 3 Batch 6 直接搬运 - 图表容器:
chart-macd/chart-kdj/chart-rsi/chart-boll,高度280px/260px
多周期趋势分析
- 布局:
grid-3(月线/周线/日线) - 每列:
card-bg-alt背景 +border-left:4px solid+ 状态描述 + 均线数据 + 信号标签(<span>) - 下方:
💡 多周期判断提示框(border-left:4px solid var(--gold)) - 信号标签颜色:多头=红底红字、中性偏多=金底金字、短期透支=橙底橙字
9.3 位置与形态分析
- 布局:
grid-2 - 左:关键技术位表格(
table.cons,列:类型/价格/说明,支撑位绿色/压力位红色) - 右:形态识别表格(
table.cons,列:形态/完整度/说明)+ 形态评估提示框 - 价格来源于 MD 报告 Step 6 分析内容
9.4 动量与量价分析
- 布局:
grid-2 - 左:动量指标表格(
table.cons,列:周期/涨幅/评估,红色涨绿色跌) - 右:量价配合表格(
table.cons,列:日期/价格/成交量/关系) - 下方:⚠️ 动量预警提示框(
border-left:4px solid var(--orange-warn))
9.5 资金面分析
- 布局:
<ul>列表 - 内容:主力资金流向(近20日累计+超大单/大单拆分)、北向资金持仓变化、龙虎榜数据
- 数据来源:MD 报告 Step 6a+ 资金面分析内容
9.6 市场风格与板块轮动
- 布局:
grid-2 - 左:近20日涨停板块TOP5表格(
table.cons,列:板块/涨停次数/趋势) - 右:市场风格判断卡片(当前风格/轮动特征/对本股影响/操作建议)
- 数据来源:MD 报告 Step 1 宏观分析 + MCP搜索
9.7 综合研判与操作计划
- 布局:
grid-2 - 左:技术面评分(5个维度的
score-bar+ 加权总评 + ⭐技术面评级) - 右:操作计划表格(
table.cons,列:项目/价格仓位/说明,买入=绿色/卖出/目标=红色) - 下方:📌 操作建议提示框(
border-left:4px solid var(--red-up)) - 评分维度(5维,与 Step 8 综合交易评分区分):多周期趋势(25%)/技术指标(20%)/形态完整度(20%)/量价配合(15%)/资金面(20%)
第9章 Batch 分配
第9章在 Batch 5 中与 Step 7-8 一同写入(从范例 Read 对应区域后 Write)。JS 图表渲染函数在 Batch 6 中通过搬运 template_base.js 完成。
第9章 grep 校验(Batch 5 追加)
| 检查项 | 命令 | 通过条件 |
|---|---|---|
| 9.1-9.7 完整 | grep -c '多周期趋势|技术指标图表|位置与形态|动量与量价|资金面分析|市场风格|综合研判' |
≥ 7 |
| 4图表容器 | grep -c 'chart-macd|chart-kdj|chart-rsi|chart-boll' |
= 4 |
| 技术面评分 | grep -c '技术面评分|技术面总评|技术面评级' |
≥ 3 |
| 操作计划 | grep -c '买入区间|加仓位置|止损位置' |
≥ 3 |
| 信号标签 | grep -c '多头信号|中性偏多|短期透支|空头信号' |
≥ 2 |
🔄 增量更新详细说明
使用场景
报告已生成,需要更新最新数据(K线、Hero行情、技术指标),但不需要重新分析。
触发方式
用户说"更新 XXX股票"或"刷新 XXX报告"时,AI执行增量更新。
执行命令
cd G:/vibe/my-skills/stock-analysis-enhanced副本
python update_stock_report.py <股票代码>常用参数:
# 基本用法(自动查找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数组) | ✅ | 从akshare获取最新120条日K线 |
| Hero区域(最新价、涨跌幅) | ✅ | 从akshare获取实时行情 |
| 第9章技术指标 | ✅ | 重新计算MACD/KDJ/RSI/BOLL,更新图表数据 |
| 基本面分析(Step 0-8) | ❌ | 不更新,需要重新分析请用首次分析 |
工作流程
1. 提取旧K线数据(从HTML中的rawData数组)
↓
2. 获取最新K线数据(akshare实时获取)
↓
3. 对比数据变化(最新交易日、新增天数)
↓
4. 输出检查报告(需要更新 / 无需更新)
↓
5. 如果需要更新:
- 更新K线数据(替换HTML中的rawData数组)
- 更新Hero区域数据(价格、涨跌幅等实时数据)
- 更新第9章技术指标(重新计算并替换technicalData数组)
- 生成带日期版本(如:个股研究-中国长城_20260528.html)
- 覆盖最新版本(无日期文件名)判断标准
- 如果
新K线最后交易日 > 旧K线最后交易日→ 需要更新 - 否则 → 无需更新
示例输出
📊 检查 000066 的更新情况...
旧HTML: output/个股研究-中国长城.html
[1/2] 提取旧K线数据...
✅ 旧K线数据:120条,最新日期 2026-05-20
[2/2] 获取最新K线数据...
尝试获取数据... (第1/3次)
✅ 新K线数据:120条,最新日期 2026-05-27
[3/3] 对比数据变化...
============================================================
📋 更新检查报告
============================================================
✅ 需要更新
变化点:
1. K线数据更新:2026-05-20 → 2026-05-27,新增5个交易日
============================================================
============================================================
🔄 开始增量更新
============================================================
[1/4] 更新K线数据...
✅ K线数据已更新:120条
[2/4] 更新Hero区域数据...
✅ Hero数据已更新:价格 18.99,涨跌幅 -3.16%
[3/4] 更新第9章技术指标...
✅ 技术指标已更新:120 条记录
[4/4] 覆盖最新版本...
✅ 已覆盖:output/个股研究-中国长城.html
============================================================
✅ 更新完成
============================================================
📄 输出文件:
• 带日期版本:output/个股研究-中国长城_20260527.html
• 最新版本:output/个股研究-中国长城.html
📊 文件大小:85.3 KB版本管理
生成两个文件:
带日期版本:
个股研究-{股票名称}_{YYYYMMDD}.html- 保留历史版本,便于对比分析
- 建议保留最近30天的版本
最新版本:
个股研究-{股票名称}.html(覆盖原文件)- 始终保持最新
- 便于快速访问
常见问题
Q1: 如何判断是否需要更新?
A: 工具会自动对比旧数据和新数据的最新交易日,如果新数据的最新交易日 > 旧数据,则需要更新。
Q2: 更新后原文件会被覆盖吗?
A: 会生成两个文件:带日期版本(新文件,不覆盖)+ 最新版本(覆盖原文件)。历史版本会保留。
Q3: 网络请求失败怎么办?
A: 工具会自动重试3次,如果仍然失败,更新失败。建议检查网络连接或稍后重试。
Q4: 如何回退到旧版本?
A: 直接使用带日期的历史版本文件即可,例如:
cp output/个股研究-中国长城_20260520.html output/个股研究-中国长城.htmlQ5: 更新频率建议?
A:
- 日线数据:每个交易日收盘后更新一次(15:30后)
- 同一交易日多次触发:检查发现无新数据,自动跳过更新
- 跨多个交易日触发:一次性更新到最新
📋 跟踪日志与版本记录
设计理念
每次首次分析产生"初始化跟踪结果",每次增量更新在跟踪表中新增一列,标记更新日期和变化内容。这样所有历史跟踪数据在同一张表中可见,无需翻找旧版本文件。
跟踪表格结构:催化剂兑现追踪
核心理念: 不是记录数据快照(股价多少/成交量多少),而是追踪分析中识别的关键催化剂是否兑现。每行 = 一个催化剂/事件,状态 = 已兑现/待兑现/落空/持续观察。
首次分析(初始化)
<table class="cons" style="font-size:12px;">
<thead><tr><th>跟踪指标 / 催化剂</th><th>预期影响</th><th>兑现状态</th><th>备注</th></tr></thead>
<tbody>
<tr><td>催化剂1(如异环1.1版本)</td><td>流水验证→估值修复</td><td>⏳ 待兑现</td><td>预计6月</td></tr>
<tr><td>催化剂2(如H1业绩预告)</td><td>确认盈利趋势</td><td>⏳ 待兑现</td><td>预计7月</td></tr>
<tr><td>已兑现事件(如首日流水)</td><td>验证吸量能力</td><td style="color:var(--red-up);">✅ 已兑现</td><td>05-28确认</td></tr>
<tr><td>止损观察</td><td>风险控制底线</td><td style="color:var(--text-muted);">⚪ 安全区间</td><td>当前价>止损线</td></tr>
</tbody>
</table>状态标记:
- ✅ 已兑现(红色)— 催化剂如期发生,验证分析逻辑
- ⏳ 待兑现(金色)— 尚未发生,仍在等待窗口期
- ❌ 落空(绿色)— 预期落空,需重新评估投资逻辑
- ⚪ 持续观察(灰色)— 中性状态,持续监控
催化剂来源: 从 MD 报告的 Step 4(弹性测算)、Step 5(风险/止损信号)、Step 6(估值催化剂)、Step 7(对标)中提取,选取 6-10 个最关键的可验证事件。
增量更新
每次"更新 XXX股票"时,AI 检查每个催化剂的状态变化:
- 已到期的催化剂 → 判断 ✅已兑现 或 ❌落空
- 仍在等待的 → 保持 ⏳待兑现
- 新出现的催化剂 → 追加新行
- 在表格下方"📋 事件记录"中追加更新说明
不需要插入新列(与旧设计不同)。催化剂的行是固定的,更新的是每一行的"兑现状态"列。
事件记录
跟踪表格下方必须添加事件记录:
<div class="update-log" style="margin-top:12px;padding:10px 14px;background:var(--card-bg-alt);border-radius:8px;border-left:4px solid var(--gold);">
<p style="font-weight:700;color:var(--gold);margin-bottom:6px;">📋 事件记录</p>
<ul style="list-style:none;padding:0;font-size:12px;color:var(--text-secondary);">
<li style="padding:3px 0;">• 2026-05-28 首次分析:异环首日流水1亿+已兑现(验证吸量),1.1版本/H1业绩/TI赛事待兑现,当前价14.28>止损12元安全</li>
</ul>
</div>更新流程中的跟踪日志维护
AI执行增量更新时的职责(每次"更新 XXX股票"时执行):
- 刷新近期动态:将新闻列表替换为当日最新8条新闻,重新判断利好/利空/中性
- 检查催化剂兑现:逐行检查到期催化剂是否兑现,更新状态标记
- 追加新催化剂:如有新的关键事件,追加新行
- 在事件记录顶部插入新条目:日期 + 本次更新发现的变化
- 同步分析基准日:nav + hero + footer 三处
增量更新 HTML 修改清单:
| 步骤 | 操作 | 位置 |
|---|---|---|
| 1 | 替换新闻列表(8条→新8条+利好利空标签) | grid-2 近期动态卡片 |
| 2 | 逐行检查催化剂兑现状态、必要时更新 | 跟踪日志表 <tbody> |
| 3 | 有新催化剂则追加 <tr> |
跟踪日志表末尾 |
| 4 | 事件记录顶部插入新 <li> |
📋 事件记录 <ul> |
| 5 | 更新 📅 YYYY-MM-DD |
nav + hero + footer 三处 |
自动更新工具 update_stock_report.py 的职责:
- 更新 K线数据(rawData数组)✅ 已实现
- 更新 Hero行情(价格/涨跌幅)✅ 已实现
- 更新 第9章技术指标 ✅ 已实现
- 更新 跟踪表格(AI手动执行)
- 刷新 新闻列表(AI手动执行)
- 更新 分析基准日(AI手动执行)
分析基准日声明
分析基准日在三处显示:
| 位置 | 格式 | 说明 |
|---|---|---|
| 顶部Nav | 📅 YYYY-MM-DD |
nav-links右侧、theme-toggle按钮左侧,12px字号,颜色跟随主题 |
| Hero卡片 | hero-meta第1项,标签"分析基准日",值YYYY-MM-DD |
数据截止日/最近交易日 |
| 页脚Footer | 📅 分析基准日:YYYY-MM-DD · 数据来源:akshare/同花顺/新浪 |
与免责声明同一行 |
Nav中的分析日期CSS:
.nav-analysis-date{font-size:12px;color:var(--text-muted);margin:0 8px;white-space:nowrap}
body.light-mode .nav-analysis-date{color:var(--text-muted)}免责声明: 本系统所有分析仅供研究参考,不构成投资建议。投资有风险,决策需谨慎。
免责声明: 本系统所有分析仅供研究参考,不构成投资建议。投资有风险,决策需谨慎。