Commit Graph

9 Commits

Author SHA1 Message Date
c15e418ead feat: 短债动态阈值仓位分配机制
设计理念:
- 每份仓位 = 1/select_num
- 每个选中标的持有基础份额 1/select_num
- 被排除标的的份额归短债(BOND)继承

信号生成:
- generate()返回signal和signal_ranks
- _grouped_selection_with_ranks()返回标的和排名

仓位分配:
- DynamicThresholdAllocator.allocate()计算权重
- 短债继承被排除标的的份额

示例(短债排名2,select_num=3):
- NDX排名1 → 1/3(基础)
- 短债排名2 → 1/3(基础)+ 1/3(继承)= 2/3
- 排名3的份额被短债继承
2026-05-18 23:07:21 +08:00
2c69c6136a fix(selector): 短债作为动态过滤阈值(修正逻辑)
修正之前的误解,正确实现用户意图:
- 短债正常参与动量排序,没有任何特殊处理
- 短债排名 <= select_num → 短债被选中,比短债弱的标的被排除
- 短债排名 > select_num → 短债被排除(有更好的选择)
- effective_threshold = min(短债排名, select_num)

验证结果:
- 场景1:短债排名3 → 选[NDX, A, 短债],排名>3排除
- 场景2:短债排名2 → 选[NDX, 短债],排名>2排除(只持2只)
- 场景3:短债排名4 → 选Top3正常,短债被排除
2026-05-18 22:54:09 +08:00
98597aa369 feat(selector): 短债作为动态现金底仓
设计理念变更:
- 短债(BOND大类)永远参与持仓,不受排名过滤影响
- 其他大类冠军需要排名 <= select_num才能入选
- 当其他标动量都不强时,仓位自动集中到短债(现金)
- 永远不会真正空仓,短债作为现金底仓始终存在

测试验证:
- 正常情况:[NDX, 399006.SZ, 931862.CSI](2动量强+1现金)
- 极端情况:[931862.CSI](仓位集中到现金)
2026-05-18 22:42:08 +08:00
740135e5fb feat(selector): 大类冠军动量排名二次过滤
新增过滤逻辑:
- 大类冠军必须在全局排名Top select_num范围内才有效
- 假设短债排名第5,select_num=3,则短债被排除
- 避免持有动量过低(排名靠后)的防御资产

示例:
- NDX (排名1) -> 选中
- 399006.SZ (排名2) -> 选中
- N225 (排名3) -> 选中
- 931862.CSI (排名5 > 3) -> 排除
2026-05-18 22:35:41 +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
acec96539b fix(strategy): 添加负动量空仓机制避免持仓惯性亏损
当所有候选标的动量得分低于min_score时,策略自动清仓而非继续持有之前的负动量组合。

修复问题:
- 旧逻辑:target为空时继续持有current_held(负动量标的)
- 新逻辑:target为空时清仓(current_held='')

回测效果:
- 累计收益从11872%提升至14580%(+2708%)
- 最大回撤从-71.9%改善至-61.1%(+10.9%)
- 2000年互联网泡沫期间空仓77天(24.8%)
- 2001年空仓31天,收益从-48.7%改善至-41.1%
2026-05-16 11:42:36 +08:00
19131c41dd fix: 数据源路由修复与因子计算改进
1. 修复期货路由逻辑:NYMEX期货(.NYM)走YFinance而非Tushare
2. 添加SSH隧道路径修复(原引擎)
3. 因子计算只使用close列(处理部分指数只有收盘价的情况)
4. 添加数据不足和缺失率剔除日志

收益对比:
- 原引擎(剔除国债): 累计1804%, 调仓459次
- 新框架: 累计772%, 调仓1276次

差异原因待查:
- 国债剔除逻辑不同
- 调仓频率差异
2026-05-12 00:47:43 +08:00
c5a41b71ae feat(signals): 完善TopNSelector分散化选股和调仓控制
- 支持group_mapping分组映射(替代group_info列)
- 每大类选Top1,然后跨类排序选Top3
- 添加调仓周期控制(rebalance_days)
- 添加调仓阈值检查(rebalance_threshold)
- 支持最小得分过滤(min_score过滤负分)
2026-05-11 23:23:37 +08:00
69081297c5 feat(strategies): 实现定制组件(因子、信号生成器、风控)
- strategies/shared/factors/momentum.py: MomentumFactor/TrendFactor/ReversalFactor/VolatilityFactor
- strategies/shared/signals/selectors.py: TopNSelector/TrendFollower/ReversalTrader
- strategies/shared/risk/controls.py: StopLossControl/PositionLimitControl/PremiumControl
- strategies/shared/__init__.py: 统一入口导出所有定制组件
2026-05-11 23:09:35 +08:00