0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-31 10:19 次阅读

下面我们就来试一下 Qlib 的安装和运行内置算法策略。

1.准备

开始之前,你要确保Pythonpip已经成功安装在电脑上,如果没有,请访问这篇文章:《超详细Python安装指南(传统)》或 《Python数据分析与挖掘好帮手—Anaconda》 进行安装,本文建议使用Anaconda。

由于qlib有许多许多依赖,如果你不想安装过程中出现问题,或者引起其他程序的运行问题,建议使用Conda创建一个你的量化投资虚拟环境:

conda create -n my_quant python=3.8

Qlib 仅支持 Python3.7 以上的版本且暂不支持 Python3.10; 另外 Python 3.9 版本不支持模型性能绘制,因此我选择创建Python3.8版本的虚拟环境。

(安装方式一) pip 安装:

pip install pyqlib

在pip安装的过程中如果遇到任何问题,请搜索引擎解决,如果无法解决,可以尝试下面的源码安装:

(安装方式二 (推荐)) 源码安装:

# 提前安装一些依赖
pip install numpy
pip install --upgrade cython

# clone and install qlib
git clone https://github.com/microsoft/qlib.git && cd qlib
python setup.py install

Windows 机器在安装的时候可能会遇到下面这个问题:

图片

这是因为安装 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 < script path > update_data_to_bin --qlib_data_1d_dir < user data dir >

手动更新数据:

python scripts/data_collector/yahoo/collector.py update_data_to_bin --qlib_data_1d_dir < user data dir > --trading_date < start date > --end_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
: < MODEL >
dataset: < 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: < MODEL >
dataset: < 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 相关的使用教程,敬请期待。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6513

    浏览量

    87609
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79553
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83476
收藏 人收藏

    评论

    相关推荐

    枝状流体供热网优化运行策略研究与实现

    针对现行的控制策略不能很好的实现供热网的优化运行,首先提出了基于启发式加权交叉算子的实数编码遗传算法。并在建立了供热网运行成本的模型后,应用改进型遗传
    发表于 12-18 16:24 10次下载

    运行内存是什么意思,手机运行内存4G和6G区别很大?

    手机更新换代真的太快了,让人有点应接不暇。想想以前的手机基本是用来打电话跟接电话的,然后现在手机拿来打电话的越来越少,已经渐渐成为生活中的一个“好助手”了。以前还只有2G的手机,现在动不动就6G运行内存甚至8G运行内存。
    发表于 06-02 08:58 9w次阅读

    基于双变异策略的骨架差分算法

    骨架差分进化算法能够较好规避差分进化算法控制参数和变异策略选择问题。针对基于双变异策略的经典骨架差分算法( MGBDE)没有根据个体进化差异
    发表于 01-16 16:08 0次下载

    让我来告诉你!6G运行内存,为什么可用的只有3G左右

    现在手机运行内存越做越大,但有时候我们会发现可用的运行内存并没有随着运行内存的增大而同比例增大。几年前,许多手机的运行内存都还处于512M的时候,可用
    发表于 04-27 09:26 7.3w次阅读

    STM32F1_ 外部SRAM作为运行内

    STM32F1_外部SRAM作为运行内
    的头像 发表于 04-08 10:07 4308次阅读
    STM32F1_ 外部SRAM作为<b class='flag-5'>运行内</b>存

    手机运行内存不足怎么处理

     手机运行内存是一个智能手机中非常重要的一个存在。可以说,手机运行内存的大小决定了我们的手机在日常使用中能够给我们带来的用户体验。所以说,一般我们在选择智能手机的时候,我们都会选择手机运行内存够大
    发表于 06-15 10:30 5187次阅读

    阐述手机内存与运行内存中的关系及区别

    “手机的“内存”通常指“运行内存”及“非运行内存”。手机的“运行内存”相当于电脑的内存,即RAM。而手机的“非运行内存”,相当于电脑的硬盘,厂家常直接称其为手机内存,也就是所谓的ROM
    发表于 07-30 14:17 6045次阅读

    iPhone 12系列的运行内存是多大?

    安卓是基于Linux平台所开发,根据它的特性,如果安卓手机需要关闭一个应用时,要消耗大量的运行内存才能将应用彻底关掉,消耗的量一般是应用所运行的内存的4-8倍左右。如果手机本身内存不够它调配的话,速度自然就慢下来了。
    的头像 发表于 10-22 12:04 9.3w次阅读

    iphone13运行内存会更新吗

    iPhone13系列将于9月发布,不再延期。因此关于iPhone13系列的各类消息也是纷沓而至,在刘海变小、高刷屏也确认之后,iPhone13又传来好消息,这次和运行内存有关。
    的头像 发表于 09-14 10:52 3780次阅读

    苹果13运行内存是多少

    苹果今日凌晨正式发布了iPhone13系列手机,售价5199元起。很多网友除了关心外观、配置、价格外就是它的运行内存了。
    的头像 发表于 09-15 15:07 3w次阅读

    苹果13手机运行内

    根据外媒的资料确认,iPhone13/mini系列是6GB运存,iPhone13 Pro/Pro Max系列是8GB运行内存。
    的头像 发表于 09-16 10:08 8094次阅读

    iPhone13运行内存有多大?

    苹果提高iPhone 13系列的运行内存,iPhone13 Pro/Pro Max的运行内存将提升至8GB。苹果去年才将iPhone12 Pro系列的运行内存,由iPhone11 Pro系列的4GB增加到了6GB。
    的头像 发表于 09-17 09:16 2.4w次阅读

    苹果13会升级运行内存吗

    手机运行内存和电脑运行内存是一个道理,是属于可活动的内部存储,它并不是用来存储固定的数据,而是动态和即时的。运存的占用除了系统本身的必要运行组件外,就是我们平常手机打开的APP的即时数据存储。
    的头像 发表于 09-22 10:05 4180次阅读

    苹果13系列运行内存有多大?苹果13系列有8G运行内存吗?

    这次新产品的发布,大家备受期待,iphone13的运行内存有多大,成为果粉们最想知道的问题之一。
    的头像 发表于 09-22 10:02 2.6w次阅读

    系统内存和运行内存的区别

    系统内存和运行内存都是计算机中重要的概念,它们在计算机的存储和运行方面起着不可或缺的作用。虽然它们与计算机存储和运行息息相关,但是它们具有不同的功能和实现方式。接下来我将详细介绍系统内存和运行
    的头像 发表于 01-15 16:32 694次阅读