5.1 KiB
5.1 KiB
实验记录 001: 同大类扩充对轮动策略的影响
实验信息
| 项目 | 内容 |
|---|---|
| 实验编号 | 001 |
| 实验日期 | 2026-05-06 |
| 实验类型 | A/B对比测试 |
| 研究问题 | diversified=true模式下,添加同大类新标地对策略绩效的影响 |
1. 实验背景
理论假设
diversified=true 模式的选股逻辑:
Step 1: 类内竞争 → 每个 market 大类只保留得分最高的1只标的(大类冠军)
Step 2: 跨类排序 → 从大类冠军中按得分从高到低选 Top 3
核心假设:
- 添加同大类新标的不会增加跨大类分散度(每大类还是只输出1只)
- 可能增加类内切换频率,导致额外调仓成本
- 额外切换时机可能不理想,侵蚀收益
2. 实验设计
A/B组配置
| 组别 | 标的数量 | 美股大类标的 | 其他大类 |
|---|---|---|---|
| A组(对照组) | 11只 | 纳指100 (NDX) | A股2、港股2、日本1、欧洲1、商品3、固收1 |
| B组(实验组) | 12只 | 纳指100 + 标普500 (SPX) | 同A组 |
关键差异
B组在美股大类(market="US")中添加了标普500:
- A组:美股大类只有纳指100,自动成为大类冠军
- B组:美股大类有纳指100和标普500,需要类内竞争决定冠军
3. 回测结果
数据获取情况
修复了 socks5:// → socks5h:// 的代理问题后,所有 YFinance 数据成功获取:
✓ SSH 隧道已建立: socks5h://127.0.0.1:1080
下载 NDX (纳指100) - YFinance... ✓ 1845 条
下载 SPX (标普500) - YFinance... ✓ 1845 条
其他标的均成功获取
绩效对比
| 指标 | A组(无SPX) | B组(有SPX) | 差异 |
|---|---|---|---|
| 标的数量 | 11只 | 12只 | +1 |
| 累计收益 | 1467.35% | 1176.26% | -291.09% |
| CAGR | 48.10% | 43.82% | -4.28% |
| Sharpe | 2.21 | 2.06 | -0.15 |
| MaxDD | -17.33% | -17.18% | +0.14%(略好) |
| Calmar | 2.78 | 2.55 | -0.23 |
| 日胜率 | 56.45% | 56.11% | -0.34% |
| 调仓次数 | 459次 | 501次 | +42次 |
| 年均调仓 | 66.0次 | 72.1次 | +6.1次 |
4. 关键发现
发现1:跨类分散不变
添加标普500后,美股大类在最终持仓中的占比不变:
- 美股大类始终只有1只冠军进入Top3候选池
- 跨大类分散度没有增加
发现2:调仓次数增加
- B组调仓次数增加42次(从459→501)
- 类内切换更频繁(纳指100 ↔ 标普500)
- 额外调仓成本侵蚀收益
发现3:绩效反而变差
B组绩效全面下滑:
├─ 累计收益 -291%
├─ CAGR -4.28%
├─ Sharpe -0.15
├─ Calmar -0.23
└─ 原因:类内切换时机不佳 + 额外调仓成本
发现4:类内切换逻辑
美股大类竞争示例:
某日得分:
纳指100: 4.7 → 美股冠军(持有纳指ETF)
标普500: 3.5 → 淘汰
另一天得分:
纳指100: -1.0(下跌)
标普500: 2.5 → 美股冠军(切换到标普ETF)
问题:切换时机可能滞后,错过最佳窗口
5. 实验结论
核心结论
| 假设 | 实证结果 |
|---|---|
| 添加同大类标的不增加跨类分散 | ✓ 验证通过 |
| 可能增加调仓次数 | ✓ 验证通过(+42次) |
| 额外切换可能侵蚀收益 | ✓ 验证通过(累计收益-291%) |
策略建议
diversified=true 模式下的标的池优化策略:
✗ 不要盲目添加同大类新标的
→ 可能增加切换频率,侵蚀收益
→ 每大类保持1-2只代表性标的即可
✓ 应该添加新大类(增加跨类分散)
→ 印度、越南、短债等新大类
→ 真正扩大 Top 3 候选池
→ 提升跨大类分散度
✓ 类内标的选择原则
→ 选择该大类最具代表性的标的
→ 避免风格过度细分导致频繁切换
→ 例:美股选纳指100即可(成长代表)
6. 技术修复记录
代理问题修复
本次实验过程中发现了 SSH SOCKS5 隧道的 IPv6 问题:
问题:
# 原配置(失败)
proxy_url = "socks5://127.0.0.1:1080"
# 本地DNS解析 → IPv6地址 → SSH隧道拒绝IPv6 → 连接失败
修复:
# 新配置(成功)
proxy_url = "socks5h://127.0.0.1:1080"
# 'h'表示远程DNS解析 → 代理服务器只用IPv4 → 连接成功
修改文件:
core/datasource/hybrid_source.pycore/datasource/yfinance_source.py
7. 相关文件
| 文件 | 说明 |
|---|---|
tests/experiments/ab_test_spx.py |
A/B测试脚本 |
results/ab_test_spx.csv |
测试结果数据 |
docs/轮动策略核心逻辑_v2.md |
策略核心逻辑文档 |
8. 后续研究方向
- 新大类扩充实验:添加印度NIFTY、短债等新大类,验证跨类分散效果
- 类内切换时机分析:深入分析纳指100 vs 标普500切换的具体时间点
- 最佳大类数量研究:多少个大类是最优配置?
实验记录版本: v1.0 最后更新: 2026-05-06