feat(framework_v2): 对齐 V1 配置,实现指数信号→ETF收益回测

配置对齐:
- config_simple.yaml 严格对齐 V1 config.yaml
  * 11 个标的覆盖 7 个策略分组
  * 回测区间: 2020-01-01 ~ 至今
  * 选股数量: Top-3,强制分散化
  * V3 动态阈值(短债动量参考)
  * 溢价控制启用(HK/US 10%阈值)

策略实现:
- SimpleRotationStrategy 支持 signal_source/trade_source 分离
  * get_codes() 同时获取信号和交易标的
  * compute_factors() 只使用 signal_source 计算因子
  * _execute_backtest() 使用 trade_source 计算收益
  * 支持跨市场场景(指数信号 → ETF收益)

回测验证:
- 成功运行端到端回测
- 获取 21 个标的(11 signal + 10 trade)
- 平均仓位 84.42%
- ⚠️ 已知问题: Flask API 只返回缓存数据(2026年),需修复

修复项:
- StrategyBase.run() 兼容信号矩阵(移除 'weight' 列假设)
This commit is contained in:
2026-05-24 14:58:41 +08:00
parent 43ce8056f1
commit e6657bd2cc
4 changed files with 264 additions and 52 deletions

View File

@@ -186,7 +186,12 @@ class StrategyBase(ABC):
# 4. 仓位管理
print("[4/5] 仓位管理...")
positions = self.manage_positions(signals)
print(f" 平均持仓: {positions['weight'].sum().mean():.2%}")
# positions 可能是信号矩阵或权重矩阵,计算平均仓位
if hasattr(positions, 'sum'):
avg_position = positions.sum(axis=1).mean() if hasattr(positions.sum(axis=1), 'mean') else 0
print(f" 平均仓位: {avg_position:.2%}")
else:
print(f" 仓位管理完成")
# 5. 执行回测
print("[5/5] 执行回测...")