docs: 按git创建日期重命名文档为YYYYMMDD_中文名称格式
This commit is contained in:
172
docs/experiments/20260621_011_科创板ETF接入测试.md
Normal file
172
docs/experiments/20260621_011_科创板ETF接入测试.md
Normal file
@@ -0,0 +1,172 @@
|
||||
# 科创板ETF接入与收益对比实验
|
||||
|
||||
## 1. 背景描述
|
||||
|
||||
### 问题发现
|
||||
在轮动策略回测中,尝试将科创板指数(000688.SH)作为A股风险资产替代创业板时,数据获取失败:
|
||||
|
||||
```
|
||||
x 588000.SH: HTTP 404
|
||||
```
|
||||
|
||||
### 根因分析
|
||||
数据源 `tushare_source.py` 中的 `_is_etf_code()` 方法仅识别以下ETF代码前缀:
|
||||
- `51xxxx.SH` (上交所ETF)
|
||||
- `52xxxx.SH` (上交所ETF)
|
||||
- `15xxxx.SZ` (深交所ETF)
|
||||
- `16xxxx.SZ` (深交所ETF)
|
||||
|
||||
科创板ETF代码格式为 `58xxxx.SH`,不在识别列表中,导致Tushare API无法正确识别ETF类型。
|
||||
|
||||
---
|
||||
|
||||
## 2. 实验设置
|
||||
|
||||
### 2.1 数据源修复验证
|
||||
|
||||
**测试内容**:验证Tushare是否支持科创板ETF数据获取
|
||||
|
||||
**测试代码**:使用 `.env` 中的 TUSHARE_TOKEN 直接调用 Tushare API
|
||||
|
||||
**测试标的**:
|
||||
| 标的 | 类型 | 代码 |
|
||||
|------|------|------|
|
||||
| 科创50ETF | ETF | 588000.SH |
|
||||
| 科创板指 | 指数 | 000688.SH |
|
||||
| 其他科创板ETF | ETF | 588080.SH, 588050.SH, 588060.SH |
|
||||
|
||||
### 2.2 收益对比实验
|
||||
|
||||
**对比场景**:
|
||||
| 版本 | A股风险资产配置 |
|
||||
|------|----------------|
|
||||
| 创业板版(基准) | 仅创业板指(399006.SZ) |
|
||||
| 科创板版(测试) | 仅科创板指(000688.SH) |
|
||||
| 双A股版 | 创业板指 + 科创板指 |
|
||||
|
||||
**回测参数**:
|
||||
```yaml
|
||||
backtest:
|
||||
start_date: '2020-01-10'
|
||||
factor:
|
||||
n_days: 25
|
||||
type: slope_r2
|
||||
rotation:
|
||||
select_num: 1
|
||||
weight: rank
|
||||
diversified: true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Commit代码版本
|
||||
|
||||
### 修复提交
|
||||
```
|
||||
7f2a968 fix(datasource): ETF代码识别支持科创板(58)和沪市新ETF(56)前缀
|
||||
```
|
||||
|
||||
### 修改内容
|
||||
文件:`datasource/tushare_source.py`
|
||||
|
||||
```python
|
||||
def _is_etf_code(self, code: str) -> bool:
|
||||
"""判断是否为ETF代码"""
|
||||
# ETF代码:51xxxx.SH, 52xxxx.SH, 56xxxx.SH, 58xxxx.SH(科创板), 15xxxx.SZ, 16xxxx.SZ
|
||||
import re
|
||||
if not re.match(r'^\d{6}\.(SZ|SH)$', code):
|
||||
return False
|
||||
prefix = code[:2]
|
||||
return prefix in ['51', '52', '56', '58', '15', '16']
|
||||
```
|
||||
|
||||
**新增前缀**:
|
||||
- `58` - 科创板ETF (如 588000.SH 科创50ETF)
|
||||
- `56` - 沪市新ETF (如 560150.SH 红利低波ETF泰康)
|
||||
|
||||
---
|
||||
|
||||
## 4. 实验结果
|
||||
|
||||
### 4.1 数据源验证结果
|
||||
|
||||
| 标的代码 | 数据条数 | 状态 |
|
||||
|---------|---------|------|
|
||||
| 588000.SH | 1355 rows | ✅ 成功 |
|
||||
| 000688.SH | 1565 rows | ✅ 成功 |
|
||||
| 588080.SH | 1355 rows | ✅ 成功 |
|
||||
|
||||
**结论**:Tushare `fund_daily` 接口完全支持科创板ETF数据获取,问题在于项目代码识别逻辑。
|
||||
|
||||
### 4.2 收益对比结果
|
||||
|
||||
| 指标 | 创业板版 | 科创板版 | 双A股版 |
|
||||
|------|---------|---------|---------|
|
||||
| **年化收益率** | 48.51% | 45.00% | **38.95%** |
|
||||
| **累计收益率** | 1053.08% | 894.46% | **664.12%** |
|
||||
| **最大回撤** | -26.33% | -26.33% | -26.80% |
|
||||
| **夏普比率** | 1.34 | 1.27 | **1.14** |
|
||||
| **卡尔曼比率** | 1.84 | 1.71 | **1.45** |
|
||||
| **胜率** | 54.91% | 55.06% | 54.56% |
|
||||
| **调仓次数** | 182 | 189 | 205 |
|
||||
|
||||
### 4.3 收益差异分析
|
||||
|
||||
| 对比项 | 年化收益差异 | 累计收益差异 |
|
||||
|--------|------------|------------|
|
||||
| 创业板版 vs 科创板版 | -3.51% | -158.62% |
|
||||
| 创业板版 vs 双A股版 | **-9.56%** | **-388.96%** |
|
||||
| 科创板版 vs 双A股版 | -6.05% | -230.34% |
|
||||
|
||||
---
|
||||
|
||||
## 5. 结论与建议
|
||||
|
||||
### 5.1 代码层面结论
|
||||
|
||||
✅ **修复有效**:添加 `58` 和 `56` 前缀后,科创板ETF数据获取成功
|
||||
|
||||
### 5.2 配置层面结论
|
||||
|
||||
❌ **不建议科创板替代创业板**
|
||||
- 创业板版年化收益 48.51% > 科创板版 45.00%
|
||||
|
||||
❌ **不建议创业板+科创板双配置**
|
||||
- 双A股版收益最低(38.95%),比创业板版下降 9.56%
|
||||
|
||||
### 5.3 原因分析
|
||||
|
||||
双A股配置收益下降的原因:
|
||||
|
||||
1. **组内竞争**:创业板和科创板同为高波动A股资产,在同一组内竞争出线名额
|
||||
2. **信号稀释**:资产池从11个增至12个,优质信号被稀释
|
||||
3. **相关性高**:创业板与科创板走势高度相关,分散化效果有限
|
||||
|
||||
### 5.4 最终建议
|
||||
|
||||
| 配置方案 | 推荐程度 | 年化收益 |
|
||||
|---------|---------|---------|
|
||||
| **创业板单配置** | ✅ 推荐 | 48.51% |
|
||||
| 科创板单配置 | ⚠️ 不推荐 | 45.00% |
|
||||
| 创业板+科创板双配置 | ❌ 不推荐 | 38.95% |
|
||||
|
||||
---
|
||||
|
||||
## 6. 附录
|
||||
|
||||
### ETF代码前缀完整列表
|
||||
|
||||
| 前缀 | 交易所 | 类型 | 示例 |
|
||||
|------|-------|------|------|
|
||||
| 51 | 上交所 | ETF | 518880.SH (黄金ETF) |
|
||||
| 52 | 上交所 | ETF | 520030.SH |
|
||||
| 56 | 上交所 | 新ETF | 560150.SH (红利低波ETF泰康) |
|
||||
| 58 | 上交所 | 科创板ETF | 588000.SH (科创50ETF) |
|
||||
| 15 | 深交所 | ETF | 159915.SZ (创业板ETF) |
|
||||
| 16 | 深交所 | ETF | 160723.SZ (原油ETF) |
|
||||
|
||||
### 相关文件
|
||||
|
||||
- 修复代码:`datasource/tushare_source.py#L326-L333`
|
||||
- 配置文件:`rotation/config_simple.yaml`
|
||||
- 实验结果:`rotation/results/cyb_kcb_dual/comparison_*.json`
|
||||
Reference in New Issue
Block a user