【Qlib框架】因子定义层及整体框架(alpha因子库+数据预处理+模型预测+IC分析+回测backtestdaily+风险分析+交易质量分析)
系列文章目录
【Qlib】数据源investment_data项目思路+数据集详解
文章目录
- 系列文章目录
- 一、Qlib 因子挖掘体系结构
- 二、因子定义层(Expression 表达式系统)
- 三、qlib框架整体逻辑
一、Qlib 因子挖掘体系结构
Qlib 因子挖掘体系 ┌─────────────────────────────────────────────────────────────────────────────┐ │ 因子定义层(Expression 表达式系统) │ │ │ │ 表达式字符串 parse_field()解析 │ │"Ref($close, 5)/$close"──────────→ Operators.Ref(Feature("close"),5)│ │ └─── Feature("close")──→ 读.bin数据 │ │ │ │ 支持的算子分类: │ │ ┌─────────────┬──────────────────────┬──────────────────────────────────┐ │ │ │ Element-Wise│ Pair-Wise │ Rolling/Window │ │ │ │ Abs,Log │ Add,Sub,Mul,Div │ Ref,Mean,Std,Var │ │ │ │ Sign,Mask │ Gt,Lt,Eq,And,Or │ Max,Min,Sum,Skew,Kurt │ │ │ │ Not │ Power,Greater,Less│ Quantile,Rank,RSV │ │ │ │ │ │ Slope,Rsquare,Resi │ │ │ └─────────────┴──────────────────────┴──────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 因子配置层(数据预处理 Handler) │ │ │ │ Alpha158DL/Alpha360DL(qlib/contrib/data/loader.py)│ │ │ │ 定义哪些因子被使用: │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ feature=[│ │ │ │"($close-$open)/$open",← K线因子 KMID │ │ │ │"($high-$low)/$open",← K线因子 KLEN │ │ │ │"Ref($close, 5)/$close",← 动量因子 ROC5 │ │ │ │"Mean($close, 5)/$close",← 均线因子 MA5 │ │ │ │"Std($close, 5)/$close",← 波动因子 STD5 │ │ │ │"Max($high, 20)/$close",← 压力位因子 MAX20 │ │ │ │"Min($low, 20)/$close",← 支撑位因子 MIN20 │ │ │ │"Slope($close, 5)/$close",← 趋势因子 BETA5 │ │ │ │...│ │ │ │]│ │ │ │ label=["Ref($close, -2)/Ref($close, -1) - 1"]← 标签定义 │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ 数据源:QlibDataLoader → D.features()→ 表达式引擎加载+计算 │ └─────────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 表达式计算引擎(按需计算+自动缓存) │ │ │ │ D.features(instruments,fields,start_time,end_time)│ │ └── DatasetD.dataset()│ │ └── dataset_processor()│ │ └── inst_calculator(每只股票)│ │ └──forfieldinfields:│ │ ExpressionD.expression(inst,field)│ │ └── expression.load(inst,start,end,freq)│ │ ↓ │ │ ┌──────────────────────────────┐ │ │ │ 表达式树递归求值 │ │ │ │ │ │ │ │ Ref($close,5)/$close │ │ │ │ ├── Ref($close,5)│ │ │ │ │ └── Feature(close)│ │ │ │ │ └── read.bin│ │ │ │ └── Feature(close)─┐ │ │ │ │ └── np.divide(...)│ │ │ │ └──────────────────────┴───────┘ │ │ ↓ │ │ DiskExpressionCache 自动缓存计算结果 │ │ → features/{stock}/{hash}.bin(下次直接读取) │ └─────────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 后处理(Processors) │ │ │ │ 在 DataHandlerLP 中编排处理器链: │ │ │ │ 原始数据 → shared_processors → infer_processors → 推理数据 │ │ → learn_processors → 训练数据 │ │ │ │ 常见 Processor: │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ DropnaLabel ← 删除标签缺失的样本 │ │ │ │ ZScoreNorm ← 横截面Z值标准化(每只股票/每天)│ │ │ │ CSZScoreNorm ← 截面Z值标准化 │ │ │ │ Fillna ← 填充缺失值 │ │ │ │ MinMaxNorm ← 最大最小值归一化 │ │ │ │ Winsorize ← 极值处理(去极值)│ │ │ │ ProcessInf ← 处理无穷值 │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 模型训练/评估 │ │ │ │ Dataset 将 handler 包装为训练集/验证集/测试集分段 │ │ → 模型(LGB/GRU/TabNet/...)从中获取特征和标签进行训练 │ │ → 训练的模型可用来做因子挖掘(特征重要性、权重分析)│ │ │ │ 因子评估工具: │ │-qlib/contrib/evaluate.py ← IC分析、Rank IC、分组收益等 │ │-qlib/contrib/analyze/← 因子分析工具 │ └─────────────────────────────────────────────────────────────────────────────┘二、因子定义层(Expression 表达式系统)
三、qlib框架整体逻辑
“数据读取—>因子表达层—>alpha158+alpha360—>数据预处理DataHandler—>模型预测—>IC分析—>回测体系(backtestdaily+风险分析+交易质量分析)”全流程总结
