Files
etf/strategies/rotation/config.yaml
aszerW 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

183 lines
6.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ETF轮动策略配置
# ==================== 候选池配置 ====================
# 指数-ETF映射配置
# index: 指数代码(用于计算因子信号)
# etf: ETF代码用于实际交易和收益计算null表示直接交易指数/加密货币
code_list:
# 中国A股指数
"399006.SZ":
name: "创业板指"
etf: "159915.SZ"
market: "A"
"H30269.CSI":
name: "中证红利低波"
etf: "512890.SH"
market: "A"
# 全球市场
"NDX":
name: "纳指100"
etf: "513100.SH"
market: "US"
"N225":
name: "日经225"
etf: "513520.SH"
market: "JP"
"GDAXI":
name: "德国DAX"
etf: "513030.SH"
market: "EU"
"HSI":
name: "恒生指数"
etf: "159920.SZ"
market: "HK"
"HSTECH.HK":
name: "恒生科技"
etf: "513130.SH"
market: "HK"
# 商品 & 固收
# 使用 COMEX/WTI 期货替代上期所主力合约(数据更长)
"GC=F": # COMEX黄金期货2000年至今
name: "黄金"
etf: "518880.SH" # 国内黄金ETF
market: "COMMODITY"
"CL=F": # WTI原油期货2000年至今
name: "原油"
etf: "160723.SZ" # 国内原油ETF
market: "COMMODITY"
# 使用 COMEX 铜期货替代上期所主力合约(数据更长)
"HG=F": # COMEX铜期货2000年至今
name: "有色金属"
etf: "159980.SZ" # 国内有色金属ETF
market: "COMMODITY"
# 防御类资产:短债指数
# 931862.CSI = 中证0-9个月国债指数短债指数
# 数据范围2007-12-31开始约19年数据
# 久期:极短(<1年波动极小熊市防御效果最佳
#
# 【收益归因实证分析结论】
# 分析方法:将持有债券期间的收益分解为两部分
# 1. 标的收益债券本身的价格上涨年化约3%
# 2. 决策收益:持有债券期间避免持有股票带来的损失
#
# 实证结果2002-2026回测区间
# - 标的收益占比约17%(债券本身增长贡献)
# - 决策收益占比约83%(避险决策贡献)
#
# 核心结论:
# 短债指数在轮动策略中的价值主要来自"正确避险决策"
# 而非债券本身的价格增长。这验证了动量轮动策略的
# 核心逻辑:通过仓位选择规避下跌风险,而非依赖标的本身收益。
#
# 收益对比(策略净值):
# - 使用931862.CSI短债净值264.54收益26354%
# - 使用000012.SH综合国债净值216.30收益21530%
# - 短债防御效果更好收益高18.2%
#
# 注意无对应ETF可交易直接使用指数数据计算动量和收益
"931862.CSI":
name: "短债指数"
etf: null
market: "BOND"
# 000012.SH上证国债指数配置已注释原因
# 1. 000012.SH是综合国债指数包含短债到长债无对应ETF
# 2. 之前错误映射到511520.SH政金债ETF指数-ETF不匹配
# 3. 收益低于短债指数216.30 vs 264.54
# "000012.SH":
# name: "上证国债指数"
# etf: "511520.SH"
# market: "BOND"
# 主市场配置
primary_market:
source: "Tushare"
code: "000300.SH"
# 基准指数配置
benchmark:
code: "000300.SH"
name: "沪深300"
# ==================== 回测参数 ====================
start_date: "2002-01-01"
# ==================== 因子参数 ====================
# 动量/趋势窗口期(天数)
n_days: 25
# 因子类型:'momentum', 'slope_r2', 'weighted_momentum'
factor_type: "weighted_momentum"
# 动态周期参数 (匹配 JoinQuant 策略)
auto_day: false
min_days: 20
max_days: 60
# ==================== 轮动参数 ====================
select_num: 3
# 强制分散化:每个大类只选 Top 1
diversified: true
# 动量最低阈值:标的动量得分需>=此值才考虑入选(年化收益率*R²
# 设置为0表示过滤负动量标的更高阈值虽能改善回撤但可能错过正动量机会
min_score: 0.0
# V3: 动态阈值配置(替代固定 min_score: 0.0
# 使用短债动量作为动态 min_score标的动量 < 短债动量 → 不持有
bond_threshold:
enabled: true # true=V3动态阈值, false=退化为V2固定阈值
bond_code: "931862.CSI" # 阈值参考标的(短债指数)
ratio: 1.0 # 阈值 = 短债动量 × ratio
fill_bond: true # 选出不足select_num只时用短债填充空余仓位
# ==================== 调仓控制 ====================
# 最低调仓周期(交易日):持仓至少持有 N 天后才允许换仓
rebalance_days: 1
# 调仓得分阈值:新组合总得分需超过当前组合 X% 才触发调仓
rebalance_threshold: 0.0
# 单次换仓成本(双边,含佣金+滑点)
trade_cost: 0.001
# ==================== 溢价控制配置 ====================
# 跨境ETF溢价过滤机制防止高溢价买入
premium_control:
enabled: true
default_threshold: 0.10 # 默认溢价阈值 10%
mode: "filter" # "filter"(完全排除) 或 "penalize"(降权)
penalty_factor: 0.5 # 降权模式下的惩罚系数
# 按市场类型覆盖配置
market_overrides:
A: # A股 ETF
enabled: false # 不启用(溢价通常 < 0.5%
HK: # 港股 ETF
enabled: true
threshold: 0.10 # 阈值 10%
US: # 美股 ETF
enabled: true
threshold: 0.10 # 阈值 10%
COMMODITY: # 商品 ETF
enabled: false
# ==================== 数据缓存 ====================
# 是否使用本地缓存True=优先从本地读取)
use_cache: true
# ==================== 数据源配置 ====================
# Flask API 服务配置(优先使用远程 API 获取数据)
flask_api:
enabled: true # 是否启用 Flask API
url: "https://k3s.tokenpluse.xyz" # Flask API 服务地址
# SSH 隧道配置(用于网络受限环境,通过境外服务器访问 yfinance
ssh_tunnel:
enabled: true # 是否启用 SSH 隧道
host: "8.218.167.69" # SSH 服务器地址(阿里云香港 ECS IP
port: 22 # SSH 端口
username: "root" # SSH 用户名
key_path: "hk_ecs.pem" # SSH 私钥路径(相对于项目根目录)
local_port: 1080 # 本地 SOCKS5 代理端口