ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Qlib 量化研究实战:一份配置跑出从数据到回测的完整闭环

Qlib 量化研究实战:一份配置跑出从数据到回测的完整闭环 Qlib 量化研究实战一份配置跑出从数据到回测的完整闭环【免费下载链接】qlibQlib is an AI-oriented Quant investment platform that aims to use AI tech to empower Quant Research, from exploring ideas to implementing productions. Qlib supports diverse ML modeling paradigms, including supervised learning, market dynamics modeling, and RL, and is now equipped with https://github.com/microsoft/RD-Agent to automate RD process.项目地址: https://gitcode.com/GitHub_Trending/qli/qlib用一份 YAML 配置你能在 10 分钟内拿到一组真实的回测数字年化超额 15.24%、信息比率 1.75、最大回撤 5.91%以 Qlib 仓库 CSI300 基准配置为例。Qlib 量化平台解决的是每个环节都要手写胶水代码的问题——数据、因子、机器学习模型、回测引擎被拆成可替换的模块换模型、换因子集只改配置不改流程。Qlib 能做什么30 秒看懂平台边界先给全貌五个模块各自职责一句话数据层qlib/data把 A 股日线/分钟线做成高效读取的列式存储支持表达式取数因子层qlib/contrib/data预置 Alpha158/Alpha360 等因子集负责数据清洗与特征加工模型层qlib/contrib/modelLightGBM、XGBoost、LSTM 等现成模型统一fit/predict接口回测层qlib/backtest撮合、涨跌停、手续费产出组合与交易记录工作流层qlib/workflow用qrun一条命令串起训练到回测自动记录每次实验。边界很清晰它覆盖数据 → 信号 → 组合 → 回测这条研究链路不替你接券商接口也不做实盘下单。Qlib 安装与数据下载10 分钟跑通第一个回测整条链路只有一步流程安装和取数# 克隆 Qlib 仓库 git clone https://gitcode.com/GitHub_Trending/qli/qlib cd qlib # 编译 C 扩展并安装 Qlib 本体 pip install . # 下载沪深 300 日线数据到默认目录 ~/.qlib/qlib_data/cn_data python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn初始化并验证环境examples/workflow_by_code.py 的写法import qlib from qlib.constant import REG_CN qlib.init(provider_uri~/.qlib/qlib_data/cn_data, regionREG_CN) # 指向刚下载的数据目录 from qlib.data import D print(D.calendar(freqday)[:2]) # 打印最近两个交易日能出日期说明数据层就绪然后直接复用仓库里现成的基准配置一条命令跑完cd examples qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml # qrun 会自动读配置里的 qlib_init 段跑完后控制台会打印一段绩效报告挑三个数字看数值随数据版本略有出入量级一致risk 年化超额收益 15.24%信息比率 1.75最大回撤 -5.91%不含成本年化超额收益 15.24%每年比沪深 300 指数多赚约 15%信息比率 1.75每承担 1 份跑输指数的波动换回 1.75 份超额收益最大回撤 5.91%从最高点到低点最多亏 5.91%衡量你半夜要不要被吵醒。能打印出这三个数说明你的 Qlib 量化环境从数据到回测已经通了。Qlib 数据结构目录树与 5 行验证代码~/.qlib/qlib_data/cn_data的层级化结构长这样cn_data/ ├── calendars/ # 交易日历每天一个文件记录哪些日子开盘 ├── instruments/ # 股票池定义csi300、csi500 等记录某只股票何时在池内 └── features/ # 特征数据按股票代码分目录每个特征一个 .bin 列式文件 ├── SH600000/ # 浦发银行close.bin、volume.bin、factor.bin…… └── SZ000001/ # 平安银行说明特征文件是列式二进制读取快且省内存股票池instruments是动态的——它记录每只股票的进出池时间回测时自动按历史成分取数避免幸存者偏差。验证数据可用性5 行以内就够写法见 docs/start/getdata.rstfrom qlib.data import D cal D.calendar(freqday) # 交易日历 print(cal[0], cal[-1]) # 数据起止日期 inst D.instruments(csi300) # 沪深 300 股票池 print(D.list_instruments(inst, start_time2017-01-01, end_time2017-01-31, as_listTrue)[:3]) # 某月池内股票 close D.features([SH600000], [$close]) # 取单只股票收盘价 print(close.head())因子集方面Qlib 预置了Alpha158158 个技术类因子价量变化率、K 线形态、动量等和Alpha36060 个原始价量特征 × 5 个时间窗。它们封装在Alpha158/Alpha360两个 handler 里你不需要知道每个因子的公式配置里写个类名就能用需要自己的因子时再往下扩展。Qlib 回测参数怎么调一份带注释的 workflow_config.yaml主线就一个配置LightGBM 模型 TopkDropout 策略。TopkDropout 的选股权限很简单每次调仓卖出持仓中得分最差的 n_drop 只再从全市场买入得分最高的直到凑满 topk 只示意如下完整配置以 examples/benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml 为底关键字段逐行注释qlib_init: provider_uri: ~/.qlib/qlib_data/cn_data # 数据目录和 qlib.init 对齐 region: cn # 中国市场涨跌停、T1 等规则 market: market csi300 # 股票池沪深 300 benchmark: benchmark SH000300 # 基准指数回测拿它算超额 data_handler_config: data_handler_config start_time: 2008-01-01 # 数据起点 end_time: 2020-08-01 # 数据终点 fit_start_time: 2008-01-01 # 标准化参数(如去极值分位数)的拟合起点 fit_end_time: 2014-12-31 # 拟合终点只用历史拟合防止未来信息 instruments: *market # 复用上方的股票池 task: model: class: LGBModel # LightGBM仓库里的真实类名 module_path: qlib.contrib.model.gbdt # 所在模块 kwargs: loss: mse # 均方误差损失 learning_rate: 0.2 # 每棵树的学习率 max_depth: 8 # 树最大深度 num_leaves: 210 # 叶子节点数控模型复杂度 dataset: class: DatasetH # 带切分的数据集 module_path: qlib.data.dataset kwargs: handler: class: Alpha158 # 158 个预置技术因子 module_path: qlib.contrib.data.handler kwargs: *data_handler_config segments: # 训练/验证/测试的时间切分 train: [2008-01-01, 2014-12-31] valid: [2015-01-01, 2016-12-31] test: [2017-01-01, 2020-08-01] record: # 训练完自动执行的三段记录 - class: SignalRecord # 生成预测信号 pred module_path: qlib.workflow.record_temp kwargs: {model: MODEL, dataset: DATASET} - class: SigAnaRecord # 信号分析IC 等 module_path: qlib.workflow.record_temp kwargs: {ana_long_short: False, ann_scaler: 252} - class: PortAnaRecord # 组合回测 绩效报告 module_path: qlib.workflow.record_temp kwargs: {config: *port_analysis_config}其中port_analysis_config段的两个策略参数最值得理解topk: 50始终持有 50 只和n_drop: 5每天最多换 5 只降低换手率。调参只动四处仓库examples/hyperparameter/LightGBM下就有系统化搜索脚本可参考参数推荐范围一句话作用learning_rate0.05–0.2单棵树贡献多大越小越稳但越慢num_leaves63–210单棵树复杂度过大先过拟合max_depth6–10树的深度上限兜底防止过深subsample0.7–0.9每棵树用多少比例样本加随机性防过拟合改完配置重跑qrun产物预测、参数、报告自动落到当前目录的mlruns实验记录里历次实验可对比。Qlib 回测结果怎么看三个指标的判断标准先说信号质量。回测前 Qlib 会先分析预测信号的 ICInformation Coefficient即预测值与未来收益的相关系数IC 均值稳定为正比如 0.03 以上说明信号有持续预测力忽正忽负、接近零轴震荡说明预测基本是噪声后面回测再漂亮也要打问号。再看组合层面三个核心指标的判断标准年化超额收益要同时看含成本和不含成本两版扣费后仍明显为正才有意义——Qlib 默认回测含手续费和印花税这个数字打折后的收益才是你能留下的信息比率IR经验阈值是 1。低于 1说明你承担的风险没有换来对等的超额超过 2 是优秀水平最大回撤研究阶段建议不超过 10%超过 15% 的策略实盘持有体验会非常差。进阶玩法自定义因子、模型对比与参数化1Qlib 自定义因子写法。写一个 RSI相对强弱指数继承ElemOperator实现calculate返回 pandas 列即可参考 tests/test_register_ops.py 的注册用法from qlib.data.ops import ElemOperator import pandas as pd class RSI(ElemOperator): def __init__(self, window14): self.window window def calculate(self, *args): close args[0] # 取数表达式传入收盘价序列 delta close.diff(1) # 单日涨跌 gain delta.clip(lower0).rolling(self.window).mean() # 平均涨幅 loss (-delta.clip(upper0)).rolling(self.window).mean() # 平均跌幅 rs gain / loss return 100 - 100 / (1 rs) # RSI 定义式 # 注册后可在表达式里直接引用 RSI.register() from qlib.data import D D.features([SH600000], [RSI($close, 14)])2多模型横向对比。仓库examples/benchmarks下每个目录都是一个模型 现成配置换task.model段的class和module_path即可横评模型类名 / 模块特点LightGBMLGBModel/qlib.contrib.model.gbdt表格数据首选训练最快XGBoostXGBModel/qlib.contrib.model.xgboost与 LGB 量级相当可交叉验证结论LinearLinearModel/qlib.contrib.model.linear训练秒级先跑通流程的基线LSTMPytorchLSTMModel/qlib.contrib.model.pytorch_lstm需要多进程/长窗口时再上训练成本高3工作流参数化。配置支持 YAML 锚点复用上文market/*market和环境变量渲染见 qlib/cli/run.py再配合BASE_CONFIG_PATH继承基准配置——你只需写差异字段就能一份模板批量扫市场、扫参数。下一步去哪想理解每个组件的细节看 docs/ 下的 component/ 章节数据、模型、回测、报告各有一篇想复现论文级模型直接翻 examples/benchmarks/README 里标了参数和结果强化学习做订单执行入口在 examples/rl_order_execution/高频数据与日内策略参考 examples/highfreq/滚动重训与在线更新防止模型过期看 examples/online_srv/ 和 examples/benchmarks_dynamic/。量化研究没有一次跑通就结束的配置——从这份 YAML 出发每次只换一个变量用qrun把结论沉淀成可对比的实验记录闭环才算真正转起来。【免费下载链接】qlibQlib is an AI-oriented Quant investment platform that aims to use AI tech to empower Quant Research, from exploring ideas to implementing productions. Qlib supports diverse ML modeling paradigms, including supervised learning, market dynamics modeling, and RL, and is now equipped with https://github.com/microsoft/RD-Agent to automate RD process.项目地址: https://gitcode.com/GitHub_Trending/qli/qlib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表