market-debrief-cn
PassA股收盘后深度日报自动生成工具。自动采集当日行情数据(AkShare)和新闻事件(Tavily), 通过多 Agent 并行分析架构(宏观+情绪 / 板块+资金 / 技术+估值+预判), 生成一份带量化锚点和独立判断的交互式 HTML 日报。 固定 Financial Times 三文鱼粉风格,6个分析模块 + 顶部仪表盘横条。 当用户提到以下内容时触发:「A股日报」「市场复盘」「盘脉日报」「A股复盘」「今日市场分析」 「跑一期日报」「生成日报」「做今天的复盘」,或指定日期如「帮我做2026年3月11日的日报」。
Install Skill
Skills are third-party code from public GitHub repositories. SkillHub scans for known malicious patterns but cannot guarantee safety. Review the source code before installing.
Install globally (user-level):
npx skillhub install KeLuoJun/bin-skills/market-debrief-cnInstall in current project:
npx skillhub install KeLuoJun/bin-skills/market-debrief-cn --projectSuggested path: ~/.claude/skills/market-debrief-cn/
AI Review
Scored 68 — exceptional execution quality with comprehensive multi-phase pipeline. The analysis-framework.md (29KB) alone is deeper than most entire skills. 4 working scripts with error handling. Limited only by extreme niche (Chinese A-share market) and 0 stars.
SKILL.md Content
---
name: market-debrief-cn
description: |
A股收盘后深度日报自动生成工具。自动采集当日行情数据(AkShare)和新闻事件(Tavily),
通过多 Agent 并行分析架构(宏观+情绪 / 板块+资金 / 技术+估值+预判),
生成一份带量化锚点和独立判断的交互式 HTML 日报。
固定 Financial Times 三文鱼粉风格,6个分析模块 + 顶部仪表盘横条。
当用户提到以下内容时触发:「A股日报」「市场复盘」「盘脉日报」「A股复盘」「今日市场分析」
「跑一期日报」「生成日报」「做今天的复盘」,或指定日期如「帮我做2026年3月11日的日报」。
---
# A股深度日报生成器
> 核心目标不是「描述今天发生了什么」,而是「理解今天市场在定价什么、定价是否合理、明天可能发生什么」。
## 执行流程
```
Phase 1: 确认日期 → 数据采集(akshare + tavily)
Phase 2: 三个 Subagent 并行分析
Phase 3: 渲染 Agent 整合输出 HTML
```
## 路径约定(强制)
- `SKILL_ROOT`:market-debrief-cn skill 目录(即当前 `SKILL.md` 所在目录)
- `ASSETS_DIR`:`SKILL_ROOT/assets`(所有 JSON 中间产物固定写这里)
- `PROJECT_ROOT`:本次运行 skill 的项目根目录(最终 HTML 固定写这里)
不允许把 HTML 写入 `ASSETS_DIR`,也不允许把 JSON 中间产物写入 `PROJECT_ROOT`。
---
## Phase 1: 数据采集(主协调 Agent)
### Step 1: 确认目标日期
解析用户意图,确认目标交易日期。默认为最近一个已收盘的交易日。
### Step 2: 运行数据采集脚本
```bash
python scripts/fetch_market_data.py --date YYYYMMDD
```
脚本自动拉取 12 类数据(详见 `references/akshare-api.md`):
- 指数日线(6大指数近一年)、指数PE估值、全A PB
- 全市场资金流向(超大/大/中/小单)、行业资金流向
- 涨停池/跌停池/炸板池/强势连板股
- 北向资金、两融余额、国债收益率、龙虎榜机构/个股统计、市场广度摘要(上涨/下跌家数)
脚本**自动写入** `SKILL_ROOT/assets/market_data_YYYY-MM-DD.json`(目录不存在时自动创建)。
⚠️ 东方财富数据源偶尔限流导致个别接口失败(返回空数组)——脚本已内置容错,失败项会在 stderr 显示 `[WARN]`,并记录在输出 JSON 的 `_failed_items` 字段中。若关键数据缺失,可等待 10 秒后重跑。
### Step 3: 搜索新闻事件
使用 Tavily 搜索当日关键事件,自动执行 7 组查询(政策、板块、外盘、宏观、机构观点、北向资金、突发事件)。
**Windows(推荐,跨平台)**:
```bash
python scripts/search_news.py --date YYYY-MM-DD
```
**Linux / macOS**:
```bash
bash scripts/search_news.sh '{"date": "YYYY-MM-DD"}'
```
两个脚本输出格式完全相同,**自动写入** `SKILL_ROOT/assets/news_data_YYYY-MM-DD.json`。其中:
- `results`:去噪+去重+按质量排序后的新闻列表(优先用于分析)
- `query_batches`:各查询原始回包(用于追溯)
- `_failed_queries`:失败查询数量
⚠️ 需要 Tavily API token。优先级:`TAVILY_API_KEY` 环境变量(支持 `tvly-...` 格式)→ `~/.mcp-auth/` JWT 缓存。若两者均不可用,脚本会报错退出——必须先解决认证问题再继续(见 Step 4 双源要求)。
### Step 3.5: 运行量化分析引擎(新增)
在完成行情数据采集后,运行分析脚本对原始数据做预处理,输出结构化量化指标:
```bash
python scripts/analyze_market.py --date YYYYMMDD
```
脚本**自动写入** `SKILL_ROOT/assets/analysis_YYYY-MM-DD.json`,包含:
| 模块 | 预计算内容 |
| ----------- | ------------------------------------------------------------------------ |
| 情绪评分 | 综合分(0-100)、散户/机构拆解分、各分项得分、60日成交额百分位 |
| 技术矩阵 | 6指数 MA5/10/20/60/120/250 值及偏离度、均线排列判断、量比、K线形态识别 |
| 支撑/压力位 | MA位/斐波那契38.2%/50%/61.8%/VWAP30日/整数关口,距当前价%标注 |
| 涨跌拆解 | 隔夜涨幅=开盘/前收-1(反映消息面)、日内涨幅=收盘/开盘-1(反映盘中行为) |
| 行业分析 | 四分类强弱表、成长/价值均涨幅差、资金净流入 TOP3/BOTTOM3 行业 |
| 涨停生态 | 封板率、连板分布、最高连板数+名称、主题集中度、赚钱效应评级 |
| 资金结构 | 超大/大/中/小单净流入(亿元)、机构/散户行为类型判断、资金迁移类型 |
| 估值 & ERP | 各指数 PE 历史百分位、全A PB、ERP%(含60日均值/标准差/信号) |
| 北向资金 | 当日净额、20日序列、20日累计、趋势描述 |
若脚本运行失败(`numpy`/`pandas` 未安装等),可跳过此步——AI 将从原始 market_data JSON 直接分析,但准确度会有所下降。依赖:`pip install numpy pandas`
### Step 4: 准备数据包
读取 `SKILL_ROOT/assets/market_data_YYYY-MM-DD.json`、`SKILL_ROOT/assets/analysis_YYYY-MM-DD.json` 和 `SKILL_ROOT/assets/news_data_YYYY-MM-DD.json`,构建三个 Subagent 的数据子集。
**⚠️ 双源强制要求**:三个 Subagent 必须同时持有 akshare 行情数据和 tavily 新闻数据。若 `news_data` 文件不存在或为空,必须先执行 Step 3 搜索新闻,**不允许**跳过新闻采集直接进入 Phase 2。两类数据是报告深度的双支柱,缺少任一类都会导致分析仅停留在数字描述层面。
**检查采集状态**:
- 若 `market_data["_failed_items"]` 非空,记录失败项列表(例:`["index pe", "lhb"]`)
- 若 `news_data["_failed_queries"] > 0`,记录失败查询数
- 将以上信息汇总为 `data_warnings` 传递给渲染 Agent,用于最终回复告知用户
---
## Phase 2: 三 Subagent 并行分析
**使用 subagent 并行启动三个分析任务**。每个 subagent 的 prompt 包含:角色定义 + 对应数据子集 + 分析任务清单 + 输出格式。
分析框架详见 → `references/analysis-framework.md`
**所有 Subagent 的核心输出要求**:除了量化数据字段,每个模块必须输出 `analysis_text` 叙述字段(见 analysis-framework.md 各 Subagent JSON schema)。叙述字段必须双源融合——同时引用 akshare 数字和 tavily 新闻事件,推断市场参与者动机,不只描述现象。
**强制要求**:Module 1 和 Module 6 必须额外输出“预期差 / 明日验证点 / 证伪条件”结构。不能只解释今天发生了什么,还必须说明:市场原先在定价什么、今天新增信息改了什么、明天看什么来证明这个判断对或错。
### Subagent A: 宏观事件解读师 × 情绪量化分析师
**模块**: Module 1(宏观定价扫描)+ Module 2(市场情绪温度计)
**提供数据**: tavily 新闻、`analysis.sentiment`(各分项得分、综合分、散户/机构分、60日百分位)、`analysis.northbound`(趋势描述)、`market_data`(涨跌停原始数据、两融)
**核心任务**:
- 从新闻中筛选有效事件,判断定价完成度(已充分/未充分/过度)
- 对最关键的 1-2 个事件补充“预期差框架”:市场原预期、今日新增信息、盘面反应、预期差判断、明日验证点、证伪条件
- 更新宏观三维坐标(经济动能/流动性/风险偏好)
- **直接使用** `analysis.sentiment.composite_score` 作为综合情绪分(无需重算)
- 确认散户/机构分歧类型(使用 `analysis.sentiment.divergence_type`)
- 判断情绪趋势斜率(加速上行/高位走平/拐头下行/筑底反弹)
**输出**: JSON(结构见 analysis-framework.md「Subagent A」节)
### Subagent B: 板块策略师 × 资金流向分析师
**模块**: Module 3(板块结构性分析)+ Module 4(资金路线图)
**提供数据**: `analysis.industry`(四分类表、成长/价值风格、资金流向TOP/BOTTOM3、迁移类型)、`analysis.limit_up_ecology`(封板率、连板分布、主题集中度、赚钱效应)、`analysis.fund_structure`(机构/散户行为类型、超大单趋势)、`market_data.lhb_jgmmtj`、`market_data.lhb_stocks`
**核心任务**:
- **直接使用** `analysis.industry.heatmap` 做行业四分类(无需重算)
- **直接使用** `analysis.industry.style` 输出成长/价值量化对比
- TOP 2 板块深度解剖(驱动力/轮动周期/资金主体/持续性评级)
- **直接使用** `analysis.limit_up_ecology` 涨停板生态指标
- 基于 `analysis.fund_structure.behavior_type` + `market_data.lhb_jgmmtj/lhb_stocks` 解读资金意图
**输出**: JSON(结构见 analysis-framework.md「Subagent B」节)
**输出**: JSON(结构见 analysis-framework.md「Subagent B」节)
### Subagent C: 技术分析师 × 估值研究员 × 情景规划师
**模块**: Module 5(技术形态与估值)+ Module 6(次日预判与历史镜像)
**提供数据**: `analysis.technical`(MA矩阵、均线排列、量比、K线形态、支撑/压力位、日内/隔夜拆解)、`analysis.valuation`(PE百分位、ERP信号)、指数原始日线序列(用于图表渲染)
**核心任务**:
- **直接使用** `analysis.technical[指数].ma_arrangement`、`ma_deviations`、`kline_pattern` 输出技术矩阵
- **直接使用** `analysis.technical[指数].supports/resistances` 列出支撑/压力位(已附计算依据)
- **直接使用** `analysis.valuation.erp.erp_signal` 输出 ERP 信号
- **直接使用** `analysis.valuation.index_pe[指数].pe_zone` 输出估值水位档位
- 基于以上量化锚点,构建三情景概率判断(概率之和=100%,各附可观测触发条件)
- 每个情景必须写明“它在验证哪条市场叙事”,以及“出现什么信号时该情景失效”
- 历史镜像匹配 + 上期预判回顾
**输出**: JSON(结构见 analysis-framework.md「Subagent C」节)
---
## Phase 3: 渲染 Agent 生成 HTML
收集三份 JSON 后,交给渲染 Agent。
### 深度分析指令(最高优先级)
**1. 交叉证伪机制(Cross-Validation)**
禁止简单复读新闻中的利好与利空。必须执行新闻事件与盘面数据的交叉对比:
- 若**新闻大肆渲染某热点**(如“某板块重磅利好”),必须立即去查阅 `market_data.lhb_jgmmtj`(龙虎榜机构买卖)或 `analysis.industry.fund_flow_top3_outflow`:
- 如果机构/主力在**高位净卖出**(新闻火热但资金撤退),强烈提示**【风险提示:情绪高潮但主力资金背离 / 借利好兑现】**。
- 如果新闻利好与龙虎榜机构净买入**共振**,判定为**【主线确认】**。
**2. 必须建立因果链条**
禁止仅罗列“指数涨跌”或“新闻标题”。所有结论必须符合 `数据(Data) + 事件(Event) -> 归因(Attribution) -> 验证(Verification)` 的结构。
- ❌ 错误:今日半导体板块上涨,主力流入。
- ✅ 正确:半导体板块上涨3.2%,主力净流入15亿(数据),主要受昨夜英伟达财报超预期驱动(事件),确认了AI硬件端的景气度外溢(归因),需关注明日是否缩量分歧(验证)。
**3. 必须使用量化锚点与速率(Velocity)**
- **情绪与加速度**:必须引用 `composite_score`、`divergence`(散户/机构分歧)以及 `momentum_velocity`(加速度)。
- **量价配合**:必须引用 `analysis.technical` 中的 `volume_price_desc` 判断量价关系(如缩量下跌、放量滞涨等)。
- **资金**:必须引用 `northbound`(北向)与 `sector_fund_flow`(内资)的背离或共振,且留意机构/散户流向。
- **预期管理**:梳理未来3天的宏观数据或财报发布窗口,给出具体落地验证点。
**4. 数据失败处理**
若 `market_data` 中存在 `_failed_items`,必须在报告开头显著位置(引用块)提示:“⚠️ 部分数据源(如龙虎榜)暂时不可用,相关模块分析可能受限”。
HTML 设计规范详见 → `references/html-design-spec.md`
### 渲染要点
1. **冲突检查**:若三份 JSON 数据矛盾,以 Subagent C 数据为准
2. **统一视角**:最终报告不出现 Agent 角色名,以统一研究报告形式呈现
3. **模块标题用结论式句式**(如「资金从消费向科技大迁移,赚钱效应持续修复」)
4. **FT 风格固定**:三文鱼粉底色系(`#FAF7F2`),涨红(`#C0392B`)跌蓝深(`#1A2E3E`),espresso header(`#1C0F08`)
5. **字体**:`"Georgia", "Noto Serif SC", "PingFang SC"` 优先,展现权威感
6. **单文件输出**:不引用本地资源,ECharts 通过 CDN 加载
7. **body 最大宽度 1100px**,水平居中,内边距 48px/40px,辅助文字≥11px
8. **所有数字使用等宽字体**(`SFMono-Regular, Menlo, Consolas`)
9. **卡片圆角 12-16px**,投影 `0 4px 16px rgba(0,0,0,0.08)`
10. **必须渲染叙述区块**:每个模块必须包含来自 `analysis_text` 的 `.insight-block` 深度解读段落,禁止只渲染数字表格/图表而省略文字分析。叙述区块 CSS 组件见 `html-design-spec.md「深度叙述区块」`节。
11. **禁止排版漂移**:顶部仪表盘、图表区、表格区必须使用固定组件容器(`.dashboard-strip`、`.viz-card`、`.table-wrap`、`.chart-frame`),禁止裸露图表直接贴在模块根节点下。
12. **禁止元素重叠**:仪表盘 gauge、K 线图、Sankey、表格必须有明确高度;若数据不足导致图表拥挤,降级为 stat card / badge / 简化表,不允许文字与图表互相覆盖。
13. **响应式强制要求**:桌面端按 2-3 列信息栅格布局;当视口 < 900px 时统一降为单列,顶部指数卡改为 2 列网格,禁止 6 个指数横向挤压在一行。
14. **视觉层次强制要求**:每个模块必须遵循「标题区 → 一句话结论 → 核心图表区 → 深度解读 → 次级表格/清单」的顺序,禁止把图表、长段落、表格随机穿插。
15. **优先美观而非堆砌**:宁可减少一个次级组件,也要保证主图表和关键数字排版整齐、留白充足、模块高度均衡。
16. **图表必须自带解释与交互(深度优化要求)**:所有的单独 `.chart-frame` 顶部必须带有醒目的文字标签(HTML 标题或说明段落),告知用户正在看什么指标(如:`<div class="chart-title">主力30日净流入趋势</div>`);严禁生成没有任何文字说明“裸图表”;对于时序折线/柱状图必须强制开启 `dataZoom` 以供拖拽缩放;必须配置带有单位(% 或 亿元)的 `tooltip { trigger: 'axis' }` 和 `legend`。
17. **必须显式渲染“市场在交易什么”**:在顶部摘要区或 Module 1 中,固定展示 `module1.expectation_gap` 的主叙事摘要。
18. **必须显式渲染“明日验证点”**:在 Module 6 的情景区中展示每个情景的 `validates` 与 `invalidation`,禁止只渲染概率和区间。
### 页面结构
```
[顶部仪表盘横条] 三行布局:品牌行 | 指数行(6个指数)| 概览行(成交/情绪/涨停/北向)
[Module 1] 宏观定价扫描 ← Subagent A
[Module 2] 市场情绪温度计 ← Subagent A
[Module 3] 板块结构性分析 ← Subagent B
[Module 4] 资金路线图 ← Subagent B
[Module 5] 技术形态与估值 ← Subagent C
[Module 6] 次日预判与历史镜像 ← Subagent C
[页脚] 数据来源声明 + 免责声明
```
### 可视化清单(强制要求)
| 模块 | 图表 | 引擎 | 尺寸 | 交互 |
| ---- | -------------------------------------------------- | ------------------- | ------------- | ------------------ |
| M1 | 事件定价状态徽章表 | CSS badge | — | — |
| M1 | 外盘市场胶囊行 | CSS pill | — | — |
| M2 | 综合情绪仪表盘(大) + 散户/机构仪表盘(小×2) | ECharts gauge | 350px / 220px | tooltip |
| M2 | 5日情绪折线(含markArea过热区) | ECharts line | 200px mini | hover |
| M2 | 分项评分进度条表 | CSS | — | — |
| M3 | 行业涨跌幅横向条形图(全行业排序) | ECharts bar | tall 460px | dataZoom+tooltip |
| M3 | 轮动5阶段进度条(含脉冲动画) | CSS | — | — |
| M3 | 涨停生态雷达图 | ECharts radar | half 280px | tooltip |
| M4 | 资金结构分组柱状图(四类资金) | ECharts bar | full 380px | tooltip |
| M4 | 主力资金30日走势折线 | ECharts line | mini 200px | hover |
| M4 | 资金迁移桑基图 | ECharts sankey | full 380px | emphasis adjacency |
| M5 | K线图(60日,含MA5/20/60+量能附图,Tab切换三指数) | ECharts candlestick | tall 460px | dataZoom+tab |
| M5 | 多指数PE百分位彩色轨道(4条) | CSS | — | hover data-pct |
| M5 | ERP双轴折线(近2年) | ECharts line | full 380px | tooltip markLine |
| M6 | 三情景概率分段条 | CSS | 44px | — |
| M6 | 情景卡片accordion(3张可展开) | HTML/CSS/JS | — | click toggle |
| M6 | 观测清单交互表(优先级badge) | CSS badge+table | — | — |
**原则**:每个模块至少含 **2个** 可视化组件(图表或交互组件),禁止出现纯文字罗列的模块。
### 输出文件
将最终 HTML 写入**PROJECT_ROOT(运行 skill 的项目根目录)**:
```
market-debrief-YYYY-MM-DD.html
```
> 数据中间产物继续存放于 `SKILL_ROOT/assets/`,最终成品 HTML 单独放在 `PROJECT_ROOT`,便于直接预览、分享和版本比对:
>
> - `SKILL_ROOT/assets/market_data_YYYY-MM-DD.json` — 原始行情数据
> - `SKILL_ROOT/assets/analysis_YYYY-MM-DD.json` — 量化指标分析结果(新)
> - `SKILL_ROOT/assets/news_data_YYYY-MM-DD.json` — 新闻搜索结果
> - `PROJECT_ROOT/market-debrief-YYYY-MM-DD.html` — 最终日报
**输出动作要求**:渲染完成后,必须显式执行“写入 PROJECT_ROOT HTML 文件”这一步,不允许把最终 HTML 留在 `SKILL_ROOT/assets/`、临时目录或对话内联代码块中。
---
## 内容质量红线
**禁用表达**(出现即重写):
| ❌ 禁止 | ✅ 替代 |
| ---------------- | ---------------------------------------- |
| 市场情绪有所回暖 | 情绪综合分从52升至65 |
| 需关注风险 | 若明日上证跌破4050(MA20),触发悲观情景 |
| 可能震荡上行 | 核心情景(60%):上证4100-4160区间震荡 |
| 技术面显示支撑 | MA60(3980点)构成近期强支撑,距当前3.8% |
| 资金面较为活跃 | 今日成交1.06万亿,为20日均值的1.12倍 |
**每期必含量化锚点**:
1. 情绪综合分(含散户/机构拆解)
2. 资金迁移净额
3. 沪深300 PE 历史百分位
4. 关键支撑/压力位 + 计算依据
5. 三情景概率(和=100%)+ 触发条件
6. 上期预判准确度(若有)
---
## 语言规范
**先说好还是不好,再说为什么。** 每个模块标题和首句即结论。
**保留英文**:PE、PB、ERP、MA、ETF、MLF、EPS、ROE、CPI、PMI
**必须中文**:所有分析结论、图表标题、评价性用语、方向性判断
**禁止出现**:「总而言之」「需要指出的是」「值得注意的是」「总体来看」「综上所述」
---
## 数据失败项告知(必须执行)
生成报告完毕后,在最终回复中**必须以中文明确告知用户**:
1. **若所有数据均采集成功**:说明「本期数据采集完整,所有 12 类行情数据和新闻查询均成功」
2. **若存在失败项**:列出具体失败内容,例如:
> ⚠️ 本期数据采集部分失败,以下内容未能获取,相关模块分析准确度可能受影响:
>
> - **行情数据**:龙虎榜机构统计(lhb_jgmmtj)或龙虎榜个股统计(lhb_stocks)、指数PE(index pe)
> - **新闻查询**:2/4 个查询无有效返回
**来源**:读取 `SKILL_ROOT/assets/market_data_YYYY-MM-DD.json` 中的 `_failed_items` 字段,以及 `SKILL_ROOT/assets/news_data_YYYY-MM-DD.json` 中的 `_failed_queries` 字段。
---
## 参考文件索引
| 需要什么 | 去哪找 |
| ----------------------------------- | ---------------------------------- |
| AkShare 接口参数与字段 | `references/akshare-api.md` |
| 六模块分析框架 + Subagent JSON 格式 | `references/analysis-framework.md` |
| HTML 设计规范 + 色彩/排版/组件 | `references/html-design-spec.md` |
## 脚本索引
| 脚本 | 用途 | 依赖 |
| ------------------------------ | ------------------------------------------------- | ---------------- |
| `scripts/fetch_market_data.py` | AkShare 行情原始数据一键采集 → JSON | akshare, pandas |
| `scripts/analyze_market.py` | 量化指标计算引擎:情绪/技术/估值/行业/资金 → JSON | numpy, pandas |
| `scripts/search_news.py` | Tavily 新闻搜索 → JSON(Windows / 跨平台推荐) | requests, Tavily |
| `scripts/search_news.sh` | Tavily 新闻搜索 → JSON(Linux / macOS) | jq, curl, Tavily |
依赖安装:`pip install akshare numpy pandas requests`、`jq` + `curl`(Bash,可选)、Tavily API token(可选)