基金风格归因 — 滚动回归权重分析
输入一只量化基金的净值序列文件(.xlsx / .xls / .csv),脚本自动:
- 智能解析 — 自动识别日期列(
%Y%m%d/%Y-%m-%d/ Excel 序列号等)与净值列(优先累计净值,其次复权净值、单位净值) - 对齐 — 通过 Tushare 拉取同期沪深300/中证500/中证1000/中证2000 指数日线,与基金日期按 inner-join 对齐
- 滚动回归 — 对滚动窗口内的收益率做约束最小二乘(SLSQP,权重 ≥ 0,总和 ≤ 1),得出四指数 + "其他"(中证2000 以后)的权重时序
- 输出 — 堆叠面积图 PNG + 权重 Excel
环境依赖
- Python 3.9+(脚本使用
C:/Users/HT/AppData/Local/Programs/Python/Python39/python.exe) - 包:
pandas numpy matplotlib scipy scikit-learn tushare openpyxl xlrd
Tushare Token
不在技能内硬编码。脚本按优先级读取:
- 环境变量
TUSHARE_TOKEN - 本地文件
~/.config/tushare/token(推荐,自动创建被.gitignore)
若都未找到,脚本报错退出(不会降级到模拟数据)。
命令行用法
python scripts/fund_style_regression.py <基金净值文件路径> [选项]
参数:
| 参数 | 说明 | 默认值 |
|------|------|--------|
| file | 基金净值文件路径(.xlsx/.xls/.csv),必填 | — |
| --outdir | 输出目录 | 文件所在目录 |
| --window | 滚动回归窗口(观测点数,非自然日) | 12 |
| --token | Tushare token(优先级最高,命令行传参) | — |
示例:
python scripts/fund_style_regression.py "8、平方和鼎盛中证500指数增强9号私募证券投资基金.xls" --window 12
python scripts/fund_style_regression.py fund_nav.csv --window 20 --outdir ./output
输出文件
| 文件 | 说明 |
|------|------|
| {基金文件名}_风格归因.png | 权重时序堆叠面积图 |
| {基金文件名}_权重明细.xlsx | 权重明细表(含日期、各指数权重、其他权重) |
关键实现细节
- 回归方法:scipy.optimize.minimize (SLSQP),约束 w_i ∈ [0,1]、Σw_i ≤ 1,目标最小化残差平方和
- "其他" = 1 − Σ(四指数权重),代表中证2000 以外的微小盘成分
- 收益率计算:pct_change() 按基金观测频率
- 对齐逻辑:基金日期 inner-join 指数收盘价,若某日是节假日/非交易日自动剔除
微信扫一扫