MiX个股行情分析小霸王
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-dzobs9ce--mix-stock-analysis-king.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-dzobs9ce/mix-stock-analysis-king。专注短期(1-5天)市场热点、资金流向、情绪博弈的个股分析系统,输出含概率量化与操作方案的Bloomberg Terminal级HTML报告。
阅读全文 (展开查看完整说明)
概述
个股行情分析小霸王
Core Purpose
基于多Agent协作对话系统,通过三轮联网搜索获取实时资讯,由三个角色(提问者→回答专家→总结者)接力输出深度分析,生成暗色主题HTML报告,包含概率量化、操作方案和风险预案。
执行原则:
- 全自动执行,不需要中途询问用户。除非输入信息严重不足(如无法识别股票名称),否则一直跑到生成HTML报告为止。
- 7个阶段必须全部独立执行,严禁合并或跳过。 阶段3(提问者)、阶段4(回答专家)、阶段5(总结者)各有独立的输出要求,必须分别完整输出后再进入下一阶段。禁止将阶段3-5合并为一个步骤直接跳到写HTML。
工作流总览
用户输入(股票名称/板块/问题)
↓
阶段1:解析输入,提取{股票名}和{板块名}
↓
阶段2:三轮联网搜索(web_search × 3)
↓
阶段2.5:finance-data-retrieval 数据补充(daily + top_list + moneyflow + ths_daily + 财务快照)
↓
阶段3:提问者输出(搜索汇总 + 核心问题)
↓
阶段4:回答专家输出(多维度深度分析 + 财务快照 + 催化剂日历)
↓
阶段5:总结者输出(概率量化 + 操作方案 + 最终结论)
↓
阶段6:生成HTML报告(write_to_file,含投研摘要 → core → ... → conclusion)
↓
阶段7:用 preview_url 展示报告阶段1:输入解析
从用户输入中提取:
- {股票名}:如"赣锋锂业"、"豫能控股"、"存储板块"
- {板块名}:如果输入的是个股,推导其所属板块(如赣锋锂业→锂电池/锂矿板块)
- {分析角度}:用户特别关注的问题(如"下周能涨吗"→关注短期走势)
如果用户输入的是板块(如"存储板块"),则{股票名}和{板块名}相同。
1.1 对比模式识别
当用户输入包含两只及以上股票的对比需求时(如"XX和YY哪个更值得买"),自动切换为对比分析模式。
判断条件(满足任一):
- 输入包含"和"/"vs"/"VS"/"对比"/"哪个"/"谁更"/"选一选"等对比词
- 输入中明确提到两只不同股票名称
对比模式与普通模式的差异:
| 维度 | 普通模式 | 对比模式(个股对比) | 对比模式(板块对比子模式) |
|---|---|---|---|
| 分析标的 | 1只核心个股 | 2-4只股票 | 2-4个板块 |
| 搜索轮次 | 3轮(围绕1只股票) | 每只股票各1轮基础搜索 + 1轮联合板块搜索(共4-5轮) | 板块A龙头1轮 + 板块B龙头1轮 + 两板块概念对比1轮(3轮) |
| 数据获取 | 核心个股+2只对标 | 每只股票都获取日线/资金流向/龙虎榜 | 每板块获取ths_daily板块指数 + 龙头股日线 + 板块资金流入 |
| 阶段3输出 | 单股票核心问题 | 对比核心问题 + 各股独立关注点 | 板块对比核心问题 + 各板块独立关注点 |
| 阶段4输出 | 5个分析模块 | 每只股票独立分析 + 对比表格 | 每板块独立分析 + 板块强度对比表(含板块Beta/资金流入强度) |
| 阶段5输出 | 单股概率+操作方案 | 各股独立概率 + 对比排名 + 推荐标的 | 各板块独立强度评分 + 板块对比排名 + 推荐板块 |
对比模式搜索策略(个股对比):
- 第1轮:股票A基础数据(最近3天)
- 第2轮:股票B基础数据(最近3天)
- 第3轮:股票A催化因素(最近1-7天)
- 第4轮:股票B催化因素(最近1-7天)
- 第5轮:板块/概念联合分析(共属板块的政策和趋势)
如果对比3只以上股票,搜索轮次保持5轮不变(将多只股票合并到同一轮搜索中)。
🆕 板块对比子模式(v3.4.3新增):
当用户输入包含"板块"+"对比/哪个强/谁强/更好"等关键词(如"锂电池板块和固态电池板块哪个最近更强")时,触发板块对比子模式。
识别关键词:
- 板块命名:含"板块"/"行业"/"概念"/"主题"或已知板块名(如锂电池/半导体/储能/固态电池/AI/机器人)
- 对比意图:含"哪个强/谁强/对比/更好/选一选/差距"
搜索策略(3轮):
- 第1轮:板块A龙头股搜索(取板块代表性龙头1-2只的最近3天走势)
- 第2轮:板块B龙头股搜索(取板块代表性龙头1-2只的最近3天走势)
- 第3轮:两板块概念对比(含政策、资金流入强度、近期催化差异)
数据获取:
- 板块A ths_daily板块指数(近20日,板块Beta计算)
- 板块B ths_daily板块指数(近20日,板块Beta计算)
- 板块A龙头股daily(取板块平均强度)
- 板块B龙头股daily(取板块平均强度)
- 板块A vs 板块B 资金流入对比(5日累计)
阶段4新增对比维度(板块强度评估专用):
| 维度 | 计算方法 | 评估意义 |
|---|---|---|
| 板块Beta | corr(板块日收益率, 大盘日收益率) × std(板块)/std(大盘) | 弹性大小,>1.2 进攻型 |
| 板块资金流入强度 | 板块5日累计净流入 / 板块流通市值 | 资金共识度,>0.05% 强势 |
| 龙头股联动强度 | 板块内Top3龙头股5日涨跌相关性 | 板块内一致性,>0.7 强联动 |
| 板块情绪周期 | 综合涨停家数+连板高度+换手率 | 启动/加速/高潮/分化 |
| 政策催化密度 | 近期政策/事件提及次数(搜索资讯计数) | 关注度,高频=强催化 |
🆕 对比模式关键词识别:
| 触发类型 | 输入示例 | 子模式 |
|---|---|---|
| 个股对比 | "赣锋锂业和天齐锂业哪个更值得买" | 个股对比(5轮搜索) |
| 板块对比 | "锂电池板块和固态电池板块哪个更强" | 板块对比子模式(3轮搜索) |
| 板块内个股 | "锂电池板块里赣锋锂业和天齐锂业谁强" | 个股对比(按个股处理) |
| 个股vs板块 | "赣锋锂业和锂电池板块谁更强" | 个股对比(板块作为对照) |
如果对比3只以上股票,搜索轮次保持5轮不变(将多只股票合并到同一轮搜索中)。
阶段2:三轮联网搜索
强制性要求: 必须执行三轮搜索,不可跳过任何一轮。搜索结果将作为后续所有分析的数据基础。
搜索安全规则(硬性约束,违反则分析无效)
- 总搜索次数限制:基础搜索严格限制为 3 次
web_search调用。但新增搜索质量预检(v3.4.0):如果第1轮搜索返回的有效资讯(不含重复、广告、无关结果)少于 3 条,允许追加 1 轮"补充搜索",总搜索上限为 4 次。超过 4 次禁止继续搜索。 - 调用间隔:三轮搜索之间不要连续快速调用,每轮搜索后先处理结果再发起下一轮,避免短时间密集请求。
- 信源白名单:搜索结果中优先采信以下来源的数据和观点,非白名单来源的信息标注"来源待验证":
- 官方渠道:上海证券交易所(sse.com.cn)、深圳证券交易所(szse.cn)、北京证券交易所(bse.cn)、中国证监会(csrc.gov.cn)
- 权威财经媒体:东方财富网(eastmoney.com)、同花顺(10jqka.com.cn)、证券时报(stcn.com)、中国证券报(cs.com.cn)、上海证券报(cnstock.com)、财联社(cls.cn)
- 公司官方:巨潮资讯网(cninfo.com.cn)上的公司公告、上市公司官网
- 时间限定:所有搜索关键词必须附带时间范围限定词(如"2026年4月"、"本周"、"最近3天"),确保获取最新数据。
- 反编造原则:搜索结果中没有的数据(如具体股价、换手率、北向资金净流入额),不得编造。必须标注"该数据需通过 finance-data-retrieval 获取"。
第1轮搜索:基础数据(最近3天)
使用 web_search,查询关键词:
"{股票名} 最新消息 股价走势 龙虎榜 site:eastmoney.com OR site:10jqka.com.cn OR site:cls.cn"- 时间范围:最近3天
- 目标:收集5-8条资讯
- 聚焦:股价变动、资金流向、板块表现、龙虎榜数据
- 信源要求:优先东方财富、同花顺、财联社
第2轮搜索:催化因素(最近1-7天)
使用 web_search,查询关键词:
"{股票名} 催化因素 上涨原因 连板 概念股"- 时间范围:最近1-7天
- 目标:收集5条最热资讯
- 聚焦:上涨原因、催化因素、板块梯队、龙头参照
- 信源要求:优先证券时报、中国证券报、财联社
第3轮搜索:板块/概念(最近1-14天)
使用 web_search,查询关键词:
"{板块名} 板块分析 政策利好 龙头股"- 时间范围:最近1-14天
- 目标:收集3-5条重点资讯
- 聚焦:板块政策、行业趋势、产业链动态、竞品对比
- 信源要求:优先东财板块分析、同花顺概念板块、研报摘要
🔴 CHECKPOINT · 搜索质量gate(阶段2→2.5之间必须自检)
三轮搜索完成后,进入数据补充前,强制执行以下自检。任一项不通过则按降级矩阵处理,不得跳过进入阶段2.5。
| 自检项 | 通过标准 | 不通过处理 |
|---|---|---|
| 总资讯量 | ≥8条有效资讯(去重去广告后) | 追加1轮补充搜索(总上限4次);仍不足则标注"搜索数据稀疏,分析置信度降低"继续 |
| 核心数据覆盖 | 至少1条含股价/涨跌幅 + 1条含资金流向 | 在阶段2.5必须通过API补齐;若API也失败,相关章节标注"数据暂不可获取" |
| 时间新鲜度 | 至少1条资讯在最近3天内 | 扩大时间范围重搜1次;仍无则标注"近期资讯缺失"继续 |
阶段2.5:三源数据补充(必须执行!)
三轮搜索完成后,必须调用数据源获取真实行情数据,用于验证搜索资讯和补充定量分析。搜索只能获取定性信息("涨价了""需求爆发"),精确数据必须由数据源提供。
v3.5.0 信源升级:从智兔API(需token)升级为 BaoStock(主)+ AkShare(实时)+ MCP(增强) 三源架构,用户零配置。
2.5.0 数据源分层架构
| 层级 | 数据源 | 用途 | 配置要求 |
|---|---|---|---|
| L1 主力 | BaoStock | 历史日线、复权、财务、行业分类 | 零配置(pip install baostock) |
| L2 实时 | AkShare 新浪源 | 实时行情(5-15秒延迟)、北向资金、板块 | 零配置(pip install akshare) |
| L3 增强 | finance-data-retrieval MCP | 龙虎榜、TOP10、资金流、公告 | 零配置(系统已连接) |
| L4 资讯 | 联网搜索 | 定性新闻、催化因素 | 自动 |
重要:L1/L2 全部免token、免注册、免邮箱验证——用户安装技能并 pip install baostock akshare 即可全功能使用。
2.5.1 必须获取的数据(4项,不可跳过)
① 个股日线行情(BaoStock)
- 调用
baostock_api.get_daily_kline(stock_code, days=120),获取最近120个交易日日线 - 用途:验证搜索中提到的股价变动、支撑压力位、涨跌幅
- 输入:股票代码(任意格式:
000001/000001.SZ/sz.000001都可) - 输出:DataFrame(date, open, high, low, close, volume, amount)
- 核心个股数量:3-5只(板块分析取梯队排名前5,个股分析取目标股+对标股2只)
② 龙虎榜数据(finance-data-retrieval MCP)
- 调用
top_listAPI,获取核心个股最近5日的龙虎榜数据 - 参数:
ts_code、trade_date、fields - 用途:验证搜索中的"游资活跃""机构分歧"等判断,获取真实买入/卖出席位和金额
- 如果某日无龙虎榜数据,标注"该日无龙虎榜上榜"
③ 主力资金流向(finance-data-retrieval MCP)
- 调用
moneyflowAPI,获取核心个股最近10日的主力资金净流入/流出 - 参数:
ts_code、start_date、end_date - 用途:量化验证"主力获利了结"或"主力资金净流入"等判断
- 替代方案:调用
akshare_realtime.get_north_fund_flow()验证大盘外资态度
④ 板块指数日线(finance-data-retrieval MCP)
- 调用
ths_dailyAPI,获取板块概念指数的近期走势 - 参数:
ts_code(同花顺概念代码,如886033.TI)、start_date、end_date - 用途:判断板块整体趋势(上涨/震荡/下跌),为情绪周期判断提供数据支撑
2.5.2 BaoStock 增强数据(替代原智兔数据,三项全部免token)
⑤ 长期日线趋势(baostock_daily_extended)
- 调用
baostock_api.get_daily_kline(stock_code, days=365),获取近1年完整日线 - 用途:补充 finance-data-retrieval 的近10日数据,提供更长期的资金博弈视角
- 输出:完整1年OHLCV数据,可基于此计算MA/MACD/KDJ/RSI等所有技术指标
⑥ 公司基本信息(baostock_company)
- 调用
baostock_api.get_company_info(stock_code),获取公司基本信息 - 返回字段:name(公司名称)、industry(行业)、listing_date(上市日期)、status(状态)
- 用途:快速获取静态信息,替代原智兔 get_company_profile
⑦ 指数成分股(baostock_index)
- 调用
baostock_api.get_index_stocks(index_code),获取指数成分股列表 - 常用代码:sh.000300(沪深300)、sh.000905(中证500)、sh.000016(上证50)
- 用途:板块分析时快速获取成分股列表
2.5.3 AkShare 实时行情(新增,零配置盘中数据)
⑧ 实时报价(akshare_realtime)
- 调用
akshare_realtime.get_realtime_quote(stock_code),获取盘中实时报价 - 数据源:新浪源(5-15秒延迟)
- 返回字段:price(最新价)、pct_change(涨跌幅)、volume(成交量)、amount(成交额)、turnover(换手率)、pe(市盈率)、pb(市净率)等
- 覆盖:全A股5542只股票
- 用途:盘中实时数据,验证日内技术位是否突破
⑨ 北向资金实时(akshare_north_bound)
- 调用
akshare_realtime.get_north_fund_flow(),获取北向资金实时流向 - 返回:沪股通净买额、深股通净买额、合计净买额、上涨/下跌家数
- 用途:验证外资对大盘/板块的态度
⑩ 板块实时(akshare_sector)
- 调用
akshare_realtime.get_sector_realtime(sector_name),获取行业板块实时行情 - 用途:板块分析时快速获取板块成分股实时涨跌幅排序
2.5.4 BaoStock + AkShare 数据调用代码示例
# 导入数据源模块(位于技能根目录)
import sys
import os
skill_dir = os.path.expanduser("~/.workbuddy/skills/MiX-stock-analysis-king")
sys.path.insert(0, skill_dir)
# ===== L1 BaoStock(历史日线 + 公司信息) =====
import baostock_api
# 获取日线(最近120天)
df_kline = baostock_api.get_daily_kline("000001", days=120)
# 返回 DataFrame: date, open, high, low, close, volume, amount
# 计算技术指标(基于真实日线,无估算)
ma = baostock_api.calc_ma("000001", periods=[5, 10, 20, 60])
macd = baostock_api.calc_macd("000001")
kdj = baostock_api.calc_kdj("000001")
rsi = baostock_api.calc_rsi("000001")
# 获取公司信息
info = baostock_api.get_company_info("000001")
# 返回: {code, name, industry, listing_date, status}
# 获取指数成分
hs300 = baostock_api.get_index_stocks("sh.000300")
# ===== L2 AkShare(实时行情) =====
import akshare_realtime
# 获取盘中实时报价
quote = akshare_realtime.get_realtime_quote("000001")
# 返回: {code, name, price, pct_change, volume, amount, pe, pb, turnover, ...}
# 批量获取(如对比分析时)
batch = akshare_realtime.get_realtime_batch(["000001", "600519", "002779"])
# 获取北向资金
north = akshare_realtime.get_north_fund_flow()
# 返回: {sh_净买额, sz_净买额, total_净买额, 上涨数, 下跌数, date}
# 获取板块实时
sector = akshare_realtime.get_sector_realtime("云母")数据融合策略:
- BaoStock 提供长期(1年)历史数据 + 真实计算的指标
- AkShare 提供盘中实时行情(5-15秒延迟)
- MCP 提供短期精准数据(龙虎榜/资金流/公告)
- 三源互补,形成短中长期完整视角
2.5.5 失败模式与降级矩阵
| 失败场景 | 一线修复 | 兜底 |
|---|---|---|
| BaoStock 不可用 | retry 2次(间隔2秒) | 标记"日线暂不可获取",技术面仅基于搜索定性 |
| AkShare 新浪源限流 | retry 2次(间隔3秒) | 改用 AkShare 东方财富源(stock_zh_a_spot_em) |
| AkShare 网络失败 | 检测网络/代理 | 改用 BaoStock 最近一日数据 |
| MCP 不可用 | 提示用户检查连接 | 标记"MCP不可用",龙虎榜/资金流章节标注"暂不可获取" |
| 实时数据延迟 > 5分钟 | 标注"行情快照时刻:XX:XX" | 切换到 BaoStock 当日收盘数据 |
| 技术指标无法计算 | 检查日线数据是否够 | 标注"指标暂不可计算",禁止写"约XX(估算)" |
2.5.3 财务快照模块(4项,必选 — v3.4.0 新增)
定位:回答"这只票的财务底子有没有雷"——短线投资者最关心的底线问题。不是深度财务分析(那是 trading-analysis 的事),而是快速排雷。
⑧ 利润表(income)— 升为必选
- 调用
incomeAPI,获取核心个股最近4个季度的营收和净利润 - 参数:
ts_code、start_date(建议传最近1年,如"20250101") - 必须字段:total_revenue(营业总收入)、net_profit(净利润)
- 用途:判断营收/净利润趋势(增长/持平/下滑),验证搜索中提到的"业绩高增长"等判断
- 注意:income 必须加 start_date,否则返回 2017 年历史数据(见 PITFALLS-04)
⑨ 财务指标(fina_indicator)— 新增
- 调用
fina_indicatorAPI,获取最近2个报告期(最近2个季报)的财务指标 - 参数:
ts_code、period(最近2个季度末,如"20250930"和"20250630") - 核心字段:roe(净资产收益率)、gross_margin(毛利率)、debt_to_assets(资产负债率)、current_ratio(流动比率)
- 用途:快速判断盈利能力(ROE)、偿债能力(资产负债率/流动比率)
⑩ 资产负债表(balancesheet)— 新增
- 调用
balancesheetAPI,获取最近1个报告期的资产负债表 - 参数:
ts_code、period(最近季度末) - 核心字段:total_assets(总资产)、total_liab(负债合计)、money_cap(货币资金)、total_cur_liab(流动负债)
- 用途:计算资产负债率(总负债/总资产),验证 fina_indicator 的 debt_to_assets 是否合理
⑪ 现金流量表(cashflow)— 新增
- 调用
cashflowAPI,获取最近2个报告期的现金流数据 - 参数:
ts_code、period(最近2个季度末) - 核心字段:n_cashflow_act(经营现金流净额)、free_cashflow(自由现金流)
- 用途:判断"赚不赚钱"和"有没有真金白银"——净利润增长但经营现金流为负是危险信号
财务快照输出格式(在阶段4多维度分析或 HTML 报告中作为独立 sub-card):
<div class="sub-card accent-green">
<h4>💰 财务快照</h4>
<table>
<thead>
<tr><th>指标</th><th>最近季度</th><th>上一季度</th><th>趋势</th></tr>
</thead>
<tbody>
<tr>
<td>营业收入</td>
<td>XX亿元</td>
<td>XX亿元</td>
<td><span style="color: var(--c-up);">+XX%</span></td>
</tr>
<tr>
<td>净利润</td>
<td>XX亿元</td>
<td>XX亿元</td>
<td><span style="color: var(--c-up);">+XX%</span></td>
</tr>
<tr>
<td>ROE</td>
<td>XX%</td>
<td>XX%</td>
<td><span style="color: var(--c-up);">↑</span></td>
</tr>
<tr>
<td>毛利率</td>
<td>XX%</td>
<td>XX%</td>
<td><span style="color: var(--c-accent);">→</span></td>
</tr>
<tr>
<td>资产负债率</td>
<td>XX%</td>
<td>XX%</td>
<td><span style="color: var(--c-down);">↑</span></td>
</tr>
<tr>
<td>经营现金流</td>
<td>XX亿元</td>
<td>XX亿元</td>
<td><span style="color: var(--c-up);">+XX%</span></td>
</tr>
</tbody>
</table>
<p><strong>财务健康判定</strong>:1句话总结(如"营收利润双增长、ROE优秀、现金流充裕,无明显雷点"或"净利润下滑且经营现金流为负,需警惕财务恶化风险")。</p>
</div>降级策略:如果 fina_indicator/balancesheet/cashflow 任一 API 返回空数据,标注"该数据暂不可获取",财务快照卡片只展示已获取的数据行。不影响核心分析流程。
2.5.4 建议获取的数据(2项,根据分析需要选调)
⑫ 北向资金(moneyflow_hsgt)
- 调用
moneyflow_hsgtAPI,获取沪股通/深股通近10日净买入数据 - 用途:验证外资对科技板块的态度
- 板块分析时建议获取,个股分析时可选
⑬ 融资融券(margin_detail)
- 调用
margin_detailAPI,获取个股融资余额变化 - 用途:验证"杠杆资金看多/看空"判断
- 如果搜索中提到融资相关资讯,必须获取
2.5.5 数据使用规则(v3.5.0更新)
- 数据源优先级:BaoStock(长期日线)= AkShare(实时)> MCP(短期)> 联网搜索(定性)
- 搜索资讯 vs API数据冲突:以 BaoStock/AkShare/MCP 数据为准,搜索资讯标注为辅助参考
- 数据来源标注:所有引用数据必须标注来源(BaoStock/AkShare/MCP/搜索URL)
- 数据无法获取:如果数据源返回空数据或报错,在分析中标注"该数据暂不可获取",不得编造
- 更新评估表格:获取完数据后,将"数据质量"评估从⚠️更新为✅
2.5.6 数据源调用规范
BaoStock 调用规范:
- 使用
baostock_api.py封装的函数 - 股票代码可传任意格式(
000001/000001.SZ/sz.000001均可),模块自动转换 - 每次调用内置 login/logout,配额无限
- 长时间频繁调用(>100次/分钟)可能被临时限流,自动 retry 即可
AkShare 实时行情调用规范:
- 使用
akshare_realtime.py封装的函数 - 默认走新浪源(稳定);东方财富源作为备选(限流时)
- 实时行情延迟 5-15秒,禁止写"实时"——必须写"盘中实时报价"或"准实时"
- 全量拉取一次5542只股票耗时约30秒,禁止在阶段2.5反复调用——单只分析时直接调
get_realtime_quote(stock_code)
finance-data-retrieval 调用规范:
- 先读取对应API的文档(references目录下),确认参数格式
ts_code必须带交易所后缀(.SH/.SZ/.BJ),不能只传数字代码- 日期格式统一用 YYYYMMDD(如20260812)
- 每次调用最多获取10个交易日数据,不要拉太长
🔴 CHECKPOINT · 数据完整性gate(阶段2.5→3之间必须自检)
数据补充完成后,进入分析前,强制执行以下自检。这是防止编造数据的最后防线。
| 自检项 | 通过标准 | 不通过处理(禁止编造) |
|---|---|---|
| 日线行情 | BaoStock get_daily_kline 返回≥10条 | 标注"日线数据暂不可获取",技术面分析仅基于搜索定性描述 |
| 龙虎榜 | MCP top_list返回数据或确认当日未上榜 | 标注"该日无龙虎榜上榜"或"数据暂不可获取" |
| 资金流向 | MCP moneyflow或AkShare北向资金返回数据 | 标注"资金流数据暂不可获取",资金面分析降级为定性 |
| 财务快照 | income/fina_indicator至少1项有数据 | 财务快照卡片只展示已获取行,缺失行标注"暂不可获取",禁止用"推算"字样填充 |
| 技术指标 | 必须用Python基于真实日线计算MACD/KDJ/RSI/Beta | 若日线缺失则标注"技术指标暂不可计算",禁止写"约XX(估算)" |
🛑 STOP · 反编造硬约束:任何在搜索结果和API返回中不存在数值的字段,必须写"暂不可获取"或留空。出现"推算"、"估算"、"约XX"等字样视为编造,必须删除。唯一例外:当历史数据可推算(如已知Q1和年报推Q4单季)时,须标注"由XX数据推算"并给出推算公式。
失败模式与降级矩阵(dim3 系统化)
当上述gate任一项不通过时,按下表执行降级,不得静默跳过或编造数据继续:
| 失败场景 | 一线修复 | 仍失败兜底 |
|---|---|---|
| web_search 全部超时 | 切换搜索引擎域名/简化关键词重试1次 | 标注"联网搜索失败",仅基于API数据分析,置信度降级 |
| finance-data-retrieval MCP不可用 | 切换到 BaoStock/AkShare 取日线/资金流 | 同时失败则标注"主数据源均不可用",相关章节输出"数据暂不可获取" |
| BaoStock 不可用 | retry 2次(间隔2秒) | 改用 AkShare 日线接口(stock_zh_a_hist);都失败则标注"日线暂不可获取" |
| AkShare 新浪源限流 | 切换到东方财富源(stock_zh_a_spot_em) | 都失败则用 BaoStock 最近一日收盘数据 |
| income返回历史数据(非最近季度) | 检查是否漏传start_date(PITFALLS-04),补参数重试 | 仍异常则标注"财务数据异常",财务快照输出降级提示 |
| 日线数据不足(<5条) | 扩大start_date范围到20个交易日前 | 仍不足则技术面分析标注"样本不足,指标仅供参考" |
| 板块指数(ths_daily)获取失败 | Beta指标标注"板块Beta暂不可计算" | 情绪周期判断改用个股日线趋势推断 |
| HTML合并脚本(merge_report.py)失败 | 检查part1/2/3文件是否存在且非空 | 手动拼接header+parts+footer,跳过脚本 |
阶段3:提问者输出
提问者基于三轮搜索结果,输出以下部分。所有输出必须引用具体搜索资讯,不可凭空编造。
3.0 核心问题(1段话)
将用户问题展开为1段综合性描述(80-150字),包含:
- 用户原始问题的核心矛盾
- 股票当前状态描述(涨停/回调/突破等,含具体数据)
- 核心催化因素(业绩/政策/锂价等,含具体数据)
- 最终要回答的问题
格式:直接1段<p><strong>...</strong></p>,不加表格、不加sub-card。原版参考:<p><strong>赣锋锂业3月27日强势涨停、创60日新高,在业绩扭亏(2025年Q4单季盈利超10亿)+锂价暴涨160%(津巴布韦禁令)+储能爆发+固态电池小批量量产的多重催化下,下周能上涨多少?这波行情到底是业绩反转的主升浪还是超跌反弹的脉冲行情?</strong></p>
3.1 关键关注点(sub-card + <ul>列表)
使用<div class="sub-card">,内含<h4>📊 关键关注点</h4>和<ul>列表。
- 5条关注点,每条1句话(30-50字)
- 格式:
<li><strong>题材/业绩/锂价/储能/固态电池</strong>:具体内容</li> - 不用表格,用
<ul>列表 - 每条必须包含具体数据
3.2 思考逻辑(sub-card + <ul>列表)
使用<div class="sub-card">,内含<h4>💡 思考逻辑</h4>和<ul>列表。
- 4-5条思考逻辑,每条1句话(50-70字),以"A vs B"形式呈现
- 格式:
<li><strong>维度A vs 维度B</strong>:核心判断一句话</li> - 不用表格,用
<ul>列表 - 每条只有1句话,不展开成多段——这是精炼的关键
3.3 风险提示(sub-card + <ul>列表)
使用<div class="sub-card">,内含<h4>⚠️ 风险提示</h4>和<ul>列表。
- 4-5个风险点,每条1句话(30-50字)
- 格式:
<li><strong>风险类型</strong>:具体描述</li> - 不用表格,用
<ul>列表
3.4 联网搜索资讯汇总分析(必须输出!)
输出格式:
搜索概况表格:
| 搜索批次 | 搜索内容 | 搜索时间范围 | 收集资讯数量 |
|---|---|---|---|
| 第一次搜索 | 基础数据 | 最近3天 | X条 |
| 第二次搜索 | 催化因素 & 连板原因 | 最近1-7天 | X条 |
| 第三次搜索 | 相关概念重点资讯 | 最近1-14天 | X条 |
| 合计 | 所有搜索 | – | X条 |
每次搜索的分析总结:
每轮搜索输出为1个sub-card,包含:
- 4条资讯要点(
<ul>列表,不是表格),每条30-50字 - 每条必须引用具体数据(股价、涨跌幅、金额、日期等)
- 不需要每轮搜索后额外加总结段落(原版没有)
阶段4:回答专家输出
回答专家消费提问者的全部输出,进行多维度深度分析。必须引用提问者的核心问题和搜索资讯,不可独立编造。
4.1 多维度分析(5+1个子模块)
必须全部输出,不可遗漏。每个sub-card结构:1个表格 + 1段总结(不是2段)。
0. 财务快照(v3.4.0 新增,独立 card)
- 使用
.sub-card.accent-green包裹,标题💰 财务快照 - 表格6行:营业收入/净利润/ROE/毛利率/资产负债率/经营现金流(4列:指标/最近季度/上一季度/趋势)
- 趋势列:正增长用红色(
--c-up),负增长用绿色(--c-down),持平用中性色 - 1段总结(50-80字):
<strong>财务健康判定</strong>:一句话总结,明确说"有无雷点" - 数据来源:阶段 2.5.3 的 income/fina_indicator/balancesheet/cashflow
- 降级:如果财务数据获取失败,输出
<p>财务快照:数据暂不可获取,请参考 trading-analysis 进行深度财务分析。</p>
1. 热点题材分析
- 表格4行:当前题材 / 催化因素 / 持续性 / 辨识度(2列:分析维度 + 具体内容)
- 1段总结(50-80字),格式:
<p><strong>核心逻辑</strong>:...</p> - 原版列头:分析维度 | 具体内容(不是3列)
2. 板块相关个股分析
- 表格4列:涨幅/表现 | 标的代码 | 标的名称 | 核心逻辑 | 辨识度(原版列头)
- 1段总结(30-50字)
- 不要加"梯队"列,原版只有5列
3. 情绪周期判断
- 表格4列:周期阶段 | 特征描述 | 当前状态 | 后续预判
- 只有4个阶段:启动期 / 加速期 / 高潮期 / 分化期(原版4阶段,不是6阶段)
- 1段总结(50-80字)
4. 技术面分析
- 表格4列:技术指标 | 当前数值 | 技术信号 | 后续判断
- 指标包括:MACD、KDJ、RSI、均线系统、成交量(原版5项,不加BOLL)
- Beta 指标(v3.4.0 新增):在表格末尾新增1行
- 计算:
Beta = corr(个股日收益率, 板块日收益率) × std(个股) / std(板块) - 数据来源:daily(个股日线,近20个交易日)+ ths_daily(板块指数日线,近20个交易日)
- 使用 Python 手算:取两个序列的 close 列,计算日收益率(pct_change),然后算皮尔逊相关系数和标准差
- 判断:Beta > 1.2 → 弹性大/进攻型,0.8-1.2 → 跟随板块/中性,< 0.8 → 弱于板块/防御型
- 如果板块指数数据(ths_daily)获取失败,标注"板块Beta暂不可计算"
- 计算:
- 1段总结(30-50字)
5. 资金面分析
- 表格3列:资金维度 | 具体内容 | 判断
- 维度包括:主力资金、北向资金、机构席位、游资资金、融资融券
- 1段总结(50-80字)
4.2 催化剂日历(v3.4.0 新增,独立 card)
从三轮搜索结果中提取带时间节点的催化事件,不需要额外 API 调用。关键是在阶段2搜索时有意识地收集时间信息。
独立card,标题 📅 催化剂日历,内含1个表格:
| 时间节点 | 催化事件 | 影响方向 | 确定性 | 数据来源 |
|---------|---------|---------|--------|---------|
| 4月10日 | 3月社融数据公布 | 偏正面 | 高 | 公开日程 |
| 4月中旬 | 一季报预告窗口 | 取决于业绩 | 中 | 公告规则 |
| Q2 | XX政策落地 | 偏正面 | 低 | 新闻推断 |规则:
- 从搜索结果中提取,不编造时间节点
- 时间节点格式:具体日期(4月10日)或时间段(4月中旬、Q2)
- 确定性:高(已公布日程)/ 中(大概率发生)/ 低(推断)
- 影响方向:偏正面(红) / 偏负面(绿) / 中性
- 至少3条,最多7条
- 1段总结(50-80字):
<strong>催化剂展望</strong>:近期最关键的催化剂是XX(时间),如果XX则XX。
搜索阶段的配合要求:在阶段2的第2轮(催化因素)和第3轮(板块/概念)搜索中,有意识地收集带时间节点的资讯。如果搜索结果中几乎没有时间信息,在催化剂日历中标注"本次搜索未获取到明确时间节点的催化事件"。
4.3 K线与量价资金博弈分析
独立card,包含3个sub-card:
K线形态分析(表格3列:分析维度 | 具体内容 | 判断)
- 趋势强弱、突破/回踩、支撑压力、均线结构
- 1段总结(30-50字)
量价关系分析(表格3列:分析维度 | 具体内容 | 判断)
- 放量/缩量、量增价涨、量价背离、换手健康度
- 1段总结(30-50字)
资金博弈分析(表格3列:分析维度 | 具体内容 | 判断)
- 主力资金动向、筹码结构、抛压与承接、板块联动
- 1段总结(30-50字)
4.4 操作策略分析
独立card,格式:1个操作参数汇总框 + 1个大表格 + 1段话。
① 操作参数汇总框(metric-pills 风格,放在表格上方):
<div class="strategy-summary">
<div class="ss-item">
<span class="ss-label">操作建议</span>
<span class="ss-value {tag样式}">买入 / 观望 / 卖出</span>
</div>
<div class="ss-item">
<span class="ss-label">目标价</span>
<span class="ss-value" style="color: var(--c-accent); font-weight: 700;">XX.XX 元</span>
</div>
<div class="ss-item">
<span class="ss-label">持有周期</span>
<span class="ss-value">X-X 天 / 短线 / 中线</span>
</div>
<div class="ss-item">
<span class="ss-label">止盈点</span>
<span class="ss-value" style="color: var(--c-up); font-weight: 600;">XX.XX 元</span>
</div>
<div class="ss-item">
<span class="ss-label">止损点</span>
<span class="ss-value" style="color: var(--c-down); font-weight: 600;">XX.XX 元</span>
</div>
</div>操作建议标签样式规则:
- 买入 →
<span class="tag tag-red">(A股红=正面) - 观望 →
<span class="tag tag-yellow"> - 卖出/回避 →
<span class="tag tag-green">(A股绿=负面)
目标价:基于技术面压力位/支撑位 + 基本面估值综合判断,给出具体价格区间持有周期:短线(1-5天)/ 短中线(1-3周)/ 中线(1-3月),根据情绪周期阶段判断止盈点:前高压力位、关键技术位、或上涨X%后的分批止盈位止损点:关键支撑位(均线/颈线/前低),跌破即离场
② 表格5行(列头:策略类型 | 具体内容 | 判断):
- 观察窗口、涨停关注、回落关注、冲高关注、市场认可度
③ 1段总结(50-80字),格式:<p><strong>操作策略分析结论</strong>:...</p>
注意:原版操作策略非常精简——操作参数汇总框 + 1个表+1段话。不要展开成多个子表、买入条件框、卖出条件框、仓位配置表等。这些内容放到阶段5的"操作方案"中。
4.5 对比模式专用:多股横向对比分析
仅在对比模式下输出(普通模式跳过此节)。
独立card,包含以下内容:
① 综合对比表格(核心)
列头:对比维度 | 股票A | 股票B | (股票C) | 胜出
行维度(8-10行):
| 维度 | 说明 |
|---|---|
| 当前股价 | 最新收盘价 |
| 近5日涨跌幅 | 区间涨跌% |
| 主力资金 | 近5日主力净流入(万元) |
| 龙虎榜 | 是否上榜+净买入额 |
| 题材热度 | 催化因素强度(高/中/低) |
| 技术面 | MACD/KDJ信号汇总 |
| 量价关系 | 放量/缩量+健康度 |
| 情绪周期 | 启动/加速/高潮/分化 |
| 上涨概率 | 各股概率% |
| 综合评分 | 1-10分,加粗最高分 |
胜出列着色:每行胜出方用红色高亮(<span style="color: var(--c-up); font-weight: 700;">XX</span>)。
② 各股独立操作参数汇总框
复用 4.3 的 .strategy-summary 组件,每只股票各1个,并排排列(display: flex; gap: 16px;)。
③ 1段对比结论(80-120字),格式:<p><strong>横向对比结论</strong>:综合XX个维度评估,{股票X}在题材/资金/技术面方面领先,推荐优先关注。{股票Y}在XX方面有优势,可作为备选。风险提示:XX。</p>
阶段5:总结者输出
总结者综合提问者和回答专家的全部输出,给出最终的概率量化和操作方案。
5.1 短期上涨/下跌概率逻辑分析(核心!)
概率盒:
- 短期上涨概率:XX%
- 短期下跌概率:(100-XX)%
支持上涨的逻辑因素(.logic-bull区块,<ol>列表):
- 5条,每条1句话(50-80字)
- 格式:
<li><strong>因素名称</strong>(⭐评级):具体说明</li> - 用
<ol>有序列表,不用表格(原版样式)
支持下跌的逻辑因素(.logic-bear区块,<ol>列表):
- 5条,每条1句话(50-80字)
- 格式同上
概率对比综合分析(表格):
- 维度 / 上涨概率XX% / 下跌概率XX% / 关键平衡点
- 4行:核心逻辑、次要逻辑、辅助逻辑、综合判断
5.2 可落地操作方案
1. 当前状态评估(sub-card + 表格):
- 3行:是否适合参与 / 当前风险收益比 / 最佳操作策略
- 列头:评估项目 / 评估结果 / 判断理由
2. 参与时机判断(sub-card):
"什么情况下可以参与"(5条,表格:序号/参与条件/验证方式)"什么情况下应该观望"(5条,表格:序号/观望条件/验证方式)
3. 具体操作策略(sub-card):
仓位配置(表格:批次/仓位/买入条件/说明)买入时机(表格:时间区间/价格区间/买入条件/操作建议)卖出策略(表格:策略类型/触发条件/操作建议/价格点位)
4. 风险应对预案(sub-card):
"如果上涨"(表格:场景/判断标准/应对策略/后续操作)"如果下跌"(表格:场景/判断标准/应对策略/后续操作)"如果横盘"(表格:场景/判断标准/应对策略/后续操作)
5. 关键监控指标(sub-card + 表格):
- 5条,列头:序号 / 监控指标 / 监控频率 / 预警阈值 / 应对策略
5.3 对比模式专用:排名与推荐
仅在对比模式下输出(普通模式跳过此节)。
① 概率排名表
| 排名 | 股票 | 上涨概率 | 期望涨幅 | 综合评分 | 推荐级别 |
|---|---|---|---|---|---|
| 1 | XX | 65% | +3.2% | 8.5/10 | 优先关注 |
| 2 | YY | 55% | +1.8% | 7.2/10 | 可关注 |
| 3 | ZZ | 45% | +0.5% | 6.0/10 | 观望 |
推荐级别着色:
- 优先关注 →
<span class="tag tag-red">(红) - 可关注 →
<span class="tag tag-yellow">(黄) - 观望 →
<span class="tag tag-green">(绿)
② 最终推荐(1段话,80-120字) 格式:<p><strong>最终推荐</strong>:综合评估,{股票X}在XX方面领先,是当前最佳选择,建议XX价位介入,止损XX。{股票Y}作为备选,等XX信号确认后再考虑。{股票Z}当前不具备明显优势,建议观望。</p>
5.4 最终结论(.conclusion区块)
必须是5个<p>段落,用<br>分隔,对齐原版格式和字数:
- 核心观点一句话总结(80-120字):涨跌判断 + 操作方向
- 下周能上涨多少钱的判断(80-120字):价格区间 + 涨幅 + 条件
- 主升浪vs超跌反弹判断(100-150字):定性判断 + 3-4个理由
- 操作建议(80-120字):具体价位 + 仓位 + 止损
- 风险控制(80-120字):止损位 + 关键监控指标
格式:<p><strong>标题</strong>:内容</p>,每段用<br>分隔。
5.4 强制性风险警示
⚠️ 风险提示:以上分析仅供参考,不构成任何投资建议,股市有风险,投资需谨慎阶段6:HTML报告生成(拆分生成 + 合并)
将分析结果写入HTML文件。采用拆分生成策略,避免单次生成内容过大导致卡住。
⚠️ 为什么拆分生成?
单次 write_to_file 生成完整 HTML 报告(~500行/40KB)容易超时卡住。拆分为 3 个部分分别生成,每次只需 ~150 行,稳定可靠。
执行流程(共6步)
步骤6a: write_to_file report_header.html ← 复制模板 + 替换占位符
步骤6b: write_to_file part1.html ← 章节1-3(核心问题/搜索汇总/最热资讯)
步骤6c: write_to_file part2.html ← 章节4-6(多维度分析/K线量价/操作策略)
步骤6d: write_to_file part3.html ← 章节7-9(概率分析/操作方案/最终结论)
步骤6d.5: execute_command validate_report.py ← 反编造自动扫描(🛑STOP gate)
步骤6e: execute_command merge_report.py ← 合并为最终报告步骤6a:生成头部(复制模板 + 替换占位符)
从 templates/report_header.html 读取内容,替换以下占位符后写入工作目录:
| 占位符 | 替换为 | 示例 |
|---|---|---|
{{STOCK_NAME}} | 股票名称 | 赣锋锂业 |
{{REPORT_TITLE}} | 报告标题 | 深度分析报告 |
{{CSS_PATH}} | CSS文件绝对路径(file:/// 协议) | file:///{SKILL_DIR}/references/report_style.css |
{{HEADER_TITLE}} | header主标题 | 赣锋锂业(002460.SZ) – 下周上涨空间深度分析 |
{{HEADER_SUBTITLE}} | header副标题 | 分析日期:2026-04-02 | 当前股价:77.31元 | 板块:锂电池/锂矿 |
{{HEADER_INFO}} | header信息行 | 分析框架:技术面 + 资金面 + 情绪面 | 数据来源:finance-data-retrieval + 联网搜索 |
步骤6b:生成 part1.html(章节0-3,约130-160行)
包含以下4个章节的完整HTML(含 card + card-header + card-body):
<!-- 0. 投研摘要(v3.4.0 新增) -->
<div class="card" id="snapshot">...</div>
<!-- 1. 核心问题 -->
<div class="card" id="core">...</div>
<!-- 2. 搜索资讯汇总 -->
<div class="card" id="search">...</div>
<!-- 3. 最热资讯 -->
<div class="card" id="hot">...</div>填充内容来源:
- #snapshot(新增):
- 使用
.fin-snapshot容器,内含 2 行指标 - 第1行(行情数据,复用
.finance-bar组件):- 当前股价、近5日涨跌幅、主力资金净流入、换手率
- 第2行(投研数据,复用
.finance-bar组件):- 近4季营收增速、ROE(TTM)、资产负债率、经营现金流/净利润比、下一个催化剂
- 所有数据来自阶段 2.5 获取的 API 数据和搜索结果
- 涨跌数字用 A 股红涨绿跌着色
- 不要超过10个指标——这个卡片的定位是"10秒看完全貌",信息密度>全面
- 使用
- #core:
- 1段核心问题描述(
<p><strong>...</strong></p>,80-150字) - 1个sub-card(关键关注点):
<h4>📊 关键关注点</h4>+<ul>列表5条 - 1个sub-card(思考逻辑):
<h4>💡 思考逻辑</h4>+<ul>列表4-5条,每条1句话 - 1个sub-card(风险提示):
<h4>⚠️ 风险提示</h4>+<ul>列表4-5条 - 不要问题判断机制表格、不要"3个递进问题"sub-card
- 1段核心问题描述(
- #search:搜索概况表 + 3个sub-card(每轮搜索4条
<ul>列表要点,不加额外总结段落) - #hot:TOP 5表格(6列:热度/标题/来源/时间/关联度/对信息的整理分析),分析列50-80字
步骤6c:生成 part2.html(章节4-6 + 财务快照 + 催化剂,约170-200行)
<!-- 4. 多维度分析 -->
<div class="card" id="multi">...</div>
<!-- 4.1 财务快照(v3.4.0) -->
<div class="card" id="finance">...</div>
<!-- 4.2 催化剂日历(v3.4.0) -->
<div class="card" id="catalyst">...</div>
<!-- 5. K线与量价分析 -->
<div class="card" id="kline">...</div>
<!-- 6. 操作策略 -->
<div class="card" id="strategy">...</div>- #multi:5个sub-card(热点题材/板块个股/情绪周期/技术面/资金面),每个=1个table+1段话
- 热点题材表格列头:分析维度 | 具体内容(2列,不是3列)
- 板块个股表格列头:涨幅/表现 | 标的代码 | 标的名称 | 核心逻辑 | 辨识度(5列)
- 情绪周期:4个阶段(启动期/加速期/高潮期/分化期)
- 技术面:5个指标(MACD/KDJ/RSI/均线系统/成交量,不加BOLL)
- #finance(v3.4.0 新增):财务快照 sub-card(.accent-green),表格6行+1段财务健康判定
- #catalyst(v3.4.0 新增):催化剂日历 card,表格5列(时间节点/催化事件/影响方向/确定性/数据来源),3-7行+1段展望
- #kline:3个sub-card(K线形态/量价关系/资金博弈),每个=1个table+1段话
- #strategy:1个操作参数汇总框 + 1个大表格 + 1段话
- 汇总框5项:操作建议(买入/观望/卖出)、目标价、持有周期、止盈点、止损点
- 表格5行:观察窗口/涨停关注/回落关注/冲高关注/市场认可度
- 不要展开成多个子表、买入条件框、卖出条件框等
步骤6d-1(仅对比模式):生成对比专属章节 HTML
仅在对比模式下,在步骤 6d 之前插入以下对比专属内容(可合并到 part2.html 末尾或作为独立 part):
<!-- ========== 对比分析(仅对比模式) ========== -->
<div class="card" id="compare">
<div class="card-header">
<span>📊 多股横向对比分析</span>
<span class="compare-badge">VS 对比模式</span>
</div>
<div class="card-body">
<h4 class="section-title">综合对比(10维度评估)</h4>
<table class="compare-table">
<thead>
<tr>
<th>对比维度</th>
<th>{股票A}</th>
<th>{股票B}</th>
<th>胜出</th>
</tr>
</thead>
<tbody>
<tr>
<td>当前股价</td>
<td>XX.XX元</td>
<td>XX.XX元</td>
<td>-</td>
</tr>
<tr>
<td>近5日涨跌幅</td>
<td><span style="color: var(--c-up);">+X.X%</span></td>
<td><span style="color: var(--c-down);">-X.X%</span></td>
<td><span style="color: var(--c-up); font-weight: 700;">{股票A}</span></td>
</tr>
<!-- ... 其余8行维度 -->
<tr>
<td>综合评分</td>
<td><span style="color: var(--c-up); font-weight: 700;">8.5</span></td>
<td>7.2</td>
<td><span style="color: var(--c-up); font-weight: 700;">{股票A}</span></td>
</tr>
</tbody>
</table>
<h4 class="section-title">各股操作参数</h4>
<div class="compare-strategies">
<div class="strategy-summary">
<!-- 股票A 的 strategy-summary,复用 4.3 模板 -->
<div class="ss-item">
<span class="ss-label">操作建议</span>
<span class="ss-value"><span class="tag tag-red">买入</span></span>
</div>
<!-- ... 其余4项 -->
</div>
<div class="strategy-summary">
<!-- 股票B 的 strategy-summary -->
</div>
</div>
<p><strong>横向对比结论</strong>:综合10个维度评估,{股票X}在题材/资金/技术面方面领先,推荐优先关注。{股票Y}在XX方面有优势,可作为备选。风险提示:XX。</p>
</div>
</div>对比排名表(放在 part3.html 的 #plan 之前):
<div class="card" id="rank">
<div class="card-header">🏆 概率排名与推荐</div>
<div class="card-body">
<table class="rank-table">
<thead>
<tr>
<th>排名</th>
<th>股票</th>
<th>上涨概率</th>
<th>期望涨幅</th>
<th>综合评分</th>
<th>推荐级别</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>{股票A}</td>
<td><span style="color: var(--c-up);">65%</span></td>
<td><span style="color: var(--c-up);">+3.2%</span></td>
<td>8.5</td>
<td><span class="tag tag-red">优先关注</span></td>
</tr>
<tr>
<td>2</td>
<td>{股票B}</td>
<td>55%</td>
<td>+1.8%</td>
<td>7.2</td>
<td><span class="tag tag-yellow">可关注</span></td>
</tr>
</tbody>
</table>
<p><strong>最终推荐</strong>:综合评估,{股票X}在XX方面领先...</p>
</div>
</div>步骤6d:生成 part3.html(章节7-9,约150-180行)
<!-- 7. 概率分析 -->
<div class="card" id="prob">...</div>
<!-- 8. 操作方案 -->
<div class="card" id="plan">...</div>
<!-- 9. 最终结论 -->
<div class="conclusion" id="conclusion">...</div>
<div class="risk-tip">...</div>填充内容来源:
- #prob:
- 概率盒(prob-row + prob-up + prob-down)
- .logic-bull区块:
<h4>✅ 支持上涨的逻辑因素</h4>+<ol>列表5条(用列表,不用表格) - .logic-bear区块:
<h4>⚠️ 支持下跌的逻辑因素</h4>+<ol>列表5条 - 概率对比综合分析表(4列×4行)
- 不要情景分析表、不要加权涨幅计算表
- #plan:
- 5个sub-card(状态评估/参与时机/操作策略/风险预案/监控指标)
- #conclusion:
- 5个
<p>段落,用<br>分隔 - 对齐原版字数(每段80-120字)
- 格式:
<p><strong>标题</strong>:内容</p>
- 5个
步骤6d.5:反编造自动扫描(🛑STOP gate · 阻断合并)
执行 validate_report.py 扫描 part1/2/3 三个 HTML 文件,检测反编造硬约束违规:
python {SKILL_DIR}/validate_report.py part1.html part2.html part3.html
echo "Exit code: $?" # 0=通过可合并,1=阻断需修复扫描规则:
| 严重违规(阻断) | 警告(标记) |
|---|---|
| 包含"推算"字样 | 包含"暂不可获取"标记 |
| 包含"估算"字样 | 包含"来源待验证"标记 |
| 包含"约XX(单位)"格式 | |
| 包含"约XX元/%"格式 | |
| 包含"XX左右/大概/估计/预测约"格式 |
允许的例外(合规标注):由XX推算(公式:...) 或 已知XX推算 格式 — 必须给出推算公式。
命中阻断后的修复路径:
- 数据缺失字段 → 重新执行阶段2.5数据补充,确保API调用成功
- API仍失败 → 写"暂不可获取",禁止用"推算/估算/约XX"填充
- 已知数据数学推算 → 改为
由XX推算(公式: ...)标注 - 修复后重跑
validate_report.py,exit code 0 才能进入步骤6e
为什么需要这一步:实测发现即使有反编造硬约束,LLM仍可能在报告生成时偷懒写"约XX"敷衍。自动扫描器把"软约束"升级为"硬阻断",确保每份报告都通过反编造验证。
步骤6e:合并报告
仅当步骤6d.5验证通过(exit code 0)后才执行:
# SKILL_DIR 为技能安装目录,替换为实际路径
# Windows: %USERPROFILE%.workbuddyskillsMiX-stock-analysis-king
# macOS/Linux: ~/.workbuddy/skills/MiX-stock-analysis-king
python {SKILL_DIR}/templates/merge_report.py ^
--output "{输出路径}.html" ^
--header "report_header.html" ^
--footer "{SKILL_DIR}/templates/report_footer.html" ^
--parts part1.html part2.html part3.html合并脚本会自动拼接 header + parts + footer,输出完整报告。
CSS 样式规范(Bloomberg Terminal 级设计系统 v3.0)
CSS 已外置到 references/report_style.css,不要在HTML中内嵌 <style> 标签。详细规范见 references/HTML_FORMAT_STANDARD.md。
核心原则:
- A股红涨绿跌:上涨=红色
--c-up,下跌=绿色--c-down - 单一语义→单一颜色:禁止同一颜色表达两个含义
- 所有颜色使用 CSS 变量,禁止硬编码颜色值
7色语义映射:
| 语义 | CSS变量 | 使用场景 |
|---|---|---|
| 上涨/正面/买入 | --c-up (#ef4444 红) | 上涨概率、看多信号、买入评级 |
| 下跌/负面/卖出 | --c-down (#22c55e 绿) | 下跌概率、看空信号、卖出评级 |
| 强调/预警 | --c-accent (#f59e0b 琥珀) | 关键数字、风险提示、价格标注 |
| 技术面 | --c-tech (#3b82f6 蓝) | 技术指标、导航、数据面板 |
| 策略/结论 | --c-strategy (#8b5cf6 紫) | 操作策略、核心结论 |
| 基本面 | --c-fundamental (#06b6d4 青) | 财务数据、子标题 |
| 次要信息 | --text-muted (#64748b 灰) | 时间戳、辅助说明 |
常用样式类:
| 用途 | CSS类名 | 实际颜色(A股) |
|---|---|---|
| 上涨/看多 | .highlight | 红色 |
| 下跌/看空 | .highlight-red | 绿色 |
| 看多标签 | .tag-red | 红底红字 |
| 看空标签 | .tag-green | 绿底绿字 |
| 中性标签 | .tag-yellow | 黄底黄字 |
| 支持上涨逻辑块 | .logic-bull | 红色左边框(看多=红) |
| 支持下跌逻辑块 | .logic-bear | 绿色左边框(看空=绿) |
| 概率盒-上涨 | .prob-box.prob-up | 红色边框+发光 |
| 概率盒-下跌 | .prob-box.prob-down | 绿色边框+发光 |
| 进度条-上涨 | .progress-fill.fill-green | 红橙渐变 |
| 进度条-下跌 | .progress-fill.fill-red | 绿色渐变 |
| 核心结论-观点 | .conclusion-block.cb-primary | 策略紫 |
| 核心结论-上涨空间 | .conclusion-block.cb-green | 上涨红 |
| 核心结论-主升浪 | .conclusion-block.cb-blue | 技术蓝 |
| 核心结论-操作 | .conclusion-block.cb-yellow | 强调琥珀 |
| 核心结论-风险 | .conclusion-block.cb-red | 下跌绿 |
| 总结框 | .summary-box.sum-red/blue/purple/yellow/green | 5色可选 |
| 金融数据-上涨 | .fin-value.up | 红色(等宽数字) |
| 金融数据-下跌 | .fin-value.down | 绿色(等宽数字) |
| 风险提示 | .risk-tip | 琥珀色边框+文字 |
| 章节标题 | .section-title | 青色 |
| 子卡片语义边框 | .sub-card.accent-red/blue/green/yellow/purple | 5色左边框 |
行内着色示例:
<span style="color: var(--c-up); font-weight: 600;">+5.23%</span> <!-- 上涨数字 -->
<span style="color: var(--c-down); font-weight: 600;">-2.18%</span> <!-- 下跌数字 -->
<span style="color: var(--c-accent); font-weight: 600;">77.31 元</span> <!-- 关键价格 -->
<span style="color: var(--c-fundamental);">2025Q4</span> <!-- 基本面数据 -->概率盒子 HTML 模板
<div class="prob-row">
<div class="prob-box prob-up">
<h4>短期上涨概率</h4>
<div class="prob-num">XX%</div>
<p>一句话概括上涨核心逻辑</p>
</div>
<div class="prob-box prob-down">
<h4>短期下跌概率</h4>
<div class="prob-num">XX%</div>
<p>一句话概括下跌核心逻辑</p>
</div>
</div>文件命名规则
{股票名}_{报告类型}_{YYYYMMDD}_P{上涨概率}T{目标价}.html例如:赣锋锂业_深度分析报告_20260401_P65_T82.html
v3.4.0 变更:文件名末尾追加 P{概率}T{目标价} 标记,方便日后回顾验证分析准确性。
P= 上涨概率(取整,如 P65 = 65%)T= 目标价(取整,如 T82 = 82元)- 如果是对比模式,取推荐标的的概率和目标价
质量检查清单(合并版 · 生成HTML后必检)
A. 内容结构(阶段3/4/5输出合规)
- [ ] 三轮搜索全部完成(质量预检后上限4次)?
- [ ] 核心问题为1段话(不是表格+3个sub-card)?
- [ ] 关键关注点/思考逻辑/风险提示用
<ul>列表(不是表格)? - [ ] 思考逻辑每条只有1句话(50-70字)?
- [ ] 回答专家输出5个分析子模块,每个只有1段总结?
- [ ] 情绪周期只有4个阶段(启动/加速/高潮/分化)?
- [ ] 操作策略为1个汇总框+1个表+1段话?
- [ ] 操作参数汇总框包含5项(操作建议/目标价/持有周期/止盈点/止损点)?
- [ ] 概率逻辑因素用
<ol>列表(不是表格)?无情景分析表/加权涨幅计算表? - [ ] 操作方案包含仓位配置、买卖策略、风险预案?
- [ ] 最终结论5个段落,每段80-120字?
- [ ] 概率数字合理(上涨+下跌=100%)?
- [ ] 包含强制性风险警示(.risk-tip)?
B. HTML设计系统(Bloomberg Terminal v3.0)
- [ ] 10个章节全部存在且顺序正确(含投研摘要 #snapshot)?
- [ ] CSS外链引用正常(file:/// 绝对路径),无内嵌
<style>? - [ ] A股红涨绿跌:上涨数字/信号/标签用红色,下跌用绿色?
- [ ] 概率盒:.prob-up 红(上涨)、.prob-down 绿(下跌)?
- [ ] 逻辑块:.logic-bull 红(看多)、.logic-bear 绿(看空)?
- [ ] 标签:.tag-red 红(看多)、.tag-green 绿(看空)、.tag-yellow 黄(中性)?
- [ ] 进度条:.fill-green 红橙渐变(上涨)、.fill-red 绿色渐变(下跌)?
- [ ] 结论区块:cb-primary(紫)/cb-green(红)/cb-blue(蓝)/cb-yellow(琥珀)/cb-red(绿)?
- [ ] 所有颜色用CSS变量,无硬编码颜色值?
- [ ] 所有表格有表头且样式一致,使用正确图标?
- [ ] 合并后文件大小合理(~25-35KB)?
- [ ] 阅读进度条和回到顶部按钮正常?
C. 对比模式专属(仅对比模式时检查)
- [ ] 正确识别2只以上股票?
- [ ] 搜索轮次含各股独立搜索+联合板块搜索?
- [ ] 阶段4输出综合对比表格(10行维度)?每行有胜出列(红色高亮)?
- [ ] 各股有独立操作参数汇总框?
- [ ] 阶段5有概率排名表(含推荐级别标签)?
- [ ] 最终推荐明确指出首选标的和备选标的?
模板文件位置
templates/
├── report_header.html ← 头部模板(sidebar + header + 阅读进度条)
├── report_footer.html ← 尾部模板(导航JS + 阅读进度条 + 回到顶部)
└── merge_report.py ← 合并脚本
references/
├── report_style.css ← 外置CSS样式(Bloomberg Terminal 级 v3.0)
└── HTML_FORMAT_STANDARD.md ← 格式标准文档(设计哲学 + 组件规范 + 质量清单)数据填充要点
- 所有表格数据来自实际搜索结果和分析,不可编造
- 概率数字(上涨/下跌%)必须有逻辑支撑,不可随意拍
- 价格点位、仓位比例、止损位必须具体可执行
- 进度条宽度用百分比 style(如
style="width: 60%;")
阶段7:展示报告
HTML文件生成后,使用 preview_url 工具在IDE内置浏览器中预览报告。
同时在回复中提供简洁的文字总结:
- 分析标的
- 核心结论(1-2句话)
- 上涨/下跌概率
- 操作建议
- HTML报告路径
踩坑经验
详细踩坑经验已迁移至
references/PITFALLS.md,以下仅保留最高频的 3 条速查。
- ts_code 必须带交易所后缀(.SH/.SZ/.BJ),日期格式 YYYYMMDD
- moneyflow 的 fields 传空字符串 "",item 是数组不是 dict
- income 必须加 start_date,否则返回 2017 年历史数据
版本变更记录
完整变更记录见
CHANGELOG.md
注意事项
- 不可跳过搜索阶段——所有分析必须基于实时搜索数据
- 不可跳过任何阶段——阶段3/4/5必须独立输出,禁止合并跳过直接写HTML
- 不可凭空编造数据——股价、资金流向、技术指标等必须来自搜索结果(且需标注来源)或 finance-data-retrieval API 返回的真实数据。非白名单信源的信息必须标注"来源待验证"
- 搜索安全红线——严格 3 次搜索(质量预检后上限4次);搜索关键词必须带时间限定;优先采信官方和权威财经信源
- 概率量化必须合理——上涨+下跌概率必须=100%,每个因素必须有贡献度
- 操作方案必须可执行——具体到价格点位、仓位比例、时间窗口
- 风险警示必须包含——每次输出都必须有"不构成投资建议"的免责声明
反例与黑名单(禁止行为清单)
以下行为会严重降低分析质量或误导用户,出现即视为本次执行失败。每条附"为什么禁止"和"正确做法"。
| # | 禁止行为 | 为什么禁止 | 正确做法 |
|---|---|---|---|
| 1 | 编造或"推算/估算"数据 | 误导用户决策,违反反编造硬约束;实测发现财务快照标"推算"、技术指标标"估算" | 数据缺失时写"暂不可获取"留空;唯一例外是可由已知数据数学推算且标注公式 |
| 2 | 跳过阶段3/4/5直接写HTML | 三个角色(提问者/回答专家/总结者)的独立思考是分析深度保障;合并跳过=流水账 | 每个阶段完整输出后再进下一阶段,HTML只是把阶段输出格式化 |
| 3 | 搜索次数超4次 | 破坏搜索安全红线,密集请求易被封 | 3轮基础+1轮质量预检补充,上限4次;仍不足则降级处理 |
| 4 | 用搜索定性描述充当定量数据 | "涨价了""资金流入"是定性,不能当具体涨幅/金额写入表格 | 定量数据必须来自API(daily/moneyflow等),搜索只提供定性背景 |
| 5 | 概率拍脑袋无逻辑支撑 | 上涨55%/下跌45%不是随便写的,必须有5+5条逻辑因素和综合分析表 | 每个概率数字必须对应logic-bull/logic-bear各5条+概率对比表4行 |
| 6 | 操作方案只有方向无点位 | "建议低吸"不可执行,用户不知道什么价位买、买多少、止损在哪 | 必须给出具体价格区间+仓位比例+止盈止损点位+持有周期 |
| 7 | 忽略数据来源标注 | 用户无法验证数据真伪,分析可信度归零 | API数据标"数据来源:BaoStock/AkShare/finance-data-retrieval",搜索数据标信源,非白名单标"来源待验证" |
| 8 | HTML报告硬编码颜色值 | 破坏CSS变量体系,主题不一致 | 所有颜色用var(–c-up)等CSS变量,禁止#ef4444硬编码 |
| 9 | 对比模式不输出对比表格和排名 | 对比模式的核心价值就是横向比较,缺失则退化为多个单股报告 | 必须输出10维度对比表+概率排名表+最终推荐 |
| 10 | 阶段6单次生成完整HTML | 500行/40KB单次write易超时卡住 | 拆分为header+part1/2/3四部分分别生成,再merge_report.py合并 |