返回 Skill 列表
extension
分类: 数据与分析无需 API Key

股票基金助手 同花顺数据接口 基金持仓监控、调仓建议

基金收益计算、风险分析、同类对比、持仓回测、调仓建议、股票分析。当用户需要查询基金净值、计算基金收益、分析基金风险、对比多只基金、查找同类基金推荐、回测持仓历史收益、查看股票K线、盘口、大单流向、板块行情时触发。支持所有基金类型和A股/港股/美股股票分析。

person作者: user_5d10d7f7hubcommunity

投资全能分析助手

专业的投资投研分析工具,支持基金和股票两大投资品种。

核心能力

基金分析

  • 单基金深度分析
  • 持仓收益计算
  • 多基金对比
  • 同类推荐
  • 持仓回测
  • 风险排查
  • 市场行情与调仓建议

股票分析(新增)

  • 分钟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,封装了天天基金的数据接口,支持:

  1. 基金名称/代码解析 - 输入基金名称自动解析为代码
  2. 估算净值获取 - 实时获取当日估算净值
  3. 历史净值获取 - 获取完整历史净值数据(用于回测)
  4. 基金列表搜索 - 按名称/代码/拼音搜索基金
  5. 带降级的净值获取 - 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 | 获取所有基金信息用于搜索 |

容错机制

  1. 基金名称输入:自动调用基金列表API解析为代码
  2. API失败降级:估算API → 提示使用浏览器工具 → 提示使用WebSearch
  3. QDII基金处理:部分QDII基金估算净值可能为空,自动降级
  4. 网络异常处理:超时自动重试,失败返回明确错误信息

交易日校验(所有模式共用)

第一步:确定今天的日期。 使用系统当前日期(YYYY-MM-DD),不要猜测或假设。

第二步:判断是否为交易日。 A股交易日规则:

  • 周一至周五 → 交易日(但法定节假日除外
  • 周六、周日 → 非交易日
  • 法定节假日必须通过 WebSearch 确认,常见节假日包括:元旦(1天)、春节(7天)、清明(3天)、五一(5天)、端午(3天)、中秋(3天)、国庆(7天)。注意:节假日可能涉及调休,如某周六可能因调休变为工作日但并非交易日

判断流程

  1. 先看星期几:周六/周日 → 非交易日,直接使用上一交易日数据
  2. 周一至周五 → 通过 WebSearch 搜索"{今天日期} A股是否开市" 或 "{今年} {节日名} 放假时间" 确认是否为节假日
  3. 节假日 → 非交易日,使用上一交易日数据
  4. 普通工作日 → 交易日

第三步:获取净值数据(关键)。 基金净值分两种,必须正确区分:

| 类型 | 说明 | 精度 | |------|------|------| | 确认净值 | 基金公司计算后的正式净值,收盘后 18:00-22:00 公布 | 精确,用于计算实际收益 | | 估算净值 | 盘中根据持仓股票实时价格估算的净值,有误差 | 估算值,仅供参考 |

重要:天天基金网的 WebFetch 问题

天天基金网(fund.eastmoney.com)的所有页面通过 JavaScript 动态渲染数据。使用 WebFetch 工具抓取时,获取的是服务器端缓存的旧 HTML,数据可能是几天前的。这是一个已知的技术限制。

数据获取策略(按优先级)

  1. 使用Python脚本获取(推荐):

    • 调用 scripts/fund_api.py 中的 FundAPI
    • api.get_estimated_nav(代码) - 获取估算净值
    • api.get_historical_nav_as_list(代码) - 获取历史净值
    • api.resolve_fund_code(名称) - 自动解析基金名称为代码
    • 优点:无需浏览器,速度快,支持历史数据
  2. 浏览器工具(最可靠,用于确认净值):

    • browser_navigate 访问 https://fund.eastmoney.com/{代码}.html
    • browser_evaluate 执行 document.querySelector('.w782') 获取历史净值表格的最新一行
    • 浏览器会执行 JavaScript,获取到最新确认净值
    • 这是获取天天基金网最新确认净值的唯一可靠方式
  3. 估算净值接口(备用):

    • 通过 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();
  4. 所有方案均失败时

    • 使用 WebSearch 搜索"{基金名称} {基金代码} 最新净值"获取第三方网站的数据
    • 在报告中注明"数据来源非官方,仅供参考"

报告中的日期标注

  • 使用浏览器获取的确认净值 → "数据日期:{日期}(确认净值)"
  • 使用估算接口 → "数据日期:{日期}(盘中估算净值,实际收益以收盘后确认为准)"
  • 非交易日 → "[提示] 今日为非交易日({原因}),以下数据为上一个交易日({日期})的确认净值。"

重要

  • 绝对不要把周一到周五的普通工作日误判为非交易日
  • 绝对不要忽略法定节假日(端午、中秋等可能恰逢周五/周一)
  • 绝对不要把估算净值当作确认净值使用,必须在报告中明确标注
  • 绝对不要直接使用 WebFetch 抓取天天基金网获取的净值数据,该数据可能是缓存的旧数据
  • 如果估值接口的 gztime 不是今天的日期,说明今日没有估算数据(如非交易日),应使用确认净值
  • 如果估值接口对QDII基金返回空数据,必须使用浏览器工具获取最新数据

模式A:单基金深度分析

A1 基金信息采集

从天天基金网(fund.eastmoney.com)采集:

| 字段 | 来源 | 说明 | |------|------|------| | 基金全称/代码/类型/风险等级 | 浏览器访问 fund.eastmoney.com/{代码}.html | 顶部基本信息 | | 最新单位净值 + 日涨跌幅 | 见下方"净值获取策略" | 区分确认净值和估算净值 | | 净值日期 | 净值数据中附带 | 必须标注是确认还是估算 | | 基金规模/成立日期 | 浏览器访问或 WebFetch 均可 | 静态数据,缓存影响不大 | | 基金经理 + 任职时间 | fundf10.eastmoney.com/jjjl_{代码}.html | 静态数据 | | 管理费率 | 购买信息 | 含管理费+托管费+销售服务费 |

净值获取策略(按优先级)

  1. Python脚本(推荐):使用 FundAPI.get_estimated_nav(代码)FundAPI.get_nav_with_fallback(代码)
  2. 浏览器工具(最可靠):访问 https://fund.eastmoney.com/{代码}.html,通过 JS 获取最新确认净值和日期
  3. 估值接口(备用):http://fundgz.1234567.com.cn/js/{代码}.js(注意:QDII基金可能返回空数据)
  4. 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. 近1年/3年业绩排名同类前20%
  2. 基金经理任职 > 2年
  3. 规模 5-100亿元
  4. 费率低于同类平均
  5. 最大回撤优于同类平均

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:注意事项

  1. 数据时效性:所有净值必须为最新交易日数据
  2. 计算准确性:收益计算精确到小数点后2位
  3. 风险客观性:基于客观数据判断,不主观臆断
  4. 建议谨慎性:提示用户结合自身情况判断
  5. 语言一致性:输出语言与用户输入一致
  6. 非交易日处理:继续执行,报告顶部 ⏰ 提示

附录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

输出规范:

  1. 表格:股票 / 最新价 / 涨幅% / 成交额 / 换手率 / 量比 / 主力净流入 / 总市值
  2. 归一化走势折线图(多线,颜色区分)
  3. 相关性热力图(量化场景)

模式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 中需放入线程池