| 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: 运行数据采集脚本
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(推荐,跨平台):
python scripts/search_news.py --date YYYY-MM-DD
Linux / macOS:
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: 运行量化分析引擎(新增)
在完成行情数据采集后,运行分析脚本对原始数据做预处理,输出结构化量化指标:
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
渲染要点
- 冲突检查:若三份 JSON 数据矛盾,以 Subagent C 数据为准
- 统一视角:最终报告不出现 Agent 角色名,以统一研究报告形式呈现
- 模块标题用结论式句式(如「资金从消费向科技大迁移,赚钱效应持续修复」)
- FT 风格固定:三文鱼粉底色系(
#FAF7F2),涨红(#C0392B)跌蓝深(#1A2E3E),espresso header(#1C0F08)
- 字体:
"Georgia", "Noto Serif SC", "PingFang SC" 优先,展现权威感
- 单文件输出:不引用本地资源,ECharts 通过 CDN 加载
- body 最大宽度 1100px,水平居中,内边距 48px/40px,辅助文字≥11px
- 所有数字使用等宽字体(
SFMono-Regular, Menlo, Consolas)
- 卡片圆角 12-16px,投影
0 4px 16px rgba(0,0,0,0.08)
- 必须渲染叙述区块:每个模块必须包含来自
analysis_text 的 .insight-block 深度解读段落,禁止只渲染数字表格/图表而省略文字分析。叙述区块 CSS 组件见 html-design-spec.md「深度叙述区块」节。
- 禁止排版漂移:顶部仪表盘、图表区、表格区必须使用固定组件容器(
.dashboard-strip、.viz-card、.table-wrap、.chart-frame),禁止裸露图表直接贴在模块根节点下。
- 禁止元素重叠:仪表盘 gauge、K 线图、Sankey、表格必须有明确高度;若数据不足导致图表拥挤,降级为 stat card / badge / 简化表,不允许文字与图表互相覆盖。
- 响应式强制要求:桌面端按 2-3 列信息栅格布局;当视口 < 900px 时统一降为单列,顶部指数卡改为 2 列网格,禁止 6 个指数横向挤压在一行。
- 视觉层次强制要求:每个模块必须遵循「标题区 → 一句话结论 → 核心图表区 → 深度解读 → 次级表格/清单」的顺序,禁止把图表、长段落、表格随机穿插。
- 优先美观而非堆砌:宁可减少一个次级组件,也要保证主图表和关键数字排版整齐、留白充足、模块高度均衡。
- 图表必须自带解释与交互(深度优化要求):所有的单独
.chart-frame 顶部必须带有醒目的文字标签(HTML 标题或说明段落),告知用户正在看什么指标(如:<div class="chart-title">主力30日净流入趋势</div>);严禁生成没有任何文字说明“裸图表”;对于时序折线/柱状图必须强制开启 dataZoom 以供拖拽缩放;必须配置带有单位(% 或 亿元)的 tooltip { trigger: 'axis' } 和 legend。
- 必须显式渲染“市场在交易什么”:在顶部摘要区或 Module 1 中,固定展示
module1.expectation_gap 的主叙事摘要。
- 必须显式渲染“明日验证点”:在 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倍 |
每期必含量化锚点:
- 情绪综合分(含散户/机构拆解)
- 资金迁移净额
- 沪深300 PE 历史百分位
- 关键支撑/压力位 + 计算依据
- 三情景概率(和=100%)+ 触发条件
- 上期预判准确度(若有)
语言规范
先说好还是不好,再说为什么。 每个模块标题和首句即结论。
保留英文:PE、PB、ERP、MA、ETF、MLF、EPS、ROE、CPI、PMI
必须中文:所有分析结论、图表标题、评价性用语、方向性判断
禁止出现:「总而言之」「需要指出的是」「值得注意的是」「总体来看」「综上所述」
数据失败项告知(必须执行)
生成报告完毕后,在最终回复中必须以中文明确告知用户:
-
若所有数据均采集成功:说明「本期数据采集完整,所有 12 类行情数据和新闻查询均成功」
-
若存在失败项:列出具体失败内容,例如:
⚠️ 本期数据采集部分失败,以下内容未能获取,相关模块分析准确度可能受影响:
- 行情数据:龙虎榜机构统计(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(可选)