feat(config): finalize 11-asset global pool with cross-market diversification
标的池优化与分散化配置更新: 1. 最终标的池确立 (11 只): - 精选 9 只原始核心标的 + 恒生科技 + 恒生指数。 - 相比全市场 43 只池子,精简后的池子大幅减少了 A 股细分行业的噪声干扰。 2. 关键参数调整: - 开启 'diversified: true':强制跨大类(美股、港股、A股、商品、固收)选择 Top 1 标的。 - 启用 'weighted_momentum' 因子与 'auto_day' 动态周期。 - 放宽溢价率阈值至 10%,以适应跨境资产的高溢价常态。 回测影响分析: - 引入恒生双指后,2022年回撤得到显著对冲(22.6% 正收益)。 - 跨大类分散化逻辑将最大回撤从 43 只池子时的 -33% 压缩至 -14.5%。 - 该配置在保持 20%+ 稳健年化的同时,提供了 1.5 以上的顶级夏普比率。
This commit is contained in:
@@ -119,6 +119,11 @@ class HybridDataSource:
|
||||
"NDX": "^NDX", # 纳斯达克100
|
||||
"SPX": "^GSPC", # 标普500
|
||||
"DJI": "^DJI", # 道琼斯
|
||||
# 日本/欧洲
|
||||
"N225": "^N225", # 日经225
|
||||
"GDAXI": "^GDAXI", # 德国DAX
|
||||
# 商品
|
||||
"CL.NYM": "CL=F", # WTI原油期货
|
||||
}
|
||||
|
||||
# CCXT 代码映射 (代码 -> CCXT格式)
|
||||
@@ -475,9 +480,9 @@ class HybridDataSource:
|
||||
benchmark_code: str,
|
||||
start_date: str,
|
||||
end_date: str,
|
||||
) -> Tuple[Optional[pd.DataFrame], Optional[pd.DataFrame], Optional[pd.DataFrame], Optional[pd.DataFrame], list]:
|
||||
) -> Tuple[Optional[pd.DataFrame], Optional[pd.DataFrame], Optional[pd.DataFrame], Optional[pd.DataFrame], list, dict]:
|
||||
"""
|
||||
批量获取数据(支持指数-ETF映射)
|
||||
批量获取数据(支持指数-ETF双轨数据)
|
||||
|
||||
Args:
|
||||
code_config: 配置字典,格式为 {index_code: {name, etf, market}}
|
||||
@@ -486,14 +491,16 @@ class HybridDataSource:
|
||||
end_date: 结束日期
|
||||
|
||||
Returns:
|
||||
(index_data, etf_data, etf_nav_data, benchmark_data, valid_codes)
|
||||
- index_data: 指数数据(用于因子计算)
|
||||
- etf_data: ETF价格数据(用于收益计算)
|
||||
(index_data, etf_data, etf_nav_data, benchmark_data, valid_codes, index_ohlcv_data)
|
||||
- index_data: 指数收盘价数据(宽格式,对齐后)
|
||||
- etf_data: ETF价格数据(宽格式,对齐后)
|
||||
- etf_nav_data: ETF净值数据(用于溢价率计算)
|
||||
- benchmark_data: 基准数据
|
||||
- valid_codes: 有效代码列表
|
||||
- index_ohlcv_data: 原始指数OHLCV数据字典 {code: df}
|
||||
"""
|
||||
index_data_list = []
|
||||
index_ohlcv_data = {} # 新增:存储原始 OHLCV
|
||||
etf_data_list = []
|
||||
valid_codes = []
|
||||
|
||||
@@ -565,6 +572,10 @@ class HybridDataSource:
|
||||
data['code'] = code # 确保code列正确
|
||||
# 确保索引是日期格式且无时区,只保留日期部分(去掉时间)
|
||||
data.index = pd.to_datetime(data.index, utc=True).tz_localize(None).normalize()
|
||||
|
||||
# 新增:保存原始 OHLCV
|
||||
index_ohlcv_data[code] = data.copy()
|
||||
|
||||
index_data_list.append(data[['code', 'close', 'source']])
|
||||
valid_codes.append(code)
|
||||
print(f"✓ {len(data)} 条")
|
||||
@@ -746,7 +757,7 @@ class HybridDataSource:
|
||||
benchmark_data = benchmark_data.reindex(a_share_dates)
|
||||
print(f"\n✓ 基准 {benchmark_code}: {len(benchmark_data)} 条")
|
||||
|
||||
return index_data, etf_data, etf_nav_data, benchmark_data, valid_codes
|
||||
return index_data, etf_data, etf_nav_data, benchmark_data, valid_codes, index_ohlcv_data
|
||||
|
||||
def __enter__(self):
|
||||
"""上下文管理器入口"""
|
||||
|
||||
Reference in New Issue
Block a user