market-debrief-cn

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_DIRSKILL_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.jsonSKILL_ROOT/assets/analysis_YYYY-MM-DD.jsonSKILL_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_jgmmtjmarket_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_arrangementma_deviationskline_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_scoredivergence(散户/机构分歧)以及 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 的情景区中展示每个情景的 validatesinvalidation,禁止只渲染概率和区间。

页面结构

[顶部仪表盘横条]  三行布局:品牌行 | 指数行(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 gauge350px / 220pxtooltip
M25日情绪折线(含markArea过热区)ECharts line200px minihover
M2分项评分进度条表CSS
M3行业涨跌幅横向条形图(全行业排序)ECharts bartall 460pxdataZoom+tooltip
M3轮动5阶段进度条(含脉冲动画)CSS
M3涨停生态雷达图ECharts radarhalf 280pxtooltip
M4资金结构分组柱状图(四类资金)ECharts barfull 380pxtooltip
M4主力资金30日走势折线ECharts linemini 200pxhover
M4资金迁移桑基图ECharts sankeyfull 380pxemphasis adjacency
M5K线图(60日,含MA5/20/60+量能附图,Tab切换三指数)ECharts candlesticktall 460pxdataZoom+tab
M5多指数PE百分位彩色轨道(4条)CSShover data-pct
M5ERP双轴折线(近2年)ECharts linefull 380pxtooltip markLine
M6三情景概率分段条CSS44px
M6情景卡片accordion(3张可展开)HTML/CSS/JSclick 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.pyAkShare 行情原始数据一键采集 → JSONakshare, pandas
scripts/analyze_market.py量化指标计算引擎:情绪/技术/估值/行业/资金 → JSONnumpy, pandas
scripts/search_news.pyTavily 新闻搜索 → JSON(Windows / 跨平台推荐)requests, Tavily
scripts/search_news.shTavily 新闻搜索 → JSON(Linux / macOS)jq, curl, Tavily

依赖安装:pip install akshare numpy pandas requestsjq + curl(Bash,可选)、Tavily API token(可选)

market-debrief-cn — skill by KeLuoJun | Shared Context