test(framework_v2): 添加配置系统测试和策略示例

配置文件:
- rotation_global.yaml: 扁平化资产池配置示例,演示 group 策略分组
  * 13 个标的覆盖 7 个策略分组(US_TECH, CN_GROWTH, JP_BROAD, EU_BROAD, HK_TECH, COMMODITY, FIXED_INCOME)
  * signal_source/trade_source 分离配置(跨市场场景)
  * 分散化选股配置示例(注释状态)
  * 默认使用 Flask API 数据源

测试用例:
- test_flat_asset_pool.py: 7/7 测试通过
  * 扁平配置加载验证
  * 策略分组功能测试(by_group, groups, count)
  * 信号/交易标的获取(get_signal_codes, get_trade_codes)
  * 信号→交易映射(get_signal_to_trade_mapping)
  * 分散化配置验证
  * 标的配置详情验证

- test_config.py: 配置加载器测试
- test_simple_rotation.py: 简单轮动策略端到端测试
This commit is contained in:
2026-05-24 14:26:09 +08:00
parent de988b919b
commit 0954458114
4 changed files with 962 additions and 0 deletions

View File

@@ -0,0 +1,268 @@
# 跨市场轮动策略配置(扁平化设计)
#
# 配置版本: 2.0.0
# 最后更新: 2024-04-16
# 策略名称: rotation_global
# 描述: 全球资产大类轮动 - 扁平化资产池设计
# ============================================================
# 元数据
# ============================================================
metadata:
version: "2.0.0"
strategy: "rotation_global"
description: "全球资产大类轮动策略 V2 - 扁平化资产池"
last_updated: "2024-04-16"
# ============================================================
# 资产池配置(扁平化设计)
# ============================================================
asset_pools:
assets:
# ============================================================
# 美股指数(通过 A 股 ETF 交易)
# ============================================================
"NDX":
name: "纳指100"
group: "US_TECH"
signal_source: "NDX" # 纳指信号
trade_source: "513100.SH" # A股ETF交易
description: "纳斯达克100指数科技股代表"
"SPX":
name: "标普500"
group: "US_TECH"
signal_source: "SPX"
trade_source: "513500.SH"
description: "标普500指数美股大盘"
# ============================================================
# A股指数直接交易 ETF
# ============================================================
"399006.SZ":
name: "创业板指"
group: "CN_GROWTH"
signal_source: "399006.SZ"
trade_source: "159915.SZ"
description: "创业板指数,成长股代表"
"000300.SH":
name: "沪深300"
group: "CN_GROWTH"
signal_source: "000300.SH"
trade_source: "510300.SH"
description: "沪深300指数大盘蓝筹"
"H30269.CSI":
name: "中证红利低波"
group: "CN_GROWTH"
signal_source: "H30269.CSI"
trade_source: "512890.SH"
description: "红利低波指数,价值股代表"
# ============================================================
# 日本股市(通过 A 股 ETF 交易)
# ============================================================
"N225":
name: "日经225"
group: "JP_BROAD"
signal_source: "N225"
trade_source: "513520.SH"
description: "日经225指数日本股市"
# ============================================================
# 欧洲股市(通过 A 股 ETF 交易)
# ============================================================
"GDAXI":
name: "德国DAX"
group: "EU_BROAD"
signal_source: "GDAXI"
trade_source: "513030.SH"
description: "德国DAX指数欧洲股市"
# ============================================================
# 港股(通过 A 股 ETF 交易)
# ============================================================
"HSI":
name: "恒生指数"
group: "HK_TECH"
signal_source: "HSI"
trade_source: "159920.SZ"
description: "恒生指数,香港股市"
"HSTECH.HK":
name: "恒生科技"
group: "HK_TECH"
signal_source: "HSTECH.HK"
trade_source: "513130.SH"
description: "恒生科技指数,港股科技"
# ============================================================
# 商品(国际期货信号 → A股ETF交易
# ============================================================
"GC=F":
name: "黄金"
group: "COMMODITY"
signal_source: "GC=F" # COMEX黄金期货
trade_source: "518880.SH" # A股黄金ETF
description: "COMEX黄金期货避险资产"
"CL=F":
name: "原油"
group: "COMMODITY"
signal_source: "CL=F" # WTI原油期货
trade_source: "160723.SZ" # A股原油基金
description: "WTI原油期货能源商品"
"HG=F":
name: "有色金属"
group: "COMMODITY"
signal_source: "HG=F" # COMEX铜期货
trade_source: "159980.SZ" # A股有色ETF
description: "COMEX铜期货工业金属"
# ============================================================
# 固定收益(直接交易指数)
# ============================================================
"931862.CSI":
name: "短债指数"
group: "FIXED_INCOME"
signal_source: "931862.CSI"
trade_source: "931862.CSI" # 直接交易指数无ETF
description: "中证0-9个月国债指数久期<1年防御配置"
# ============================================================
# 加密货币(未来扩展示例)
# ============================================================
# "BTC":
# name: "比特币"
# group: "CRYPTO"
# signal_source: "BTC"
# trade_source: "BTC"
# description: "比特币,数字黄金"
# ============================================================
# 外汇(未来扩展示例)
# ============================================================
# "EURUSD":
# name: "欧元/美元"
# group: "FOREX"
# signal_source: "EURUSD"
# trade_source: "EURUSD"
# description: "欧元/美元汇率"
# ============================================================
# 基准配置
# ============================================================
benchmark:
code: "000300.SH"
name: "沪深300"
# ============================================================
# 回测配置
# ============================================================
backtest:
start_date: "2020-01-01"
# end_date: null # null 表示至今
# ============================================================
# 因子配置
# ============================================================
factor:
type: "weighted_momentum" # 因子类型: momentum / slope_r2 / weighted_momentum
n_days: 25 # 动量窗口期5-250天
# 动态周期参数(可选)
auto_day: false # 是否启用动态周期
min_days: 20 # 最小周期
max_days: 60 # 最大周期
# ============================================================
# 轮动配置
# ============================================================
rotation:
# ============================================================
# 模式 1全局选股默认
# ============================================================
select_num: 5 # 全局选 Top-5
diversified: false # 不分散化
# ============================================================
# 模式 2分散化选股取消注释启用
# ============================================================
# diversified: true # 启用分散化
# diversification_groups: # 按市场分组选股
# - group: "US_TECH"
# select_num: 1 # 美股选 1 只
# - group: "CN_GROWTH"
# select_num: 1 # A股选 1 只
# - group: "JP_BROAD"
# select_num: 1 # 日本选 1 只
# - group: "EU_BROAD"
# select_num: 1 # 欧洲选 1 只
# - group: "HK_TECH"
# select_num: 1 # 港股选 1 只
# - group: "COMMODITY"
# select_num: 1 # 商品选 1 只
# - group: "FIXED_INCOME"
# select_num: 1 # 债券选 1 只
# 阈值配置(统一 V2/V3
threshold:
mode: "dynamic" # 阈值模式: fixed / dynamic
fixed_value: 0.0 # 固定阈值mode=fixed时使用
# 动态阈值配置mode=dynamic时使用
dynamic:
reference: "931862.CSI" # 参考标的(短债指数)
ratio: 1.0 # 阈值 = 短债动量 × ratio
fallback_enabled: true # 参考不可用时是否回退
fallback_value: 0.0 # 回退值
# ============================================================
# 调仓配置
# ============================================================
rebalance:
min_hold_days: 1 # 最低持有天数1-30
score_threshold: 0.0 # 调仓得分阈值0-0.5,表示%
trade_cost: 0.001 # 单次换仓成本0-0.01,即 0.1%
# ============================================================
# 溢价控制配置
# ============================================================
premium_control:
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%
JP_EQUITY: # 日本 ETF
enabled: true
threshold: 0.10 # 阈值 10%
EU_EQUITY: # 欧洲 ETF
enabled: true
threshold: 0.10 # 阈值 10%
COMMODITY: # 商品 ETF
enabled: false # 不启用
# ============================================================
# 数据配置
# ============================================================
data:
# 数据源列表(按优先级排序)
sources:
# 主数据源Flask API
- type: "flask_api"
enabled: true
url: "${FLASK_API_URL}" # 从环境变量读取
timeout: 120