股票基金助手

👤 上下文无关文法 📦 v1.1.0 ⭐ 4.8 ⬇️ 1.5K 下载
💼 行业专业 免费

📖 技能介绍


name: "fund-analyzer-plus" slug: "fund-analyzer-plus" version: "1.1.0" displayName: "股票基金助手" summary: "基金收益计算、风险分析、同类对比、持仓回测、调仓建议、股票分析。支持基金净值查询、收益计算、风险分析、多基金对比、同类推荐、持仓回测,以及股票K线、盘口深度、大单流向、板块行情、问财选股等。" description: "基金收益计算、风险分析、同类对比、持仓回测、调仓建议、股票分析。当用户需要查询基金净值、计算基金收益、分析基金风险、对比多只基金、查找同类基金推荐、回测持仓历史收益、查看股票K线、盘口、大单流向、板块行情时触发。支持所有基金类型和A股/港股/美股股票分析。"


投资全能分析助手

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

核心能力

基金分析

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

股票分析(新增)

  • 分钟K线(1m/5m/15m/30m/60m/120m)

    小葱技能站7w4.net,专业的AI技能分享平台。

  • 板块/指数行情(主要指数/申万行业/概念板块成分股)
  • 多股票批量对比(表格+归一化走势图+相关性热力图)
  • 盘口深度、大单流向、集合竞价异动
  • 日内分时、历史分时
  • 问财自然语言选股

⚠️ 能力说明:本工具仅提供公开市场数据分析,不支持实时交易、个人账户查询、未来收益预测、私募基金等服务。详细说明见「能力边界」章节。


报告输出规范(所有模式共用)

输出格式

所有模式的报告必须输出为自包含的 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封装脚本:

fund_api.py — 基金数据接口

封装天天基金的数据接口,支持:

  1. 基金名称/代码解析 - 输入基金名称自动解析为代码(支持简称模糊匹配)
  2. 最新净值获取 - 获取最新确认净值和日涨跌幅
  3. 历史净值获取 - 获取完整历史净值数据(用于回测)
  4. 基金列表搜索 - 按名称/代码/全拼/首字母缩写搜索基金
  5. 带降级的净值获取 - 多级降级保证数据可用
  6. 基金详情 - 获取规模/经理/费率/成立日期等
  7. 持仓分析 - 获取前十大重仓股
  8. 收益计算 - 计算持仓当日收益
  9. 回测计算 - 年化收益/最大回撤/夏普比率/波动率
  10. 金额解析 - "13万"→130000, "800万"→8000000

stock_api.py — 股票数据接口

封装 thsdk 库的常用操作,支持:

  1. 股票代码搜索 - 名称/代码/拼音解析为 THSCODE
  2. 实时行情 - 价格/涨跌幅/成交量/金额
  3. K线数据 - 1m~月线多周期,含均线/量能异动计算
  4. 分时与盘口 - 日内分时/五档盘口/买卖深度
  5. 大单流向 - 大单/集合竞价异动
  6. 板块行情 - 行业/概念板块列表/行情/成分股
  7. 智能选股 - 问财自然语言选股
  8. 多股票对比 - 批量行情+归一化走势

快速使用

# 导入脚本
import sys
sys.path.insert(0, '/path/to/fund-analyzer-plus/scripts')
from fund_api import FundAPI

api = FundAPI()

# 1. 解析基金代码(支持名称/简称输入)
code = api.resolve_fund_code("易方达蓝筹")  # -> "005827"
code = api.resolve_fund_code("中证兴业信用债")  # -> "003429"(模糊匹配)
code = api.resolve_fund_code("003429")      # -> "003429"

# 2. 获取最新净值
nav = api.get_estimated_nav("003429")
# 返回: {"fundcode": "003429", "name": "...", "dwjz": "1.1946", "gszzl": "0.01", "ljjz": "1.4436", ...}

# 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("易方达")   # 按名称
results = api.search_fund("YFD")     # 按拼音首字母缩写

# 5. 带降级的净值获取
result = api.get_nav_with_fallback("003429")
# 返回: {"nav": "1.1946", "date": "2026-08-14", "source": "lsjz_api", "type": "confirmed"}

# 6. 基金详情
detail = api.get_fund_detail("003429")
# 返回: {"name": "...", "manage_fee": "0.15%", "establish_date": "2016-11-04", ...}

# 7. 金额解析
amount = api.parse_amount("13万")  # -> 130000.0

# 8. 收益计算
ret = api.calculate_return([{"code": "003429", "amount": 130000}])
# 返回: {"total_return": 13.0, "daily_return_rate": 0.01, ...}

# 9. 回测计算
bt = api.calculate_backtest([{"code": "003429", "amount": 130000}], days=365)
# 返回: {"portfolio_return": 2.02, "fund_details": [{"sharpe_ratio": 0.45, "max_drawdown": -1.15, ...}]}

股票数据快速使用

from stock_api import StockAPI

with StockAPI() as api:
    # 搜索股票
    result = api.search_symbol("宁德时代")  # -> {"THSCODE": "USZA300750", ...}

    # 实时行情
    quote = api.get_realtime_quote("宁德时代")

    # K线数据
    klines = api.get_klines("宁德时代", interval="5m", count=78)

    # 板块行情
    block_data = api.get_block_market_data("半导体")
    constituents = api.get_block_constituents("半导体")

    # 问财选股
    stocks = api.wencai_select("连续3日主力净流入,换手率大于5%,非ST")

