Commit Graph

14 Commits

Author SHA1 Message Date
74a664d4ff feat: V3动态阈值实施方案落地
核心逻辑:
1. config.yaml新增bond_threshold配置块
2. selectors.py新增动态阈值逻辑:
   - _get_dynamic_threshold(): 阈值=短债动量×ratio
   - _grouped_selection(): BOND不参与竞争,空余仓位填充短债
3. strategy.py传入bond_threshold_config

回测验证:
- 最终净值: 292.56
- 累计收益: 29155.96%
- 持仓3只: 92.3%(满仓率提升)
- 短债填充: 27.7%时间启用(空余仓位)

信号特征:
- 短债可重复出现表示仓位占比
- 例如 "NDX,931862.CSI,931862.CSI" → NDX 33%, 短债 67%
2026-05-18 23:58:10 +08:00
8476d0e7cd docs(config): 补充短债指数收益归因实证结论
实证分析结论:
- 标的收益占比:约17%(债券本身增长)
- 决策收益占比:约83%(避险决策贡献)

核心发现:
短债指数的价值主要来自正确避险决策,而非债券本身增长。
这验证了动量轮动策略的核心逻辑:通过仓位选择规避下跌风险。
2026-05-18 01:02:58 +08:00
79c6ab8620 feat(rotation): 恢复短债指数931862.CSI作为BOND大类防御资产
配置变更:
- 恢复使用931862.CSI(中证0-9个月国债指数,短债指数)
- name从'30年国债'修正为'短债指数'(修正标注错误)
- etf设为null(无对应ETF可交易,直接用指数数据)
- 注释掉000012.SH配置(上证国债指数)

收益对比验证:
| 配置 | 最终净值 | 累计收益 | 说明 |
|------|---------|---------|------|
| 931862.CSI(短债) | 264.54 | 26354% | ✓ 当前配置 |
| 000012.SH(综合国债) | 216.30 | 21530% | 已注释 |
| 收益差异 | +48.24 | +4824% | 短债高18.2% |

决策原因:
1. 短债指数久期<1年,波动极小,熊市防御效果最佳
2. 000012.SH是综合国债指数,包含短债到长债,波动较大
3. 之前000012.SH错误映射到511520.SH(政金债ETF),指数-ETF不匹配
4. 931862.CSI虽无对应ETF,但数据覆盖19年(2007开始),回测充分

数据验证:
- 931862.CSI: 4335条数据 (2007-12-31 ~ 2026-05-14)
- 数据年数: 约19年

关键发现:
- 短债指数因其极低波动特性,在熊市动量稳定
- 红利低波(H30269)归类为A股,与创业板竞争A股Top1
- 短债指数(931862)单独作为BOND大类,自动入选
- 实现红利低波+短债同时持仓的双重防御机制
2026-05-17 00:55:03 +08:00
b419701c77 feat(rotation): 红利低波归类A股提升收益52%
配置变更:
- H30269.CSI(红利低波)从BOND改为A股大类
- 931862.CSI(短债指数)保持BOND大类
- start_date调整为2002-01-01

回测验证:
- 新配置净值264.54,累计收益26354%
- 旧配置净值173.83,累计收益17283%
- 收益提升52%

关键发现:
- 红利低波作为A股可与创业板指竞争,优胜者入选
- 短债单独作为BOND自动入选
- 之前同属BOND时只能选1个,无法同时持有
- 新配置可实现'红利低波+短债'同时持仓
2026-05-16 23:28:23 +08:00
969385f39c feat(rotation): 采用红利低波+短债指数组合作为防御类资产
配置变更:
- H30269.CSI(红利低波指数)归类为BOND大类
- 931862.CSI(短债指数)归类为BOND大类
- 添加正确的标注说明(注明实际是红利低波和短债指数)

防御效果分析:
- 红利低波提供'类债券'股票防御(高股息+低波动)
- 短债指数提供真正的债券防御(极低波动)
- 2008年熊市短债指数持仓172天(55%),贡献主要防御效果

回测验证:
- 组合配置净值173.83,累计收益17283%
- 比单红利低波配置高50%(115.14 → 173.83)
- 2008年少亏23%(-43.87% → -20.85%)

删除旧报告:红利低波防御配置分析报告.md
创建新报告:防御类资产组合配置分析报告.md
2026-05-16 22:54:51 +08:00
48bf3fde2e fix(rotation): 纠正指数代码标注,H30269.CSI为红利低波而非国债
配置变更:
- H30269.CSI正确标注为'红利低波'(中证红利低波动指数)
- 移除错误配置的931862.CSI(中证0-9个月国债指数,无对应ETF)
- 红利低波归类为DEFENSIVE大类(防御类资产)

分析发现:
- 之前'双国债配置'实际是红利低波+短债指数组合
- 红利低波具有'类债券'属性(高股息+低波动)
- 但本质仍是股票,熊市防御有限
- 短债指数才是2008年防御的主力

