用户想要查看并对比多只基金的底层持仓,计算它们之间的重叠程度。
输入
用户会提供若干基金代码(如 160615 005788 217027),通过 $ARGUMENTS 传入。
步骤
1. 获取每只基金的基本信息
对每只基金代码,用 WebFetch 抓取:
https://fundf10.eastmoney.com/jbgk_{基金代码}.html
从中提取:基金名称、成立日期、基金类型、跟踪指数。
关键判断:如果是 ETF联接基金,需要找到母ETF代码,后续用母ETF代码查持仓。
2. 获取完整持仓
对每只基金(或其母ETF),用 WebFetch 抓取:
https://fundf10.eastmoney.com/FundArchivesDatas.aspx?type=jjcc&code={基金代码}&topline=9999&year={年}&month={月}
- 完整持仓只在半年报(month=6)和年报(month=12)披露
- 先尝试最近的年报(12月),如果数据不全再尝试半年报(6月)
- 季报只有前10大持仓,如果用户只需要前10大,可以用最近的季度
返回的格式是 JS 变量赋值包裹 HTML 表格(var apidata={content:"<HTML>"}),需要解析其中的股票名称和占净值比例。
3. 计算重叠度
对任意两只基金,计算:
- 重叠股票数:两只基金共同持有的股票数量
- Jaccard系数:重叠股票数 / 合并去重股票数
- 加权重叠度:对每只重叠股票,取两只基金中较小的权重,求和。这个指标反映实际资金暴露的重叠程度。
4. 输出
生成清晰的重叠度矩阵和明细:
- 矩阵形式展示任意两只基金的加权重叠度
- 列出每对基金的重叠股票明细(股票名、两边权重)
- 按重叠度从高到低排序
- 给出分散度评估建议
备用数据源
如果天天基金网接口失败,可尝试新浪财经(仅前10大):
https://finance.sina.com.cn/fund/quotes/{基金代码}/bc.shtml
注意事项
- ETF联接基金的直接持仓几乎全是母ETF份额,必须查母ETF才能看到真实股票持仓
- 同一公司在不同市场上市(如民生银行A股/H股)应视为相关但不完全相同的持仓
- 指数基金的持仓基本就是指数成分股,权重也高度一致