fund-screener
SKILL.md
基金分析技能 (Fund Screener)
通过 AkShare 获取中国公募基金实时数据,基于量化指标筛选优质基金产品。
功能
- 单基金深度分析: 对单只基金进行全方位诊断,包括风险指标、阶段收益、年度收益、资产配置、基金经理、持仓信息
- 全市场批量筛选: 从全市场开放式基金中智能筛选,支持多种模式
- 结果导出: 自动保存 CSV 文件
使用方法
运行此技能需要 Python 3.8+ 和依赖: pip install akshare pandas numpy
# 单基金分析
python fund_screener.py <基金代码> [基金名称]
# 纯债基金筛选(低风险)
python fund_screener.py --bond
# 固收+基金筛选
python fund_screener.py --gushou-plus
# 股票类基金筛选
python fund_screener.py --stock
# Alpha策略筛选(卡玛比率)
python fund_screener.py --stock-alpha
# 自定义参数
python fund_screener.py --bond --min-sharpe 1.0 --max-dd 2 --min-return 2.5
python fund_screener.py --gushou-plus --min-sortino 1.5
python fund_screener.py --stock-alpha --min-calmar 0.8 --min-return 10
# 数量控制
python fund_screener.py --bond --max 50
筛选模式与指标
| 模式 | 参数 | 核心指标 | 默认筛选标准 |
|---|---|---|---|
| 纯债基金 | --bond |
夏普比率 | 夏普>=1.0, 回撤<2%, 收益>2.5% |
| 固收+ | --gushou-plus |
索提诺比率 | 夏普>=0.8, 索提诺>=1.2, 回撤<5%, 收益>3.5% |
| 股票Alpha | --stock-alpha |
卡玛比率 | 卡玛>=1.2, 回撤<30%, 收益>10% |
| 默认/股票 | 无/--stock |
夏普比率 | 夏普>=0.5, 回撤<15%, 收益>3% |
自定义参数
| 参数 | 说明 |
|---|---|
--min-sharpe <value> |
最小夏普比率 |
--min-sortino <value> |
最小索提诺比率 |
--min-calmar <value> |
最小卡玛比率 |
--max-dd <value> |
最大回撤百分比(正数,如5表示<5%) |
--min-return <value> |
最小年化收益率(%) |
--max <value> |
最大分析数量(50-500) |
作为 Python 模块使用
from fund_screener import get_fund_metrics, analyze_single_fund, calculate_sharpe_ratio
# 分析单只基金
metrics = get_fund_metrics('004010', '华泰柏瑞鼎利混合A')
# 深度分析
analysis = analyze_single_fund('004010')
数据来源
- 基金净值: 东方财富网 (via AkShare)
- 基金经理/规模: 基金经理持仓数据
- 资产配置: 基金季度持仓报告
- 数据验证: 百度股市通 (via BrowserMCP,可选增强)
浏览器数据验证(BrowserMCP)
AkShare的部分数据存在已知偏差(基金规模为经理总规模而非单只基金规模、持仓数据可能滞后、收益率计算口径差异)。当BrowserMCP可用时,应在Python筛选生成CSV后,自动通过浏览器访问百度股市通进行数据交叉验证和修正。
前置条件
.mcp.json中已配置 BrowserMCP
完整工作流
Step 1: 运行Python筛选 → 生成初始CSV
Step 2: 读取CSV,识别A/C份额对,去重
Step 3: 逐只基金通过BrowserMCP访问百度股市通
Step 4: 验证并修正三大数据:规模、持仓、收益
Step 5: 更新CSV + 保存验证缓存JSON
Step 6: 输出修正摘要
Step 2: A/C份额去重
同一基金的A/C份额共享相同的持仓和规模,无需重复验证。去重规则:
- 去掉基金名称末尾的A/B/C/E/H后缀进行分组
- 每组只验证一个份额(代码数字较小的优先)
- 验证后的持仓和规模数据复制到同组所有份额
- 近1年收益因费率差异不同,每个份额单独取值(或仅验证A份额)
Step 3: 浏览器验证协议
对每只唯一基金,访问两个页面:
3a. 持仓页 — 获取前5大持仓
URL: https://gushitong.baidu.com/fund/ab-{code}?mainTab=%E6%8C%81%E4%BB%93
使用 browser_navigate 访问后 browser_snapshot 获取快照。在快照文本中查找:
十大重仓股票 更新日期:YYYY-MM-DD
股票A名 X.XX% 股票B名 X.XX% 股票C名 X.XX% ...
提取前5个股票名称,用 , 连接作为"前5大持仓"。
异常处理:
- 若显示
十大重仓股票 暂无数据→ 保留CSV原值(港股通基金常见) - 若页面超时 → 重试1次,仍失败则跳过
- 若显示
服务异常→ 等待2秒后重试
3b. 简况页 — 获取规模和近1年收益
URL: https://gushitong.baidu.com/fund/ab-{code}?mainTab=%E7%AE%80%E5%86%B5
使用 browser_navigate 访问后 browser_snapshot 获取快照。在快照文本中查找:
- 近1年收益: 寻找
近一年附近的百分比数值,如+53.47% 近一年→ 提取53.47 - 基金规模: 寻找
规模附近的数值,格式如X.XX亿→ 提取X.XX
注意:部分基金的规模在简况页未直接显示数值,可尝试从持仓页的快照中查找。
Step 4: 修正CSV
对每只验证过的基金:
- 若百度的"前5大持仓"与CSV不同 → 用百度数据覆盖CSV
- 若百度的"基金规模"与CSV不同 → 用百度数据覆盖CSV
- 若百度的"近1年收益"与CSV不同 → 用百度数据覆盖CSV
- 对A/C份额对:将A份额的持仓和规模数据同步到C份额
Step 5: 保存验证缓存
更新 baidu_fund_data.json 文件,Schema如下:
{
"004814": {
"规模": "189.25",
"近1年": "53.63",
"前5大持仓": "紫金矿业, 徐工机械, 新华保险, 中国重汽, 三一重工",
"持仓更新日期": "2025-12-31",
"验证时间": "2026-02-24"
}
}
Step 6: 输出修正摘要
验证完成后打印汇总表:
=== 数据验证摘要 ===
总计检查: 25 只(去重后)
规模修正: 18 只
持仓修正: 14 只
收益修正: 4 只
跳过(暂无数据): 2 只
性能优化
- 每次页面加载后等待1-2秒,避免触发反爬
- 25只唯一基金约需50次页面加载,预计耗时5-8分钟
- 可利用缓存JSON:若当天已验证过,跳过重复验证
风险提示
历史业绩不代表未来表现。本工具仅供学习研究,不构成投资建议。
Weekly Installs
18
Repository
sososun/mutual-…d-skillsGitHub Stars
3
First Seen
Feb 28, 2026
Security Audits
Installed on
cursor17
gemini-cli17
amp17
cline17
github-copilot17
openclaw17