数据接口说明

接口 URL 用途
最新净值 https://api.fund.eastmoney.com/f10/lsjz 获取最新确认净值和日涨跌幅
历史净值 http://fund.eastmoney.com/pingzhongdata/{code}.js 获取完整历史净值数据
基金列表 http://fund.eastmoney.com/js/fundcode_search.js 获取所有基金信息用于搜索
基金详情 https://fundf10.eastmoney.com/jbgk_{code}.html 获取基金规模/经理/费率等
持仓详情 https://fundf10.eastmoney.com/ccmx_{code}.html 获取前十大重仓股
股票数据 thsdk 库 同花顺行情接口(游客模式可用)

容错机制

  1. 基金名称输入:自动调用基金列表API解析为代码
  2. API失败降级:lsjz API → pingzhongdata最新一条 → 提示使用浏览器工具 → 提示使用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脚本获取(推荐):
  2. 调用 scripts/fund_api.py 中的 FundAPI
  3. api.get_estimated_nav(代码) - 获取最新确认净值和日涨跌幅
  4. api.get_nav_with_fallback(代码) - 带降级的净值获取
  5. api.get_historical_nav_as_list(代码) - 获取历史净值
  6. api.get_fund_detail(代码) - 获取基金详情(规模/经理/费率)
  7. api.resolve_fund_code(名称) - 自动解析基金名称/简称为代码
  8. api.calculate_return(持仓) - 计算持仓当日收益
  9. api.calculate_backtest(持仓, days) - 回测计算(年化/回撤/夏普)
  10. 优点:无需浏览器,速度快,支持历史数据和计算

  11. 浏览器工具(备用,用于确认净值或获取脚本未覆盖的数据):

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

  16. lsjz API(Python脚本内部使用):

  17. 通过 api.fund.eastmoney.com/f10/lsjz 获取最新确认净值
  18. Python 脚本已封装此接口,无需手动调用
  19. 注意:该接口返回的是确认净值(非盘中估算),数据更新于收盘后

  20. 所有方案均失败时

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

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

重要: - 绝对不要把周一到周五的普通工作日误判为非交易日 - 绝对不要忽略法定节假日(端午、中秋等可能恰逢周五/周一) - 绝对不要把估算净值当作确认净值使用,必须在报告中明确标注 - 绝对不要直接使用 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. lsjz API(备用):https://api.fund.eastmoney.com/f10/lsjz?fundCode={代码}(Python脚本已封装此接口,返回确认净值和日涨跌幅) 4. WebSearch(兜底):搜索"{基金名称} 最新净值"从第三方获取

注意:WebFetch 抓取天天基金网页面获取的是缓存旧数据,不可直接用于获取净值。静态信息(基金名称、规模、经理等)使用 WebFetch 没有问题。 注意:旧的估算净值接口 fundgz.1234567.com.cn 已失效,不要使用。

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-plus/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线
板块行情 板块模式 查看半导体板块行情

股票分析模块

基于同花顺数据接口的高级股票分析功能,与基金分析无缝衔接

推荐用法:stock_api.py 封装

优先使用 scripts/stock_api.py 中的 StockAPI,它封装了 thsdk 的常用操作,提供与 fund_api.py 一致的接口风格(自动代码解析、错误处理、批量查询):

from stock_api import StockAPI

with StockAPI() as api:
    # 所有方法都支持直接传入中文名称,自动解析为 THSCODE
    quote = api.get_realtime_quote("宁德时代")       # 实时行情
    klines = api.get_klines("宁德时代", "5m", count=78)  # K线
    depth = api.get_depth("宁德时代")                  # 五档盘口
    block = api.get_block_market_data("半导体")         # 板块行情
    stocks = api.wencai_select("连续3日主力净流入")    # 问财选股
    comparison = api.compare_stocks(["贵州茅台", "五粮液"])  # 多股对比

以下文档展示 thsdk 底层接口的详细用法,供需要直接调用 thsdk 或 stock_api.py 未覆盖的场景使用。

快速开始

它能做什么?

模式 场景 一句话说明
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

⚠️ 游客模式限制:游客账户下 market_data_index 可能返回空数据(权限限制)。如需指数行情,建议使用 WebSearch 搜索"{指数名称} 今日行情"作为降级方案。stock_api.pyget_index_data() 方法已内置此提示。


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

🤖 AI 评测

这个Skill质量不错,功能覆盖全面,基金和股票分析都能做。文档规范做得好,报告输出格式统一,配色清晰,阅读体验好。容错考虑周全,数据获取失败有降级方案。不足是文档比较长,功能说明较复杂,复杂功能对新手不太友好。总体推荐,适合需要基金/股票分析的用户使用。

📊 多维度评分

适应性4.7
规范性4.9
有效性4.7
可靠性4.7
可信度5

📁 包含文件 (3 个)

📄 SKILL.md 64 KB
📄 scripts/fund_api.py 34.4 KB
📄 scripts/stock_api.py 17.3 KB