From d0a9d66a11501139b40225686fac4d97cbeb4107 Mon Sep 17 00:00:00 2001 From: aszerW Date: Thu, 30 Apr 2026 13:37:46 +0800 Subject: [PATCH] =?UTF-8?q?feat(config):=20=E6=B7=BB=E5=8A=A0CU.SHF?= =?UTF-8?q?=E6=9C=89=E8=89=B2=E9=87=91=E5=B1=9E=E6=9C=9F=E8=B4=A7=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7=E6=BA=90,=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E4=B8=8A=E8=AF=81=E7=BA=A2=E5=88=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 讨论背景: - 159980.SZ(有色ETF)是商品型基金,跟踪上期所有色金属期货价格指数 - 应使用期货价格(CU.SHF沪铜)作为信号源,与黄金(AU.SHF)/原油(CL.NYM)保持一致 - 上证红利(000015.SH)与中证红利低波(H30269.CSI)高度相关,同属A股大类 在diversified模式下只能选1个,保留两个无实际意义 配置变更: - rotation.yaml: 新增CU.SHF→159980.SZ映射(market=COMMODITY) - rotation.yaml: 移除000015.SH上证红利(与红利低波冗余) - hybrid_source.py: FUTURES_CODE_MAP新增CU.SHF铜期货 - ab_test_iterations.py: 同步更新有色market为COMMODITY 实证结果 - CU.SHF加入前后对比(11只池,2019-2026): 无CU(11只): CAGR=47.37%, Sharpe=2.25, MaxDD=-17.86%, Calmar=2.65 含CU(12只): CAGR=46.16%, Sharpe=2.21, MaxDD=-17.86%, Calmar=2.58 影响: CAGR-1.2%, 商品大类内部竞争加剧(黄金/原油/有色三选一) 2020/2022铜价暴涨时有色贡献额外收益,整体影响很小 实证结果 - 移除上证红利后(11只,2019-2026): 含上证红利: CAGR=46.16%, Sharpe=2.21, MaxDD=-17.86%, Calmar=2.58 移除后: CAGR=46.42%, Sharpe=2.22, MaxDD=-17.33%, Calmar=2.68 所有指标均改善,消除冗余标的提升选择效率 实证结果 - diversified=true vs false(11只,select_num=3): true(跨类分散): CAGR=46.45%, Sharpe=2.22, MaxDD=-17.33%, Calmar=2.68 false(纯Top3): CAGR=44.19%, Sharpe=2.13, MaxDD=-18.12%, Calmar=2.44 关键差异在2022年(+17.63%): false模式选3只商品同时回调 结论: diversified=true全面优于false,保持当前配置 最终候选池(11只,7大类): A股: 创业板(399006.SZ), 红利低波(H30269.CSI) 美股: 纳指100(NDX) | 日本: 日经225(N225) | 欧洲: 德国DAX(GDAXI) 港股: 恒生指数(HSI), 恒生科技(HSTECH.HK) 商品: 黄金(AU.SHF), 原油(CL.NYM), 有色金属(CU.SHF) 固收: 30年国债(931862.CSI) --- config/strategies/rotation.yaml | 8 ++++---- core/datasource/hybrid_source.py | 1 + scripts/ab_test_iterations.py | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/config/strategies/rotation.yaml b/config/strategies/rotation.yaml index 943ceec..632d2c2 100644 --- a/config/strategies/rotation.yaml +++ b/config/strategies/rotation.yaml @@ -14,10 +14,6 @@ code_list: name: "中证红利低波" etf: "512890.SH" market: "A" - "000015.SH": - name: "上证红利" - etf: "510880.SH" - market: "A" # 全球市场 "NDX": @@ -50,6 +46,10 @@ code_list: name: "原油" etf: "160723.SZ" market: "COMMODITY" + "CU.SHF": + name: "有色金属" + etf: "159980.SZ" + market: "COMMODITY" "931862.CSI": name: "30年国债" etf: "511090.SH" diff --git a/core/datasource/hybrid_source.py b/core/datasource/hybrid_source.py index 3c6fb19..6f3d24e 100644 --- a/core/datasource/hybrid_source.py +++ b/core/datasource/hybrid_source.py @@ -135,6 +135,7 @@ class HybridDataSource: # 期货代码映射 (代码 -> Tushare格式) FUTURES_CODE_MAP = { "AU.SHF": "AU.SHF", # 上海期货交易所黄金主力合约 + "CU.SHF": "CU.SHF", # 上海期货交易所铜主力合约 } def __init__(self, ssh_config: Optional[dict] = None, use_cache: bool = True): diff --git a/scripts/ab_test_iterations.py b/scripts/ab_test_iterations.py index e778a0e..8cef73c 100644 --- a/scripts/ab_test_iterations.py +++ b/scripts/ab_test_iterations.py @@ -28,7 +28,7 @@ ORIGINAL_POOL = { "399986.SZ": {"name": "中证银行", "market": "A", "etf": "516310.SH"}, "399997.SZ": {"name": "中证白酒", "market": "A", "etf": "512690.SH"}, "399989.SZ": {"name": "中证医疗", "market": "A", "etf": "512170.SH"}, - "399395.SZ": {"name": "国证有色", "market": "A", "etf": "159880.SZ"}, + "399395.SZ": {"name": "国证有色", "market": "COMMODITY", "etf": "159880.SZ"}, "399998.SZ": {"name": "中证煤炭", "market": "A", "etf": "515220.SH"}, "399967.SZ": {"name": "中证军工", "market": "A", "etf": "512660.SH"}, "HSTECH.HK": {"name": "恒生科技", "market": "HK", "etf": "513180.SH"},