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

@@ -1,38 +1,109 @@
# 简单轮动策略配置
# ETF轮动策略配置V2 框架)
#
# 配置版本: 1.0.0
# 配置版本: 2.0.0
# 最后更新: 2024-04-16
# 策略名称: simple_rotation
# 描述: 基于动量因子的简单 ETF 轮动策略
# 策略名称: rotation
# 描述: 全球资产大类轮动策略 - 复现 V1 结果
# ============================================================
# 元数据
# ============================================================
metadata:
version: "1.0.0"
strategy: "simple_rotation"
description: "简单轮动策略 - 等权分配 + Top-N 选择"
version: "2.0.0"
strategy: "rotation"
description: "全球资产大类轮动策略 V2 - 复现 V1 结果"
last_updated: "2024-04-16"
# ============================================================
# 资产池配置(简化版:只选 3 个标的
# 资产池配置(扁平化设计:严格对齐 V1 config.yaml
# ============================================================
asset_pools:
equity:
assets:
# 中国A股指数
"399006.SZ":
name: "创业板指"
etf: "159915.SZ"
market: "CN_EQUITY"
group: "CN_GROWTH"
signal_source: "399006.SZ"
trade_source: "159915.SZ"
description: "创业板指数"
"H30269.CSI":
name: "中证红利低波"
group: "CN_VALUE"
signal_source: "H30269.CSI"
trade_source: "512890.SH"
description: "红利低波指数"
# 全球市场
"NDX":
name: "纳指100"
etf: "513100.SH"
market: "US_EQUITY"
group: "US_TECH"
signal_source: "NDX"
trade_source: "513100.SH"
description: "纳斯达克100指数"
commodity: {}
fixed_income: {}
"N225":
name: "日经225"
group: "JP_BROAD"
signal_source: "N225"
trade_source: "513520.SH"
description: "日经225指数"
"GDAXI":
name: "德国DAX"
group: "EU_BROAD"
signal_source: "GDAXI"
trade_source: "513030.SH"
description: "德国DAX指数"
"HSI":
name: "恒生指数"
group: "HK_BROAD"
signal_source: "HSI"
trade_source: "159920.SZ"
description: "恒生指数"
"HSTECH.HK":
name: "恒生科技"
group: "HK_TECH"
signal_source: "HSTECH.HK"
trade_source: "513130.SH"
description: "恒生科技指数"
# 商品(使用 COMEX/WTI 期货替代上期所主力合约,数据更长)
"GC=F":
name: "黄金"
group: "COMMODITY"
signal_source: "GC=F"
trade_source: "518880.SH"
description: "COMEX黄金期货2000年至今"
"CL=F":
name: "原油"
group: "COMMODITY"
signal_source: "CL=F"
trade_source: "160723.SZ"
description: "WTI原油期货2000年至今"
"HG=F":
name: "有色金属"
group: "COMMODITY"
signal_source: "HG=F"
trade_source: "159980.SZ"
description: "COMEX铜期货2000年至今"
# 防御类资产:短债指数
# 931862.CSI = 中证0-9个月国债指数短债指数
# 数据范围2007-12-31开始约19年数据
# 久期:极短(<1年波动极小熊市防御效果最佳
# 收益归因标的收益约17%决策收益约83%
# 注意无对应ETF可交易直接使用指数数据计算动量和收益
"931862.CSI":
name: "短债指数"
group: "FIXED_INCOME"
signal_source: "931862.CSI"
trade_source: "931862.CSI"
description: "中证0-9个月国债指数久期<1年防御配置"
# ============================================================
# 基准配置
@@ -45,8 +116,8 @@ benchmark:
# 回测配置
# ============================================================
backtest:
start_date: "2023-01-01"
end_date: "2024-12-31"
start_date: "2020-01-01"
# end_date: null # null 表示至今
# ============================================================
# 因子配置
@@ -59,10 +130,20 @@ factor:
# 轮动配置
# ============================================================
rotation:
select_num: 2 # 选择 Top-2
select_num: 3 # 选择 Top-3
diversified: true # 强制分散化:每个大类只选 Top 1
# 阈值配置V3 动态阈值)
threshold:
mode: "fixed"
fixed_value: 0.0 # 无阈值过滤
mode: "dynamic" # 动态阈值模式
fixed_value: 0.0 # 固定阈值mode=fixed时使用
# 动态阈值配置(使用短债动量作为阈值)
dynamic:
reference: "931862.CSI" # 阈值参考标的(短债指数)
ratio: 1.0 # 阈值 = 短债动量 × ratio
fallback_enabled: true # 参考不可用时是否回退
fallback_value: 0.0 # 回退值
# ============================================================
# 调仓配置
@@ -73,10 +154,26 @@ rebalance:
trade_cost: 0.001 # 0.1% 交易成本
# ============================================================
# 溢价控制(禁用)
# 溢价控制配置
# ============================================================
premium_control:
enabled: false
enabled: true # 启用溢价控制
default_threshold: 0.10 # 默认溢价阈值 10%
mode: "filter" # filter(完全排除) 或 penalize(降权)
penalty_factor: 0.5 # 降权模式下的惩罚系数
# 按市场覆盖配置
market_overrides:
CN_EQUITY: # A股 ETF
enabled: false # 不启用(溢价通常 < 0.5%
HK_EQUITY: # 港股 ETF
enabled: true
threshold: 0.10 # 阈值 10%
US_EQUITY: # 美股 ETF
enabled: true
threshold: 0.10 # 阈值 10%
COMMODITY: # 商品 ETF
enabled: false # 不启用
# ============================================================
# 数据配置
@@ -87,6 +184,3 @@ data:
enabled: true
url: "${FLASK_API_URL}"
timeout: 120
use_cache: true
cache_dir: "data_cache"