收益对比:
- 错误标注(双国债): 净值173.83
- 正确配置(红利低波): 净值115.14
- 差异原因:移除短债指数后防御能力下降

删除旧报告:国债配置实证分析报告.md
创建新报告:红利低波防御配置分析报告.md
2026-05-16 22:41:53 +08:00
306b4022da feat(rotation): 增加双国债配置实现动态久期选择
配置变更:
- 移除错误标注的H30269.CSI(标注为中证红利低波)
- 添加10年国债(931862.CSI)配置,久期8年,波动3-5%
- 添加30年国债(H30269.CSI)配置,久期20年,波动10-15%
- 修正ETF映射:931862→512890, H30269→511090

实证分析结果:
- 方案C(双国债)累计收益17283%,为三种配置最优
- 动态久期选择机制:牛市选30年获取弹性,熊市选10年增强防御
- 债券持仓占比43.9%(10年18.6% + 30年25.3%)
- 详细分析见 docs/experiments/国债配置实证分析报告.md
2026-05-16 22:21:27 +08:00
a475e1b314 feat(strategy): 分组选股增强-大类冠军二次过滤确保组合动量达标
核心改进:
- selectors.py: _grouped_selection增加二次过滤,大类冠军得分不足时跳过该大类
- strategy.py: min_score参数可配置,从策略配置读取
- config.yaml: min_score=0.0(过滤负动量),保留注释说明更高阈值的权衡

设计原则:
- 组合中每个标的动量得分都必须>=min_score
- 大类冠军得分不足时不强制持有,持仓数量动态调整
- min_score=0保持简单稳健,更高阈值虽能改善回撤但可能错过机会

实验验证:
- min_score=0: 累计收益14580%, 最大回撤-61.1%, 空仓131天
- min_score=0.02: 累计收益17052%, 最大回撤-61.0%, 但2000年恶化
- 决策:保持min_score=0,避免阈值选择的trick问题
2026-05-16 20:38:57 +08:00
85c20b4626 refactor(strategy): 取消数据不足标的剔除逻辑,保留所有标的以暴露策略问题
- compute_factors: 不剔除数据不足/缺失率高的标的
- 改为警告并保留,因子值NaN时信号生成自动跳过
- 目的:暴露策略自身问题,后续支持更多大类资产
- 回测配置改为start_date=2000-01-01以测试更长历史
2026-05-15 23:18:44 +08:00
763713213c refactor(config): 有色金属标的改用COMEX铜期货替代上期所
- CU.SHF -> HG=F: COMEX铜期货(2000年至今)
- 原因:上期所主力合约数据仅2018年后,COMEX铜数据更长
- ETF保持不变(159980.SZ 有色金属ETF)
- 配合之前替换:AU.SHF->GC=F, CL.NYM->CL=F
2026-05-15 22:21:55 +08:00
4f1207dc4d refactor(config): 商品标的改用COMEX/WTI期货替代上期所
- AU.SHF -> GC=F: COMEX黄金期货(2000年至今)
- CL.NYM -> CL=F: WTI原油期货(2000年至今)
- 原因:上期所主力合约数据仅2018年后,COMEX/WTI数据更长
- ETF保持不变(518880.SH 黄金ETF, 160723.SZ 原油ETF)
2026-05-15 21:57:32 +08:00
020e90aa2b feat(rotation): 添加 Flask API 配置
- 新增 flask_api 配置块
- url: https://k3s.tokenpluse.xyz
- enabled: true
- 支持策略通过远程 API 获取数据
2026-05-13 23:55:26 +08:00
5c98b1cb6a refactor: SSH密钥移到根目录,删除config目录
迁移内容:
- config/hk_ecs.pem → hk_ecs.pem(根目录)
- 删除 config 目录(无其他内容)

路径更新:
- datasource/flask_server.py:默认路径改为 hk_ecs.pem
- strategies/rotation/config.yaml:SSH配置路径
- docker-compose.yml:挂载路径
- build-and-push.sh:示例命令
- README.md:项目结构说明

设计原则:敏感文件集中放在根目录
- .env:环境变量
- hk_ecs.pem:SSH密钥
2026-05-12 22:31:43 +08:00
aeb95a6f4c refactor: 配置文件迁移到策略目录(模块自包含)
迁移内容:
- config/strategies/rotation.yaml → strategies/rotation/config.yaml

路径更新(核心文件):
- strategies/rotation/strategy.py(注释示例)
- scripts/generate_legacy_report.py(config_path)
- run_rotation.py(注释和默认参数)
- datasource/hybrid_source.py(from_yaml示例和fetch_rotation_data)

保留:
- config/strategies/cci.yaml(无对应策略目录,暂保留)

设计原则:策略模块自包含,配置与实现同目录,方便移植和复制

验证:策略加载成功(候选池11只,回测区间2019-01-01 ~ 2026-05-12)
2026-05-12 22:14:35 +08:00