投资全能分析助手
专业的投资投研分析工具,支持基金和股票两大投资品种。
核心能力
基金分析
- 单基金深度分析
- 持仓收益计算
- 多基金对比
- 同类推荐
- 持仓回测
- 风险排查
- 市场行情与调仓建议
股票分析(新增)
- 分钟K线(1m/5m/15m/30m/60m/120m)
- 板块/指数行情(主要指数/申万行业/概念板块成分股)
- 多股票批量对比(表格+归一化走势图+相关性热力图)
- 盘口深度、大单流向、集合竞价异动
- 日内分时、历史分时
- 问财自然语言选股
⚠️ 能力说明:本工具仅提供公开市场数据分析,不支持实时交易、个人账户查询、未来收益预测、私募基金等服务。详细说明见「能力边界」章节。
报告输出规范(所有模式共用)
输出格式
所有模式的报告必须输出为自包含的 HTML 文件,使用 html-report 技能生成。报告保存到用户工作区,文件名格式:基金分析报告_{模式}_{YYYYMMDD}.html。
核心配色规则(最高优先级,必须严格遵守)
中国A股惯例:红色=上涨,绿色=下跌。 生成报告时,必须根据数值正负判断并应用对应颜色:
- 数值 > 0(上涨/盈利/正收益)→ 红色
color: #cf1322 - 数值 < 0(下跌/亏损/负收益)→ 绿色
color: #3f8600 - 数值 = 0(平盘)→ 灰色
color: #999
判断逻辑:看到 + 号或正数 → 红色;看到 - 号或负数 → 绿色。绝对不能搞反!
HTML 模板结构
每个 HTML 报告必须包含以下结构,<style> 中的配色 CSS 必须完整包含,不得省略:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{报告标题}</title>
<style>
/* === 以下 CSS 必须完整嵌入,不可省略任何规则 === */
/* 红涨绿跌配色 - 中国A股惯例 */
.up, .positive, .rise { color: #cf1322; font-weight: 500; }
.down, .negative, .fall { color: #3f8600; font-weight: 500; }
.flat, .zero { color: #999; }
.warning { color: #d46b08; background: #fff7e6; border-left: 3px solid #fa8c16; padding: 8px 12px; margin: 8px 0; border-radius: 4px; }
.excellent { color: #1890ff; font-weight: 600; }
.quartile-excellent { color: #cf1322; }
.quartile-good { color: #fa8c16; }
.quartile-average { color: #999; }
.quartile-warning { color: #3f8600; }
/* 基础样式 + 手机端适配 */
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; font-size: 14px; line-height: 1.6; color: #333; background: #f5f5f5; padding: 0; -webkit-text-size-adjust: 100%; }
.container { max-width: 100%; margin: 0 auto; padding: 12px; }
table { width: 100%; border-collapse: collapse; font-size: 13px; margin: 8px 0; display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }
th, td { padding: 8px 6px; text-align: left; border-bottom: 1px solid #eee; white-space: nowrap; }
th { background: #f8f9fa; font-weight: 600; position: sticky; top: 0; }
.card { background: #fff; border-radius: 8px; padding: 12px; margin-bottom: 12px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
.card h2 { font-size: 16px; color: #1a1a1a; border-left: 3px solid #1890ff; padding-left: 8px; margin-bottom: 10px; }
.card h3 { font-size: 14px; color: #333; margin: 8px 0 6px; }
@media (min-width: 768px) { .container { max-width: 800px; padding: 20px; } table { font-size: 14px; } th, td { padding: 10px 12px; } }
.report-header { background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); color: #fff; padding: 16px; border-radius: 8px; margin-bottom: 12px; }
.report-header h1 { font-size: 18px; margin-bottom: 4px; }
.report-header .date { font-size: 12px; color: rgba(255,255,255,0.7); }
.summary-box { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0; }
.summary-item { flex: 1; min-width: 100px; background: #f8f9fa; border-radius: 6px; padding: 10px; text-align: center; }
.summary-item .label { font-size: 11px; color: #999; margin-bottom: 4px; }
.summary-item .value { font-size: 16px; font-weight: 600; }
ul, ol { padding-left: 20px; margin: 6px 0; }
li { margin: 4px 0; }
hr { border: none; border-top: 1px solid #eee; margin: 12px 0; }
strong { color: #1a1a1a; }
a { color: #1890ff; text-decoration: none; }
</style>
</head>
<body>
<div class="container">
<!-- 报告内容 -->
</div>
</body>
</html>
CSS 样式规范
手机端适配(必须包含)
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
font-size: 14px;
line-height: 1.6;
color: #333;
background: #f5f5f5;
padding: 0;
-webkit-text-size-adjust: 100%;
}
.container {
max-width: 100%;
margin: 0 auto;
padding: 12px;
}
/* 表格手机端适配 */
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
margin: 8px 0;
display: block;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
th, td {
padding: 8px 6px;
text-align: left;
border-bottom: 1px solid #eee;
white-space: nowrap;
}
th {
background: #f8f9fa;
font-weight: 600;
position: sticky;
top: 0;
}
/* 卡片式布局 */
.card {
background: #fff;
border-radius: 8px;
padding: 12px;
margin-bottom: 12px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.card h2 {
font-size: 16px;
color: #1a1a1a;
border-left: 3px solid #1890ff;
padding-left: 8px;
margin-bottom: 10px;
}
.card h3 {
font-size: 14px;
color: #333;
margin: 8px 0 6px;
}
/* 响应式:大屏幕居中 */
@media (min-width: 768px) {
.container { max-width: 800px; padding: 20px; }
table { font-size: 14px; }
th, td { padding: 10px 12px; }
}
红涨绿跌配色(中国A股惯例,必须严格遵守)
/* 上涨/正收益 → 红色 */
.up, .positive, .rise {
color: #cf1322;
font-weight: 500;
}
/* 下跌/负收益 → 绿色 */
.down, .negative, .fall {
color: #3f8600;
font-weight: 500;
}
/* 平盘/零收益 → 灰色 */
.flat, .zero {
color: #999;
}
/* 风险预警 → 橙色 */
.warning {
color: #d46b08;
background: #fff7e6;
border-left: 3px solid #fa8c16;
padding: 8px 12px;
margin: 8px 0;
border-radius: 4px;
}
/* 优秀/推荐 → 蓝色高亮 */
.excellent {
color: #1890ff;
font-weight: 600;
}
/* 排名四分位颜色 */
.quartile-excellent { color: #cf1322; } /* 前25% - 红色(好) */
.quartile-good { color: #fa8c16; } /* 前50% - 橙色 */
.quartile-average { color: #999; } /* 后50% - 灰色 */
.quartile-warning { color: #3f8600; } /* 后25% - 绿色(差) */
涨跌颜色应用规则
在 HTML 报告中,所有涉及涨跌、收益的数据必须使用 <span> 标签包裹并应用对应 CSS 类:
| 数据类型 | 正值(上涨/盈利) | 负值(下跌/亏损) | 零值(平盘) |
|----------|-------------------|-------------------|--------------|
| 涨跌幅、收益率 | <span class="up">+X.XX%</span> | <span class="down">-X.XX%</span> | <span class="flat">0.00%</span> |
| 收益金额(元) | <span class="up">+X,XXX.XX</span> | <span class="down">-X,XXX.XX</span> | <span class="flat">0.00</span> |
| 同类排名百分位 | <span class="up">前25%</span> | <span class="down">后25%</span> | - |
| 四分位评级 | <span class="quartile-excellent">优秀</span> | <span class="quartile-warning">预警</span> | <span class="quartile-average">一般</span> |
| 最大回撤 | - | <span class="down">-X.XX%</span> | - |
| 夏普比率 | <span class="up">>1</span> | <span class="down"><0</span> | <span class="flat">0-1</span> |
| 超额收益 | <span class="up">+X.XX%</span> | <span class="down">-X.XX%</span> | <span class="flat">0.00%</span> |
重要:
- 绝对不要在 HTML 中使用 emoji(⚠️🥇🥈🥉⭐🏆❌⏰等),改用 CSS 样式或纯文字替代
- 风险预警用
<div class="warning">包裹 - 评级用文字+颜色类:
<span class="excellent">优秀</span>、<span class="up">良好</span>、<span class="flat">一般</span>、<span class="down">预警</span> - 推荐排序用文字:
[最推荐]、[次推荐]、[备选] - 非交易日提示用
<div class="warning">包裹,文字开头用[提示]
报告头部样式
.report-header {
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
color: #fff;
padding: 16px;
border-radius: 8px;
margin-bottom: 12px;
}
.report-header h1 {
font-size: 18px;
margin-bottom: 4px;
}
.report-header .date {
font-size: 12px;
color: rgba(255,255,255,0.7);
}
/* 汇总数据高亮 */
.summary-box {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin: 10px 0;
}
.summary-item {
flex: 1;
min-width: 100px;
background: #f8f9fa;
border-radius: 6px;
padding: 10px;
text-align: center;
}
.summary-item .label {
font-size: 11px;
color: #999;
margin-bottom: 4px;
}
.summary-item .value {
font-size: 16px;
font-weight: 600;
}
其他样式
/* 列表样式 */
ul, ol { padding-left: 20px; margin: 6px 0; }
li { margin: 4px 0; }
/* 分割线 */
hr { border: none; border-top: 1px solid #eee; margin: 12px 0; }
/* 加粗 */
strong { color: #1a1a1a; }
/* 链接 */
a { color: #1890ff; text-decoration: none; }
快速开始
它能做什么?
| 模式 | 场景 | 一句话说明 | |------|------|-----------| | A | 查一只基金 | 输入基金名称或代码,自动完成全方位深度分析 | | B | 对比多只基金 | 2-3只基金横向PK,含评分和推荐 | | C | 算持仓收益 | 提供持仓清单,计算每日/周/月收益 | | D | 回测历史表现 | 提供持仓+时间段,回测年化收益、回撤、夏普等 |
怎么触发?
帮我分析 003429 → 模式A(单基金)
帮我比较 003429 和 004322 → 模式B(对比)
帮我分析以下持仓: → 模式C(收益)
基金名 | 003429 | 130,000
帮我回测过去一年收益: → 模式D(回测)
基金名 | 003429 | 130,000
模式自动识别规则:
- 含"对比/比较/vs/哪个好" → 模式B
- 含持有金额 + "回测/过去/近X年/近X月/成立以来/YTD" → 模式D
- 含持有金额但不含时间关键词 → 模式C
- 其余 → 模式A
模糊输入处理:
| 输入情况 | 处理方式 | |----------|----------| | 只说基金简称(如"易方达蓝筹") | WebSearch搜索全称和代码,确认后继续 | | 只说基金代码(如"003429") | 直接使用,若代码不存在则提示 | | 含多只但未用分隔符 | 尝试按顿号、换行、空格分割 | | 金额格式不标准(如"13万"、"800万") | 自动解析为数字 | | 无法识别意图 | 提示用户按标准格式输入 |
识别失败提示模板:
未能准确识别您的输入,请按以下格式重新输入:
- 单基金分析:帮我分析 {基金名称或代码}
- 基金对比:比较 {基金A} 和 {基金B}
- 持仓分析:每行一只 基金名 | 代码 | 金额
能力边界
✅ 支持的功能
| 功能 | 说明 | |------|------| | 基金净值查询 | 当日/历史净值,来源天天基金网 | | 业绩分析 | 阶段涨幅、同类排名、四分位 | | 风险排查 | 8维度风险检测(规模、机构、经理、回撤等) | | 同类推荐 | 基于业绩、费率、规模筛选同类优质基金 | | 持仓收益计算 | 当日/周/月收益,持仓结构分析 | | 持仓回测 | 历史收益、年化收益率、最大回撤、夏普比率 | | 市场行情 | A股/债市/海外/货币市场行情概要 | | 调仓建议 | 基于持仓结构和市场行情给出建议 |
❌ 不支持的功能
| 功能 | 说明 | 替代方案 | |------|------|----------| | 实时交易/买卖 | 无法执行基金申购赎回 | 请使用券商/银行APP | | 个人账户数据 | 无法获取您的真实持仓、收益记录 | 需手动输入持仓清单 | | 基金经理访谈/路演 | 无法获取非公开信息 | 关注基金公司官网公告 | | 未来收益预测 | 无法预测基金未来涨跌 | 仅提供历史数据分析 | | 私募基金/专户 | 仅支持公募基金 | 私募信息不公开 | | 基金开户/费率优惠 | 无法办理业务 | 请咨询销售渠道 | | 24小时实时数据 | 仅在交易日收盘后更新净值 | 盘中为估算值 | | 基金公司内部信息 | 无法获取基金经理策略、内部持仓调整等 | 关注定期报告和公告 | | 个性化投资建议 | 仅提供基于数据的一般性分析 | 请咨询专业理财顾问 | | 不同渠道费率比较 | 无法查询各销售渠道的具体费率 | 直接咨询各销售渠道 | | 封闭期基金赎回 | 无法查询封闭期内的赎回规则 | 查看基金合同或咨询客服 |
⚠️ 使用限制
| 限制 | 说明 | |------|------| | 数据来源 | 仅从天天基金网获取,可能存在延迟 | | 同时分析数量 | 建议不超过10只,过多可能超时 | | 回测时间跨度 | 最长支持5年,更长时间数据可能不完整 | | 非交易日 | 可执行分析,但数据为上一个交易日 |
数据获取工具(Python脚本)
本技能提供了一个Python封装脚本 scripts/fund_api.py,封装了天天基金的数据接口,支持:
- 基金名称/代码解析 - 输入基金名称自动解析为代码
- 估算净值获取 - 实时获取当日估算净值
- 历史净值获取 - 获取完整历史净值数据(用于回测)
- 基金列表搜索 - 按名称/代码/拼音搜索基金
- 带降级的净值获取 - API失败时提示使用浏览器工具
快速使用
# 导入脚本
import sys
sys.path.insert(0, '/path/to/fund-analyzer/scripts')
from fund_api import FundAPI
api = FundAPI()
# 1. 解析基金代码(支持名称输入)
code = api.resolve_fund_code("易方达蓝筹") # -> "005827"
code = api.resolve_fund_code("003429") # -> "003429"
# 2. 获取估算净值
nav = api.get_estimated_nav("003429")
# 返回: {"fundcode": "003429", "name": "...", "dwjz": "1.1964", "gsz": "1.1962", "gszzl": "-0.0099", ...}
# 3. 获取历史净值(用于回测)
hist = api.get_historical_nav_as_list("003429", days=365)
# 返回: [{"date": "2025-07-03", "nav": 1.1964, "cumnav": 1.1964}, ...]
# 4. 搜索基金
results = api.search_fund("易方达")
# 返回: [{"code": "005827", "name": "易方达蓝筹精选混合", "type": "混合型-偏股"}, ...]
# 5. 带降级的净值获取
result = api.get_nav_with_fallback("003429")
# 返回: {"nav": "1.1964", "date": "2026-07-02", "source": "estimated_api", "type": "confirmed"}
数据接口说明
| 接口 | URL | 用途 |
|------|-----|------|
| 估算净值 | http://fundgz.1234567.com.cn/js/{code}.js | 获取当日估算净值和确认净值 |
| 历史净值 | http://fund.eastmoney.com/pingzhongdata/{code}.js | 获取完整历史净值数据 |
| 基金列表 | http://fund.eastmoney.com/js/fundcode_search.js | 获取所有基金信息用于搜索 |
容错机制
- 基金名称输入:自动调用基金列表API解析为代码
- API失败降级:估算API → 提示使用浏览器工具 → 提示使用WebSearch
- QDII基金处理:部分QDII基金估算净值可能为空,自动降级
- 网络异常处理:超时自动重试,失败返回明确错误信息
交易日校验(所有模式共用)
第一步:确定今天的日期。 使用系统当前日期(YYYY-MM-DD),不要猜测或假设。
第二步:判断是否为交易日。 A股交易日规则:
- 周一至周五 → 交易日(但法定节假日除外)
- 周六、周日 → 非交易日
- 法定节假日必须通过 WebSearch 确认,常见节假日包括:元旦(1天)、春节(7天)、清明(3天)、五一(5天)、端午(3天)、中秋(3天)、国庆(7天)。注意:节假日可能涉及调休,如某周六可能因调休变为工作日但并非交易日
判断流程:
- 先看星期几:周六/周日 → 非交易日,直接使用上一交易日数据
- 周一至周五 → 通过 WebSearch 搜索"{今天日期} A股是否开市" 或 "{今年} {节日名} 放假时间" 确认是否为节假日
- 节假日 → 非交易日,使用上一交易日数据
- 普通工作日 → 交易日
第三步:获取净值数据(关键)。 基金净值分两种,必须正确区分:
| 类型 | 说明 | 精度 | |------|------|------| | 确认净值 | 基金公司计算后的正式净值,收盘后 18:00-22:00 公布 | 精确,用于计算实际收益 | | 估算净值 | 盘中根据持仓股票实时价格估算的净值,有误差 | 估算值,仅供参考 |
重要:天天基金网的 WebFetch 问题
天天基金网(fund.eastmoney.com)的所有页面通过 JavaScript 动态渲染数据。使用 WebFetch 工具抓取时,获取的是服务器端缓存的旧 HTML,数据可能是几天前的。这是一个已知的技术限制。
数据获取策略(按优先级):
-
使用Python脚本获取(推荐):
- 调用
scripts/fund_api.py中的FundAPI类 api.get_estimated_nav(代码)- 获取估算净值api.get_historical_nav_as_list(代码)- 获取历史净值api.resolve_fund_code(名称)- 自动解析基金名称为代码- 优点:无需浏览器,速度快,支持历史数据
- 调用
-
浏览器工具(最可靠,用于确认净值):
- 用
browser_navigate访问https://fund.eastmoney.com/{代码}.html - 用
browser_evaluate执行document.querySelector('.w782')获取历史净值表格的最新一行 - 浏览器会执行 JavaScript,获取到最新确认净值
- 这是获取天天基金网最新确认净值的唯一可靠方式
- 用
-
估算净值接口(备用):
- 通过
WebFetch访问http://fundgz.1234567.com.cn/js/{基金代码}.js - 返回格式:
jsonpgz({"fundcode":"019671","name":"...","jzrq":"2026-06-18","dwjz":"1.0625","gsz":"1.0484","gszzl":"-1.33","gztime":"2026-06-22 15:00"}) dwjz= 最新确认净值,gsz= 今日估算净值,gszzl= 今日估算涨跌幅- 注意:QDII基金(港股/美股/海外基金)的估值接口可能返回空数据
jsonpgz();
- 通过
-
所有方案均失败时:
- 使用
WebSearch搜索"{基金名称} {基金代码} 最新净值"获取第三方网站的数据 - 在报告中注明"数据来源非官方,仅供参考"
- 使用
报告中的日期标注:
- 使用浏览器获取的确认净值 → "数据日期:{日期}(确认净值)"
- 使用估算接口 → "数据日期:{日期}(盘中估算净值,实际收益以收盘后确认为准)"
- 非交易日 → "[提示] 今日为非交易日({原因}),以下数据为上一个交易日({日期})的确认净值。"
重要:
- 绝对不要把周一到周五的普通工作日误判为非交易日
- 绝对不要忽略法定节假日(端午、中秋等可能恰逢周五/周一)
- 绝对不要把估算净值当作确认净值使用,必须在报告中明确标注
- 绝对不要直接使用 WebFetch 抓取天天基金网获取的净值数据,该数据可能是缓存的旧数据
- 如果估值接口的
gztime不是今天的日期,说明今日没有估算数据(如非交易日),应使用确认净值 - 如果估值接口对QDII基金返回空数据,必须使用浏览器工具获取最新数据
模式A:单基金深度分析
A1 基金信息采集
从天天基金网(fund.eastmoney.com)采集:
| 字段 | 来源 | 说明 | |------|------|------| | 基金全称/代码/类型/风险等级 | 浏览器访问 fund.eastmoney.com/{代码}.html | 顶部基本信息 | | 最新单位净值 + 日涨跌幅 | 见下方"净值获取策略" | 区分确认净值和估算净值 | | 净值日期 | 净值数据中附带 | 必须标注是确认还是估算 | | 基金规模/成立日期 | 浏览器访问或 WebFetch 均可 | 静态数据,缓存影响不大 | | 基金经理 + 任职时间 | fundf10.eastmoney.com/jjjl_{代码}.html | 静态数据 | | 管理费率 | 购买信息 | 含管理费+托管费+销售服务费 |
净值获取策略(按优先级):
- Python脚本(推荐):使用
FundAPI.get_estimated_nav(代码)或FundAPI.get_nav_with_fallback(代码) - 浏览器工具(最可靠):访问
https://fund.eastmoney.com/{代码}.html,通过 JS 获取最新确认净值和日期 - 估值接口(备用):
http://fundgz.1234567.com.cn/js/{代码}.js(注意:QDII基金可能返回空数据) - WebSearch(兜底):搜索"{基金名称} 最新净值"从第三方获取
注意:WebFetch 抓取天天基金网页面获取的是缓存旧数据,不可直接用于获取净值。静态信息(基金名称、规模、经理等)使用 WebFetch 没有问题。
A2 业绩分析
| 维度 | 时间区间 | 对比 | |------|----------|------| | 阶段涨幅 | 近1周/1月/3月/6月/今年/1年/2年/3年 | 同类平均 | | 季度/年度涨幅 | 近4季度 + 近3年 | 同类平均 | | 同类排名 | 各区间百分位 + 四分位 | |
评级标准: 各区间均前25% → 优秀 | 多数前50% → 良好 | 多数后50% → 一般 | 多数后25% → 预警
A3 风险排查(8维度)
| 检查维度 | 异常阈值 | 风险类型 | |----------|----------|----------| | 基金规模 | < 2亿元 | 清盘风险 | | 规模变动 | 近一季缩水 > 30% | 大额赎回 | | 机构占比 | > 80% 或大幅减持 | 赎回踩踏 | | 基金经理 | 任职 < 1年或近期变更 | 策略不稳定 | | 最大回撤 | > 同类1.5倍 | 风控预警 | | 跟踪误差 | > 0.3%(债指)/> 1%(股指) | 指数管理问题 | | 换手率 | 异常高/低 | 策略风险 | | 持仓集中度 | 前十大 > 60% | 集中风险 |
查询路径:基金规模 fundf10.eastmoney.com/gmbd_{代码}.html | 机构占比 cyrjg_{代码}.html
A4 持仓分析(权益类基金)
对股票型/混合型/指数型基金,额外分析:前十大重仓股、行业分布、持仓风格(大盘/中盘/小盘,成长/价值)
查询路径:fundf10.eastmoney.com/ccmx_{代码}.html
A5 同类对比推荐
搜索同类基金,按优先级排序推荐2-3只:
- 近1年/3年业绩排名同类前20%
- 基金经理任职 > 2年
- 规模 5-100亿元
- 费率低于同类平均
- 最大回撤优于同类平均
A6 市场行情与建议
| 基金类型 | 搜索关键词 | |----------|-----------| | 股票型/混合型 | "A股行情 板块轮动"、"主力资金流向" | | 债券型 | "债市行情 国债收益率"、"央行公开市场操作" | | 指数型 | "{跟踪指数名称} 走势" | | QDII | "{投资区域} 市场行情"、"汇率走势" | | 货币型 | "资金面 银行间利率" | | FOF | "基金市场整体表现" |
模式A输出格式(HTML)
报告文件名:基金分析报告_单基金_{YYYYMMDD}.html
<div class="report-header">
<h1>基金分析报告:{基金名称}</h1>
<div class="date">数据日期:{YYYY-MM-DD}</div>
</div>
<!-- 非交易日时显示 -->
<div class="warning">[提示] 今日为非交易日,以下数据为上一个交易日({YYYY-MM-DD})的数据。</div>
<div class="card">
<h2>一、基本信息</h2>
<table>
<tr><th>项目</th><th>内容</th></tr>
<tr><td>基金名称</td><td>{名称}</td></tr>
<tr><td>基金代码</td><td>{代码}</td></tr>
<tr><td>基金类型</td><td>{类型}</td></tr>
<tr><td>风险等级</td><td>{等级}</td></tr>
<tr><td>最新净值</td><td>{净值} ({日期})</td></tr>
<tr><td>日涨跌幅</td><td><span class="up/down/flat">{涨跌幅}</span></td></tr>
<tr><td>基金规模</td><td>{规模}</td></tr>
<tr><td>基金经理</td><td>{经理} (任职X年X天)</td></tr>
<tr><td>综合费率</td><td>{费率}</td></tr>
</table>
</div>
<div class="card">
<h2>二、业绩表现</h2>
<table>
<tr><th>时间区间</th><th>涨幅</th><th>同类平均</th><th>同类排名</th><th>四分位</th></tr>
<tr><td>近1周</td><td><span class="up/down/flat">{值}</span></td><td><span class="up/down/flat">{值}</span></td><td>{排名}</td><td><span class="quartile-*">{评级}</span></td></tr>
<!-- 近1月/3月/6月/今年/1年/3年 同上 -->
</table>
<p>业绩评级:<span class="excellent/up/flat/down">{评级文字}</span></p>
</div>
<div class="card">
<h2>三、风险预警</h2>
<!-- 有风险时 -->
<div class="warning">[风险类型] - [具体原因]</div>
<!-- 无风险时 -->
<p>全部正常,未发现异常风险。</p>
</div>
<div class="card">
<h2>四、持仓概览</h2>
<!-- 权益类基金显示 -->
<h3>前十大重仓股</h3>
<table>
<tr><th>序号</th><th>股票名称</th><th>代码</th><th>占净值比</th></tr>
<!-- 数据行 -->
</table>
<h3>行业分布</h3>
<table>
<tr><th>行业</th><th>占比</th></tr>
<!-- 数据行 -->
</table>
</div>
<div class="card">
<h2>五、同类对比推荐</h2>
<table>
<tr><th>基金名称</th><th>代码</th><th>近1年</th><th>近3年</th><th>规模</th><th>费率</th><th>推荐理由</th></tr>
<!-- 推荐基金行,涨幅用 up/down/flat 类 -->
</table>
</div>
<div class="card">
<h2>六、综合建议</h2>
<p>{50-150字建议,结合业绩、风险、市场行情}</p>
</div>
HTML 输出示例:
<div class="report-header">
<h1>基金分析报告:中证兴业中高等级信用债指数A</h1>
<div class="date">数据日期:2026-06-18</div>
</div>
<div class="warning">[提示] 今日为非交易日(周六),以下数据为上一个交易日(2026-06-18)的数据。</div>
<div class="card">
<h2>一、基本信息</h2>
<table>
<tr><th>项目</th><th>内容</th></tr>
<tr><td>基金名称</td><td>中证兴业中高等级信用债指数A</td></tr>
<tr><td>基金代码</td><td>003429</td></tr>
<tr><td>基金类型</td><td>指数型-债券(信用债指数)</td></tr>
<tr><td>风险等级</td><td>R2(中低风险)</td></tr>
<tr><td>最新净值</td><td>1.1962 (2026-06-18)</td></tr>
<tr><td>日涨跌幅</td><td><span class="up">+0.03%</span></td></tr>
<tr><td>基金规模</td><td>105.18亿元</td></tr>
<tr><td>基金经理</td><td>伍方方、郭益均 (任职2年87天)</td></tr>
<tr><td>综合费率</td><td>管理费0.20%+托管费0.10%</td></tr>
</table>
</div>
<div class="card">
<h2>二、业绩表现</h2>
<table>
<tr><th>时间区间</th><th>涨幅</th><th>同类平均</th><th>同类排名</th><th>四分位</th></tr>
<tr><td>近1周</td><td><span class="up">+0.15%</span></td><td><span class="up">+0.15%</span></td><td>239/662</td><td><span class="quartile-good">良好</span></td></tr>
</table>
<p>业绩评级:<span class="up">良好</span></p>
</div>
<div class="card">
<h2>三、风险预警</h2>
<div class="warning">[机构集中度过高] - 机构持有99.58%,存在大额赎回风险</div>
</div>
<div class="card">
<h2>六、综合建议</h2>
<p>该基金跟踪中高等级信用债指数,规模充足(105亿),但机构占比过高(99.58%)存在流动性风险。建议关注季度机构赎回动向,可考虑分散配置。</p>
</div>
模式B:基金对比分析
对每只基金执行 A1(信息采集)+ A2(业绩分析)+ A3(风险排查),然后横向对比。
模式B输出格式(HTML)
报告文件名:基金分析报告_对比_{YYYYMMDD}.html
<div class="report-header">
<h1>基金对比分析报告</h1>
<div class="date">数据日期:{YYYY-MM-DD}</div>
</div>
<!-- 非交易日时显示 -->
<div class="warning">[提示] 今日为非交易日,以下数据为上一个交易日({YYYY-MM-DD})的数据。</div>
<div class="card">
<h2>一、基本信息对比</h2>
<table>
<tr><th>项目</th><th>基金A</th><th>基金B</th><th>基金C</th></tr>
<tr><td>名称</td><td>...</td><td>...</td><td>...</td></tr>
<tr><td>代码</td><td>...</td><td>...</td><td>...</td></tr>
<tr><td>类型</td><td>...</td><td>...</td><td>...</td></tr>
<tr><td>风险等级</td><td>...</td><td>...</td><td>...</td></tr>
<tr><td>规模</td><td>...</td><td>...</td><td>...</td></tr>
<tr><td>经理/任职时间</td><td>...</td><td>...</td><td>...</td></tr>
<tr><td>综合费率</td><td>...</td><td>...</td><td>...</td></tr>
<tr><td>净值</td><td>...</td><td>...</td><td>...</td></tr>
<tr><td>涨跌幅</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td></tr>
</table>
</div>
<div class="card">
<h2>二、业绩对比</h2>
<table>
<tr><th>时间区间</th><th>基金A</th><th>基金B</th><th>基金C</th><th>胜出</th></tr>
<tr><td>近1周</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="excellent">[基金名]</span></td></tr>
<!-- 近1月/3月/6月/今年/1年/3年 同上 -->
<tr><td>综合胜率</td><td>X/Y</td><td>X/Y</td><td>X/Y</td><td>-</td></tr>
</table>
</div>
<div class="card">
<h2>三、风险对比</h2>
<table>
<tr><th>维度</th><th>基金A</th><th>基金B</th><th>基金C</th><th>优选</th></tr>
<tr><td>最大回撤</td><td><span class="down">...</span></td><td><span class="down">...</span></td><td><span class="down">...</span></td><td><span class="excellent">[基金名]</span></td></tr>
<tr><td>机构占比</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
<tr><td>规模稳定性</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
<tr><td>经理稳定性</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
</table>
</div>
<div class="card">
<h2>四、费率对比</h2>
<table>
<tr><th>费用项</th><th>基金A</th><th>基金B</th><th>基金C</th><th>最低</th></tr>
<tr><td>管理费</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
<tr><td>托管费</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
</table>
</div>
<div class="card">
<h2>五、综合评价与推荐</h2>
<h3>评分表(满分5分)</h3>
<table>
<tr><th>维度</th><th>基金A</th><th>基金B</th><th>基金C</th></tr>
<tr><td>业绩</td><td>X</td><td>X</td><td>X</td></tr>
<tr><td>风险</td><td>X</td><td>X</td><td>X</td></tr>
<tr><td>费率</td><td>X</td><td>X</td><td>X</td></tr>
<tr><td>管理</td><td>X</td><td>X</td><td>X</td></tr>
<tr><td>综合</td><td><strong>X</strong></td><td><strong>X</strong></td><td><strong>X</strong></td></tr>
</table>
<h3>推荐结论</h3>
<p><span class="excellent">[最推荐]</span>:{基金名称} - {理由}</p>
<p><span class="up">[次推荐]</span>:{基金名称} - {理由}</p>
<p><span class="flat">[备选]</span>:{基金名称} - {理由}</p>
<h3>适用场景建议</h3>
<ul>
<li>追求高收益 → {基金X}</li>
<li>追求稳健 → {基金Y}</li>
<li>低费率优先 → {基金Z}</li>
</ul>
</div>
HTML 输出示例:
<div class="report-header">
<h1>基金对比分析报告</h1>
<div class="date">数据日期:2026-06-18</div>
</div>
<div class="warning">[提示] 今日为非交易日(周六),以下数据为上一个交易日(2026-06-18)的数据。</div>
<div class="card">
<h2>一、基本信息对比</h2>
<table>
<tr><th>项目</th><th>基金A</th><th>基金B</th></tr>
<tr><td>名称</td><td>中证兴业中高等级信用债指数A</td><td>创金合信尊隆纯债债券A</td></tr>
</table>
</div>
<div class="card">
<h2>五、综合评价与推荐</h2>
<p><span class="excellent">[最推荐]</span>:创金合信尊隆纯债A - 业绩更优,回撤更小</p>
<p><span class="up">[次推荐]</span>:中证兴业信用债指数A - 规模大,流动性好</p>
</div>
模式C:持仓收益计算
C1 净值查询 + C2 收益计算
计算公式:
当日收益 = 持有金额 × 日涨跌幅(%转小数,如0.05% = 0.0005)
总持有市值 = Σ(各基金持有金额)
当日总收益 = Σ(各基金当日收益)
日收益率 = 当日总收益 / 总持有市值 × 100%
收益精度:小数点后2位,正负号(+/-)。
C3 持仓结构分析
按基金类型分类统计(股票型/混合型/债券型/指数型/货币型/其他),评估:股债比例、行业集中度、重复持仓。
C4 风险排查 + 市场行情 + 调仓建议
同模式A的A3/A6,根据持仓类型组合搜索对应市场行情。
模式C输出格式(HTML)
报告文件名:基金分析报告_持仓_{YYYYMMDD}.html
<div class="report-header">
<h1>基金持仓分析报告</h1>
<div class="date">数据日期:{YYYY-MM-DD}</div>
</div>
<!-- 非交易日时显示 -->
<div class="warning">[提示] 今日为非交易日,以下数据为上一个交易日({YYYY-MM-DD})的数据。</div>
<div class="card">
<h2>一、交易日说明</h2>
<p>本周交易日:X/X、X/X、X/X(共X天)</p>
</div>
<div class="card">
<h2>二、净值与收益明细</h2>
<p>(按收益从高到低排序)</p>
<table>
<tr><th>序号</th><th>基金名称</th><th>代码</th><th>类型</th><th>单位净值</th><th>日涨跌幅</th><th>当日收益(元)</th><th>风险状态</th></tr>
<tr><td>1</td><td>...</td><td>...</td><td>...</td><td>...</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td>正常/预警</td></tr>
</table>
</div>
<div class="card">
<h2>三、收益汇总</h2>
<div class="summary-box">
<div class="summary-item">
<div class="label">总持有市值</div>
<div class="value">XXX,XXX.XX 元</div>
</div>
<div class="summary-item">
<div class="label">当日总收益</div>
<div class="value"><span class="up/down/flat">+X,XXX.XX 元</span></div>
</div>
<div class="summary-item">
<div class="label">日收益率</div>
<div class="value"><span class="up/down/flat">+X.XXXX%</span></div>
</div>
</div>
</div>
<div class="card">
<h2>四、持仓结构</h2>
<p>{各类基金占比 + 配置合理性评估}</p>
</div>
<div class="card">
<h2>五、风险预警清单</h2>
<!-- 有风险时 -->
<div class="warning">[{基金名称}]:[{风险类型}] - [{具体原因}]</div>
<!-- 无风险时 -->
<p>全部正常,未发现异常风险。</p>
</div>
<div class="card">
<h2>六、市场行情与调仓建议</h2>
<h3>市场要点</h3>
<p>...</p>
<h3>调仓建议</h3>
<ol>
<li>...</li>
<li>...</li>
<li>...</li>
</ol>
</div>
HTML 输出示例:
<div class="report-header">
<h1>基金持仓分析报告</h1>
<div class="date">数据日期:2026-06-18</div>
</div>
<div class="warning">[提示] 今日为非交易日(周六),以下数据为上一个交易日(2026-06-18)的数据。</div>
<div class="card">
<h2>二、净值与收益明细</h2>
<table>
<tr><th>序号</th><th>基金名称</th><th>代码</th><th>类型</th><th>净值</th><th>涨跌幅</th><th>当日收益(元)</th></tr>
<!-- 数据行,涨跌幅和收益用 up/down/flat 类 -->
</table>
</div>
<div class="card">
<h2>三、收益汇总</h2>
<div class="summary-box">
<div class="summary-item">
<div class="label">总持有市值</div>
<div class="value">381,030.15 元</div>
</div>
<div class="summary-item">
<div class="label">当日总收益</div>
<div class="value"><span class="up">+117.29 元</span></div>
</div>
<div class="summary-item">
<div class="label">日收益率</div>
<div class="value"><span class="up">+0.0308%</span></div>
</div>
</div>
</div>
<div class="card">
<h2>四、持仓结构</h2>
<p>债券型占比100%(信用债指数34% + 纯债53% + 同业存单13%)</p>
</div>
模式D:持仓回测
D1 识别回测区间
| 用户表述 | 起始日期 | |----------|----------| | 过去一年 / 近1年 | 当日往前推1年 | | 过去半年 / 近6月 | 当日往前推6个月 | | 今年以来 / YTD | 今年1月2日 至 当日 | | 成立以来 | 最晚成立的基金成立日 | | 自定义(如"2025年至今") | 按用户指定 |
通过WebSearch确认起始日和结束日各自对应的最近交易日。
D2 历史净值采集
推荐方式:使用Python脚本获取历史净值数据
import sys
sys.path.insert(0, '/path/to/fund-analyzer/scripts')
from fund_api import FundAPI
api = FundAPI()
# 获取历史净值(最近365天)
hist = api.get_historical_nav_as_list("003429", days=365)
# 返回: [{"date": "2025-07-03", "nav": 1.1964, "cumnav": 1.1964}, ...]
# 或获取完整历史数据(含原始数据)
data = api.get_historical_nav("003429")
# data["unit_nav"] - 单位净值走势
# data["cumulative_nav"] - 累计净值走势
备用方式:浏览器访问 fundf10.eastmoney.com/jjjz_{基金代码}.html
需采集:起始日净值、结束日净值、期间每个交易日净值(计算回撤/波动率)、分红记录。 使用累计净值计算含分红的真实收益。
D3 回测收益计算
单基金:期间收益率 = (NAV_end - NAV_start) / NAV_start × 100%
年化收益率 = (1 + 期间收益率) ^ (365 / 持有天数) - 1
组合(加权):组合收益率 = Σ(各基金收益额) / 总持有金额 × 100%
基准对比:沪深300(权益)、中证全债(债券)、银行理财平均(保守)。
D4 风险指标计算
| 指标 | 计算方法 | |------|----------| | 最大回撤 | (最高点 - 最低点) / 最高点 | | 年化波动率 | 日收益率标准差 × √252 | | 夏普比率 | (年化收益率 - 无风险利率) / 年化波动率(无风险利率取1年期国债约1.5%) | | 正收益天数占比 | 正收益交易日数 / 总交易日数 | | 最长回撤修复天数 | 从最大回撤到净值恢复的天数 |
模式D输出格式(HTML)
报告文件名:基金分析报告_回测_{YYYYMMDD}.html
<div class="report-header">
<h1>持仓回测分析报告</h1>
<div class="date">数据截至:{YYYY-MM-DD}</div>
</div>
<!-- 非交易日时显示 -->
<div class="warning">[提示] 今日为非交易日,以下数据截至上一个交易日({YYYY-MM-DD})。</div>
<div class="card">
<h2>一、回测区间</h2>
<table>
<tr><th>项目</th><th>内容</th></tr>
<tr><td>起始日期</td><td>{YYYY-MM-DD}</td></tr>
<tr><td>结束日期</td><td>{YYYY-MM-DD}</td></tr>
<tr><td>持有天数</td><td>X天</td></tr>
<tr><td>交易日数</td><td>X天</td></tr>
</table>
</div>
<div class="card">
<h2>二、组合整体表现</h2>
<div class="summary-box">
<div class="summary-item">
<div class="label">总持有金额</div>
<div class="value">XXX,XXX.XX 元</div>
</div>
<div class="summary-item">
<div class="label">期间总收益</div>
<div class="value"><span class="up/down/flat">+XXX,XXX.XX 元</span></div>
</div>
<div class="summary-item">
<div class="label">期间收益率</div>
<div class="value"><span class="up/down/flat">+X.XX%</span></div>
</div>
<div class="summary-item">
<div class="label">年化收益率</div>
<div class="value"><span class="up/down/flat">+X.XX%</span></div>
</div>
<div class="summary-item">
<div class="label">最大回撤</div>
<div class="value"><span class="down">-X.XX%</span></div>
</div>
<div class="summary-item">
<div class="label">夏普比率</div>
<div class="value"><span class="up/down/flat">X.XX</span></div>
</div>
</div>
<table>
<tr><th>指标</th><th>数值</th></tr>
<tr><td>基准收益率(沪深300/中证全债)</td><td><span class="up/down/flat">+X.XX%</span></td></tr>
<tr><td>超额收益</td><td><span class="up/down/flat">+X.XX%</span></td></tr>
</table>
</div>
<div class="card">
<h2>三、各基金明细(按收益从高到低)</h2>
<table>
<tr><th>序号</th><th>基金名称</th><th>代码</th><th>类型</th><th>起始净值</th><th>结束净值</th><th>期间收益</th><th>年化收益</th><th>收益额</th><th>最大回撤</th></tr>
<tr><td>1</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="down">...</span></td></tr>
</table>
</div>
<div class="card">
<h2>四、收益贡献分析</h2>
<table>
<tr><th>基金名称</th><th>持仓占比</th><th>收益贡献</th><th>贡献占比</th></tr>
<tr><td>...</td><td>...</td><td><span class="up/down/flat">...</span></td><td>...</td></tr>
</table>
</div>
<div class="card">
<h2>五、风险指标对比</h2>
<table>
<tr><th>指标</th><th>组合</th><th>同类平均</th><th>评价</th></tr>
<tr><td>年化收益率</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="excellent/up/down">优于/劣于</span></td></tr>
<tr><td>最大回撤</td><td><span class="down">...</span></td><td><span class="down">...</span></td><td><span class="excellent/up/down">优于/劣于</span></td></tr>
<tr><td>夏普比率</td><td>...</td><td>...</td><td><span class="excellent/up/down">优于/劣于</span></td></tr>
</table>
</div>
<div class="card">
<h2>六、关键发现与建议</h2>
<ol>
<li>表现最佳基金 + 原因</li>
<li>表现最差基金 + 原因</li>
<li>风险提示</li>
<li>优化建议(150字以内)</li>
</ol>
</div>
HTML 输出示例:
<div class="report-header">
<h1>持仓回测分析报告</h1>
<div class="date">数据截至:2026-06-18</div>
</div>
<div class="warning">[提示] 今日为非交易日(周六),以下数据截至上一个交易日(2026-06-18)。</div>
<div class="card">
<h2>一、回测区间</h2>
<table>
<tr><th>项目</th><th>内容</th></tr>
<tr><td>起始日期</td><td>2025-06-18</td></tr>
<tr><td>结束日期</td><td>2026-06-18</td></tr>
<tr><td>持有天数</td><td>365天</td></tr>
<tr><td>交易日数</td><td>244天</td></tr>
</table>
</div>
<div class="card">
<h2>二、组合整体表现</h2>
<div class="summary-box">
<div class="summary-item">
<div class="label">总持有金额</div>
<div class="value">381,030.15 元</div>
</div>
<div class="summary-item">
<div class="label">期间总收益</div>
<div class="value"><span class="up">+10,250.00 元</span></div>
</div>
<div class="summary-item">
<div class="label">年化收益率</div>
<div class="value"><span class="up">+2.69%</span></div>
</div>
<div class="summary-item">
<div class="label">最大回撤</div>
<div class="value"><span class="down">-0.85%</span></div>
</div>
<div class="summary-item">
<div class="label">夏普比率</div>
<div class="value"><span class="up">1.82</span></div>
</div>
</div>
<table>
<tr><th>指标</th><th>数值</th></tr>
<tr><td>基准收益率(中证全债)</td><td><span class="up">+3.20%</span></td></tr>
<tr><td>超额收益</td><td><span class="down">-0.51%</span></td></tr>
</table>
</div>
<div class="card">
<h2>三、各基金明细</h2>
<table>
<tr><th>序号</th><th>基金名称</th><th>代码</th><th>类型</th><th>起始净值</th><th>结束净值</th><th>期间收益</th><th>年化收益</th><th>收益额</th><th>最大回撤</th></tr>
<tr><td>1</td><td>创金合信尊隆纯债A</td><td>004322</td><td>纯债</td><td>1.0156</td><td>1.0234</td><td><span class="up">+0.77%</span></td><td><span class="up">+0.77%</span></td><td><span class="up">+1,547</span></td><td><span class="down">-0.32%</span></td></tr>
<tr><td>2</td><td>中证兴业信用债指数A</td><td>003429</td><td>信用债指数</td><td>1.1810</td><td>1.1962</td><td><span class="up">+1.29%</span></td><td><span class="up">+1.29%</span></td><td><span class="up">+1,678</span></td><td><span class="down">-0.68%</span></td></tr>
<tr><td>3</td><td>天弘同业存单AAA</td><td>017423</td><td>同业存单</td><td>1.0012</td><td>1.0089</td><td><span class="up">+0.77%</span></td><td><span class="up">+0.77%</span></td><td><span class="up">+385</span></td><td><span class="down">-0.05%</span></td></tr>
</table>
</div>
<div class="card">
<h2>五、风险指标对比</h2>
<table>
<tr><th>指标</th><th>组合</th><th>同类平均</th><th>评价</th></tr>
<tr><td>年化收益率</td><td><span class="up">+2.69%</span></td><td><span class="up">+2.45%</span></td><td><span class="excellent">优于</span></td></tr>
<tr><td>最大回撤</td><td><span class="down">-0.85%</span></td><td><span class="down">-1.20%</span></td><td><span class="excellent">优于</span></td></tr>
<tr><td>夏普比率</td><td>1.82</td><td>1.50</td><td><span class="excellent">优于</span></td></tr>
</table>
</div>
<div class="card">
<h2>六、关键发现与建议</h2>
<ol>
<li>表现最佳:中证兴业信用债指数A,收益<span class="up">+1.29%</span>,贡献占比55.7%</li>
<li>组合回撤控制良好(<span class="down">-0.85%</span>),波动率低于同类</li>
<li>优化建议:可适当增加长久期利率债配置以提升收益弹性</li>
</ol>
</div>
附录A:基金类型识别与分类
| 关键词 | 大类 | 二级分类 | 典型风险等级 | |--------|------|----------|------------| | 沪深300/中证500/创业板/科创 | 指数型-股票 | 宽基指数 | R4-R5 | | 消费/医药/新能源/半导体/军工 | 股票型或指数型 | 行业主题 | R4-R5 | | 蓝筹/成长/价值/精选 | 混合型或股票型 | 主动权益 | R4 | | 信用债/产业债/城投债 | 债券型 | 信用债 | R2 | | 国开债/国债指数 | 指数型-债券 | 利率债指数 | R2 | | 同业存单 | 指数型-债券 | 同业存单 | R2 | | 纯债/短债/中短债 | 债券型 | 纯债 | R2 | | 可转债 | 债券型 | 可转债 | R3 | | QDII/纳斯达克/标普 | QDII | 海外 | R4-R5 | | FOF/养老目标 | FOF | 基金中基金 | R3-R4 | | 货币/余额宝 | 货币型 | 货币 | R1 |
附录B:市场行情分析框架
权益类(股票型/混合型/股票指数): 大盘走势、板块轮动、北向资金、涨跌家数 搜索:"A股今日行情"、"北向资金流向"、"板块轮动 主力资金"
债券市场(债券型/债券指数): 10年期国债收益率、央行公开市场操作、DR007/Shibor、信用利差 搜索:"今日债市行情"、"国债收益率走势"、"央行公开市场操作"
海外市场(QDII): 美股三大指数、投资区域主要指数、人民币汇率、美联储政策 搜索:"美股行情"、"{投资区域}市场行情"、"人民币汇率走势"
附录C:异常处理与容错机制
网络异常
| 异常 | 处理 | 用户提示 | |------|------|----------| | 请求超时 | 等3秒重试1次 | "网络请求中,请稍候..." | | 重试仍失败 | 跳过,标记"数据获取失败" | "[警告] [数据项] 获取失败" | | 连续3项失败 | 终止任务 | "[错误] 网络连接异常,请检查网络后重试" |
备用数据源: 搜狐基金 q.fund.sohu.com/{代码}/ → 新浪财经 finance.sina.com.cn/fund/{代码}.html → WebSearch "{名称} 最新净值"
数据异常
| 异常 | 判断 | 处理 | |------|------|------| | 净值日期过期 | < 上一个交易日 | 标记"数据未更新" | | 涨跌幅异常 | > ±10% | 标记"异常波动" | | 净值为0/负 | NAV ≤ 0 | 跳过该基金 | | 规模数据缺失 | 无法获取 | 标记"无法评估" |
输入格式容错
| 输入 | 识别 | 处理 |
|------|------|------|
| 003429 / 003429基金 / 帮我看看003429 | 基金代码 | 正则提取6位数字 |
| 中证兴业信用债 / 易方达蓝筹 | 基金名称/简称 | WebSearch搜索全称和代码 |
| 130,096.47元 / 13万元 / 800万 | 金额 | 解析为数字 |
限流与超时
- 连续WebFetch请求间隔 ≥ 2秒
- 单只基金最多3次请求
- 超过5只基金分批处理(每批3-5只)
- 403/429响应 → 等10秒重试 → 切换备用源 → 提示"数据源暂时不可用"
错误提示汇总
| 场景 | 提示 | 操作 | |------|------|------| | 网络断开 | "[错误] 网络连接失败" | 用户检查网络 | | 天天基金不可用 | "[警告] 正在尝试其他数据源..." | 自动切换 | | 基金代码不存在 | "[错误] 未找到基金 {代码}" | 用户核实 | | 净值未更新 | "[提示] 最新净值日期为 {日期}" | 等待T+1 |
附录D:注意事项
- 数据时效性:所有净值必须为最新交易日数据
- 计算准确性:收益计算精确到小数点后2位
- 风险客观性:基于客观数据判断,不主观臆断
- 建议谨慎性:提示用户结合自身情况判断
- 语言一致性:输出语言与用户输入一致
- 非交易日处理:继续执行,报告顶部 ⏰ 提示
附录E:输入格式速查
| 格式 | 说明 | 示例 |
|------|------|------|
| 基金名称或代码 | 模式A | 帮我分析 003429 |
| 多只基金 + 对比关键词 | 模式B | 对比 003429 和 004322 |
| 基金名 | 代码 | 金额 | 模式C | 基金名 \| 003429 \| 130,000 |
| 基金名 | 代码 | 金额 + 时间 | 模式D | 基金名 \| 003429 \| 130,000 + 过去一年 |
| 股票名称或代码 | 股票模式 | 帮我分析 宁德时代 |
| 多只股票 + 对比 | 股票对比 | 对比 贵州茅台 和 五粮液 |
| 分钟K线 | K线模式 | 查看宁德时代5分钟K线 |
| 板块行情 | 板块模式 | 查看半导体板块行情 |
股票分析模块
基于同花顺数据接口的高级股票分析功能,与基金分析无缝衔接
快速开始
它能做什么?
| 模式 | 场景 | 一句话说明 | |------|------|-----------| | E | 查一只股票 | 输入股票名称或代码,查看实时行情、K线走势、资金流向 | | F | 对比多只股票 | 2-3只股票横向PK,含涨跌对比、相关性分析 | | G | 分钟K线分析 | 查看1m/5m/15m/30m/60m/120m多周期K线,叠加均线、标注异动 | | H | 板块行情 | 查看申万行业/概念板块涨跌排名、成分股、领涨股 | | I | 盘口与大单 | 五档盘口深度、大单流向、集合竞价异动扫描 | | J | 智能选股 | 问财自然语言选股:财务指标、技术形态、资金流向等 |
怎么触发?
帮我分析 宁德时代 → 模式E(单股票)
帮我比较 贵州茅台 和 五粮液 → 模式F(对比)
查看宁德时代5分钟K线 → 模式G(K线)
查看半导体板块行情 → 模式H(板块)
查看宁德时代盘口和大单 → 模式I(盘口)
帮我选一些ROE大于15%的股票 → 模式J(选股)
模式自动识别规则:
- 含"对比/比较/vs/哪个好" → 模式F
- 含"分钟/K线/走势/分时" → 模式G
- 含"板块/行业/概念/成分股" → 模式H
- 含"盘口/大单/资金/竞价" → 模式I
- 含"选股/筛选/找/选" → 模式J
- 其余 → 模式E
代码解析
所有中文名/缩写/短代码先用 search_symbols 获得完整 THSCODE:
from thsdk import THS
with THS() as ths:
resp = ths.search_symbols("宁德时代")
# data → [
# {'THSCODE': 'USZA300750', 'Name': '宁德时代',
# 'MarketStr': 'USZA', 'Code': '300750', 'MarketDisplay': '深A'},
# ]
选码规则:
| 情况 | 处理 | |------|-----| | 0条 | 告知未找到 | | 1条 | 直接使用 | | 多条,只有1只A股 | 自动选A股 | | 多条,多只A股 | 展示列表,等用户选择 |
市场前缀:
| 前缀 | 含义 | 前缀 | 含义 |
|------|------|------|------|
| USHA | 上海A股 | USHI | 上海指数 |
| USZA | 深圳A股 | USZI | 深圳指数 |
| USTM | 北交所 | UHKG | 港股 |
| URFI | 行业/概念板块 | UFXB | 外汇 |
常用指数 THSCODE:
| 指数 | THSCODE | 指数 | THSCODE |
|------|---------|------|---------|
| 上证指数 | USHI000001 | 沪深300 | USHI000300 |
| 深证成指 | USZI399001 | 中证500 | USHI000905 |
| 创业板指 | USZI399006 | 上证50 | USHI000016 |
| 科创50 | USHI000688 | | |
模式E:单股票分析
E1 实时行情
with THS() as ths:
resp = ths.market_data_cn("USZA300750", "基础数据")
df = resp.df
# 字段:价格, 成交方向, 成交量, 交易笔数, 总金额,
# 涨速, 当前量, 代码, 名称, 昨收价, 开盘价, 最高价, 最低价
query_key 选项:
| query_key | 含义 |
|-----------|------|
| "基础数据" | 价格、涨跌幅、成交量、金额、开高低、涨速 |
| "扩展1" | 涨幅、涨跌、换手率、量比、主力净流入、委比 |
| "汇总" | 全量字段,多股对比首选 |
E2 K线数据
from datetime import datetime
from zoneinfo import ZoneInfo
tz = ZoneInfo('Asia/Shanghai')
with THS() as ths:
# 按条数
resp = ths.klines("USZA300750", interval="5m", count=78)
# 按时间范围
resp = ths.klines("USZA300750", interval="day",
start_time=datetime(2025, 1, 1, tzinfo=tz),
end_time=datetime(2025, 3, 1, tzinfo=tz))
df = resp.df
# 字段:时间, 收盘价, 成交量, 总金额, 开盘价, 最高价, 最低价
interval 参数: "1m" / "5m" / "15m" / "30m" / "60m" / "120m" / "day" / "week" / "month"
E3 分时与盘口
with THS() as ths:
# 日内分时
resp = ths.intraday_data("USZA300750")
df = resp.df
# 五档盘口
resp = ths.depth("USZA300750")
df = resp.df
模式F:多股票对比
import pandas as pd
from thsdk import THS
stock_names = ["贵州茅台", "五粮液", "泸州老窖"]
with THS() as ths:
# 批量解析代码
stock_codes = []
for name in stock_names:
resp = ths.search_symbols(name)
a_shares = [s for s in resp.data
if any(m in s.get('MarketDisplay', '') for m in ['沪A', '深A'])]
if a_shares:
stock_codes.append({'name': name, 'code': a_shares[0]['THSCODE']})
# 批量行情
codes = [s['code'] for s in stock_codes]
resp = ths.market_data_cn(codes, "汇总")
quote_df = pd.DataFrame(resp.data)
# 批量K线
klines_data = {}
for s in stock_codes:
resp = ths.klines(s['code'], interval="day", count=30, adjust="forward")
klines_data[s['name']] = resp.df
输出规范:
- 表格:股票 / 最新价 / 涨幅% / 成交额 / 换手率 / 量比 / 主力净流入 / 总市值
- 归一化走势折线图(多线,颜色区分)
- 相关性热力图(量化场景)
模式G:分钟K线分析
with THS() as ths:
resp = ths.klines("USZA300750", interval="5m", count=78)
df = resp.df
# 计算指标
df['ma5'] = df['收盘价'].rolling(5).mean()
df['ma10'] = df['收盘价'].rolling(10).mean()
df['vol_avg'] = df['成交量'].rolling(20).mean()
df['vol_spike'] = df['成交量'] > df['vol_avg'] * 2 # 成交量异动
输出: K线图 + 成交量柱状图 + 均线叠加 + 异动标注
模式H:板块行情
行业/概念板块列表
with THS() as ths:
resp = ths.ths_industry() # 同花顺行业,约90个
resp = ths.ths_concept() # 概念板块,约390个
df = resp.df
板块行情
with THS() as ths:
# Step 1:获取板块列表
resp = ths.ths_industry()
target = next(r for r in resp.data if '半导体' in r['名称'])
link_code = target['代码'] # 格式 URFIXXXXXX
# Step 2:查板块行情
resp = ths.market_data_block(link_code, "基础数据")
df = resp.df
# 字段:价格, 涨幅, 成交量, 板块总市值, 上涨家数, 下跌家数, 领涨股
板块成分股
with THS() as ths:
resp = ths.block_constituents("URFI883404")
df = resp.df
指数行情
with THS() as ths:
resp = ths.market_data_index(["USHI000001", "USHI000300"])
df = resp.df
模式I:盘口与大单
大单流向
with THS() as ths:
resp = ths.big_order_flow("USZA300750")
df = resp.df
# 字段:时间, 成交方向, 成交量, 总金额, 委托买入价, 委托卖出价
集合竞价异动(9:15~9:25)
with THS() as ths:
resp_sh = ths.call_auction_anomaly("USHA") # 沪市
resp_sz = ths.call_auction_anomaly("USZA") # 深市
df = resp_sh.df
# 异动类型:涨停试盘/竞价抢筹/大幅高开/急速上涨/大买单试盘 等13种
买卖深度详情
with THS() as ths:
resp = ths.order_book_bid("USZA300750") # 买方深度
resp = ths.order_book_ask("USZA300750") # 卖方深度
df = resp.df
模式J:问财智能选股
with THS() as ths:
resp = ths.wencai_nlp("连续3日主力净流入,换手率大于5%,非ST")
df = resp.df
选股场景速查:
| 场景 | 查询语句示例 |
|------|-------------|
| 涨停/连板 | "今日涨停,非ST" / "连续2日涨停,非一字板" |
| 财务选股 | "连续3年ROE大于15%,非ST" / "市盈率小于15,股息率大于3%" |
| 技术形态 | "均线多头排列,MACD金叉" / "250日新高,非ST" |
| 资金流向 | "主力净流入由大到小排名前20" / "近10日主力资金流向大于5000万" |
| 板块概念 | "人工智能概念股,今日涨跌幅" / "今日概念板块涨幅排名前20" |
| 复合条件 | "均线多头+MACD金叉+换手率大于1%且小于10%" |
多市场支持
| 市场 | 方法 | 示例 |
|------|------|------|
| A股 | market_data_cn(code) | market_data_cn("USZA300750") |
| 港股 | market_data_hk(code) | market_data_hk("UHKG00700") |
| 美股 | market_data_us(code) | market_data_us("UNQQAAPL") |
| 外汇 | market_data_forex(code) | market_data_forex("UFXBGBPUSD") |
| 期货 | market_data_future(code) | market_data_future("UCFSAU2506") |
安装与连接
pip install --upgrade thsdk
from thsdk import THS
with THS() as ths: # 游客模式,无需账户配置
...
错误处理
with THS() as ths:
resp = ths.klines("USZA300750", interval="5m", count=60)
if not resp:
print(f"调用失败: {resp.error}")
elif resp.df.empty:
print("数据为空,可能是非交易时间")
else:
df = resp.df
常见报错:
| 错误 | 原因 | 解决 |
|------|------|------|
| "未登录" | 未 connect | 确保用 with THS() as ths |
| "证券代码必须为10个字符" | 格式错误 | 先过 search_symbols |
| "一次性查询多支股票必须市场代码相同" | 沪深混合 | 按市场分组查询 |
| "无效的周期类型: 5min" | interval 写法错 | 改为 "5m" |
注意事项:
- 游客账户在部分专业数据/实时数据上可能有权限限制
- 批量拉取时建议加
time.sleep(0.5)避免限流 THS为同步阻塞,在 FastAPI/asyncio 中需放入线程池
Scan to join WeChat group