核心逻辑: 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%
183 lines
6.5 KiB
YAML
183 lines
6.5 KiB
YAML
# 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 代理端口
|