Qlib的安装和运行内置算法策略

下面我们就来试一下 qlib 的安装和运行内置算法策略。
1.准备
开始之前,你要确保python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:《超详细python安装指南(传统)》或 《python数据分析与挖掘好帮手—anaconda》 进行安装,本文建议使用anaconda。
由于qlib有许多许多依赖,如果你不想安装过程中出现问题,或者引起其他程序的运行问题,建议使用conda创建一个你的量化投资虚拟环境:
conda create -n my_quant python=3.8qlib 仅支持 python3.7 以上的版本且暂不支持 python3.10; 另外 python 3.9 版本不支持模型性能绘制,因此我选择创建python3.8版本的虚拟环境。
(安装方式一) pip 安装:
pip install pyqlib在pip安装的过程中如果遇到任何问题,请搜索引擎解决,如果无法解决,可以尝试下面的源码安装:
(安装方式二 (推荐)) 源码安装:
# 提前安装一些依赖pip install numpypip install --upgrade cython# clone and install qlibgit clone https://github.com/microsoft/qlib.git && cd qlibpython setup.py installwindows 机器在安装的时候可能会遇到下面这个问题:
这是因为安装 qlib 的依赖 — tables 时出现了编译错误,原因很多,我选择逃学,因此建议使用 tables 的 wheel 文件进行安装,这样就不需要编译了:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pytables
在上述网站下载适合你系统的 wheel 文件:
下载完毕后,输入以下命令:
pip install 你的文件路径/tables-3.6.1-cp39-cp39-win_amd64.whl即可完成 tables 的安装,然后再执行一遍 python setup.py install 即可。
2. 数据准备
由于这套量化开源平台的作者是中国人,所以非常贴心地准备好了a股数据,大家可以输入命令直接下载:
# 1天级别数据python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn# 1分钟级别数据python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min如果你需要其他分钟级的数据,修改interval即可。
你可以使用crontab定时自动更新数据(来自雅虎财经):
* * * * 1-5 python update_data_to_bin --qlib_data_1d_dir 手动更新数据:
python scripts/data_collector/yahoo/collector.py update_data_to_bin --qlib_data_1d_dir --trading_date --end_date 3. 运行量化回测流程示例
qlib 提供了一个名为 ** qrun ** 自动运行整个工作流程的工具(包括构建数据集、训练模型、回测和评估)。
你可以按照以下步骤启动自动量化研究工作流程并进行图形报告分析,quant research 工作流程:
**qrun ** 运行 lightgbm 工作流程的配置 workflow_config_lightgbm_alpha158.yaml 如下所示:
cd examples # avoid running program under the directory contains `qlib`qrun benchmarks/lightgbm/workflow_config_lightgbm_alpha158.yaml结果如下:
可以看到这里包括三个统计分析:benchmark return (基准收益) / excess return without cost(除去手续费的超额收益)) / excess return with cost(包含手续费的超额收益)。每个统计分析中都有如下5个参数:
mean: 异常收益的平均值std: 异常收益的标准差annualized_return: 年化回报information_ratio: 信息比率max_drawdown: 最大回撤大家可以看到,这个内置的算法和策略,在不包括手续费的情况下,相比于基准收益年化回报略高,但是在把手续费等费用算上之后,比沪深300基准收益略逊一筹。
如果你想要自定义这个策略和算法的回测参数,你可以查看 workflow_config_lightgbm_alpha158.yaml 的内容:
上滑查看更多代码
qlib_init:
provider_uri: ~/.qlib/qlib_data/cn_data
region: cn
market: &market csi300
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
port_analysis_config: &port_analysis_config
strategy:
class: topkdropoutstrategy
module_path: qlib.contrib.strategy
kwargs:
model:
dataset:
topk: 50
n_drop: 5
backtest:
start_time: 2017-01-01
end_time: 2020-08-01
account: 100000000
benchmark: *benchmark
exchange_kwargs:
limit_threshold: 0.095
deal_price: close
open_cost: 0.0005
close_cost: 0.0015
min_cost: 5
task:
model:
class: lgbmodel
module_path: qlib.contrib.model.gbdt
kwargs:
loss: mse
colsample_bytree: 0.8879
learning_rate: 0.2
subsample: 0.8789
lambda_l1: 205.6999
lambda_l2: 580.9768
max_depth: 8
num_leaves: 210
num_threads: 20
dataset:
class: dataseth
module_path: qlib.data.dataset
kwargs:
handler:
class: alpha158
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
module_path: qlib.workflow.record_temp
kwargs:
model:
dataset:
-class: siganarecord
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参数比较多,大家借助翻译工具应该都能看懂。这里摘取华泰的一个研究报告,里面对参数做了具体的翻译:
为了方便用户使用,微软内置了许多模型,如上文我们用到的 gbdt 位于克隆的文件夹下的 qlib/contrib/model/gbdt.py:
注意:pytorch 开头的模型需要预先安装pytorch.
一个小问题,qlib里,策略和算法的区别是什么?
大家注意到,qlib这里,必须定义策略和算法两个配置,而在backtrader里面,我们更加重视策略,而非“算法”这个概念。那么这两者在qlib中的区别是什么?我们看默认topk策略的源代码:
**可以看到,默认的这个策略,选择了算法预测分数结果中排名 top k 的股票,也就是策略从算法得到的结果中去做筛选需要交易的股票。**算法相当于生成一个新的可用于判断买入卖出的评判标准。这就是策略和ai算法这两者的最重要区别。
最后,得益于松耦合的代码设计,我认为 qlib 是一个能够让不同层次的研究者各取所需的开源项目,是一个不可多得的量化开源平台,特别适合重度python使用者,有兴趣的朋友可以试一下,未来我也会考虑出 qlib 相关的使用教程,敬请期待。

2020年最具有发展潜力的十大加密货币公司介绍
以太网AV能否帮助统一家庭网络?
ARM成为平板取代PC的强势对手
为什么要学STM32?答案就在这里
佰才邦Baicells完成由高通领投的亿元B+轮融资
Qlib的安装和运行内置算法策略
台积电7nm芯片已成5G产品的主要支撑力量
寄存器与锁存器与触发器
vivo计划在2020年推出至少5款5G机型
基于PC及和PIC16F877芯片实现情感表情机器人的研究与设计
【直播精彩回顾】离散型制造业数字化转型
年度最强荣耀手机体验 背面采用双层膜片工艺的3D玻璃
有它搞定全屋清洁!蒸汽拖把什么牌子好?
微软删除知名数据集 拨开数据隐私的迷雾
单节锂电池供电内置动态同步升压5W单声道音频功放IC
图像在时域内受大气湍流影响的克服方法
如何使用top/ps_mem命令查看进程内存占用
物联网开关电路PCB板制作方法
我们该如何正确选择合适的电话机器人
怎么使用Java8的Stream API比较两个List的差异呢?