前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Qlib来啦:数据篇

Qlib来啦:数据篇

作者头像
量化投资与机器学习微信公众号
发布于 2022-04-22 09:16:01
发布于 2022-04-22 09:16:01
6.5K03
代码可运行
举报
运行总次数:3
代码可运行

量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W+关注者,荣获2021年度AMMA优秀品牌力、优秀洞察力大奖,连续2年被腾讯云+社区评选为“年度最佳作者”。

前言

在之前的文章中,我们使用Qlib实现了GAT与新闻共现矩阵的量化策略(A股实践 :图神经网络与新闻共现矩阵策略(附代码))。后台收到很多留言,希望我们能够出一些Qlib的使用教程。Qlib确实一个非常体系化、流程化且非常优秀的基于机器学习的量化研究框架。它将量化研究与机器学习非常系统化的结合在一起,能够通过配置文件工程化的运行模型。但框架本身又是松耦合,能够单独使用内部的某些功能进行量化研究。

在使用Qlib的过程中,我们也多多少少遇到了些问题。但是,在不断试错及实践中,这些问题都得到了解决。现在,就让我们真正的从零开始,学会如何使用Qlib。

顺便要给大家介绍一下我们之前的Backtrader系列。一经推出,收获无数好评。

QIML一直在专业和质量上为大家提供最好的内容!

往期推荐

Backtrader来啦:数据篇

Backtrader来啦:指标篇

Backtrader来啦:交易篇(上)

Backtrader来啦:交易篇(下)

Backtrader来啦:策略篇

Backtrader来啦:可视化篇(重构)

Qlib用来做什么?

多因子策略研究的大概流程包括:数据整理、因子构建、因子测试及组合回测等。随着近些年机器学习算法的发展,因子研究的过程中越来越多的使用到了机器学习算法。Qlib就是这样一个结合量化研究流程与机器学习模型的框架:

如何安装?

安装Qlib非常简单,直接使用pip就可以,但由于qlib依赖cython,所以在安装qlib前必须安装cython。当然我们推荐新建一个环境安装qlib,由于现在qlib对python3.8的支持最完善,所以指定创建3.8版本的虚拟环境:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 新建qlib环境
conda create -n qlib python=3.8
conda activate qlib


# 安装qlib
pip install --upgrade cython
pip install pyqlib

安装完之后,如果导入qlib没报错,就说明安装成功。

如何批量导入外部数据?

Qlib本身集成了部分数据源,如果希望快速了解Qlib的运行机制,可以直接使用。但由于集成数据的质量问题,不推荐想要深度使用Qlib做研究的用户使用内置数据源。所以该如何导入外部数据呢?

Qlib使用自有的bin格式存储研究数据,如果使用外部数据需要将数据进行转换成bin格式,qlib已经提供了转换数据所需的代码。我们只要将外部数据按照指定的格式准备好,并运行相关代码即可。我们就按照以下步骤一步一步操作:

1、克隆Qlib的代码

由于需要使用qlib提供的数据转换代码,所以我们需要把qlib的代码克隆到本地,如下我们把代码克隆到本地文件夹~/Dev/qlib:

2、准备外部数据

我们以价格数据为例,在准备价格数据时有以下要求:

  • 每个股票保存为一个csv文件。其中日期列命名为'date'。文件名为股票代码,如股票600000的价格数据,保存在'SH600000.csv'。我们将所有A股票的价格数据存在了以下文件夹'~/dev/stock_price_data_wind'
  • 价格为后复权的价格数据。每个csv包含以下数据,关于价格数据的准备有以下注意点
    • 其中价格须为复权后的数据(推荐后复权),factor为复权因子。
    • 如果只有复权价格,没有复权因子也可以,这时有两种方法:删除factor列,或者factor均设置为1。提供factor的好处是在回测时,qlib会通过factor将价格转为真实价格进行动态回测。
    • 如果使用wind数据,需要注意单位,如amount原始表单位是千,所以需要乘以1000,volume为手,需要乘以100。
    • 原始数据中的vwap为未复权的价格,需要乘以复权因子转换为复权后的vwap

下表的成交量为复权后的成交量,计算方法是成交金额/复权后vwap

  • 使用dump_all的方法转换数据。dump_all的方法位于qlib/scripts,一般用于首次批量转换数据,其他还有dump_fix、dump_update等方法(稍后介绍)。数据转换包含以下步骤:
    • 创建转换后数据保存的文件夹,比如dev/qlib_data,在终端运行: mkdir -p ~/dev/qlib_data/cn_data_wind
    • 在终端进入qlib文件夹,cd ~/dev/qlib
    • 运行以下代码进行数据转换,各参数说明如下
      • --csv_path 指定原始csv文件所在目录,这里是~/dev/stock_price_data_wind
      • --qlib_dir 指定转换后的数据存储目录,这里是~/dev/qlib_data/cn_data_wind
      • --freq 数据的频率,默认是day,如果是其他频率K线,如5分钟,可以设置 --freq 5min,需要注意的是如果是小时K线,参数应该是 --freq 60min
      • --date_field_name 如果csv文件内日期列名不是'date',可以使用这个参数指定日期列
      • --exlcude_fields 指定不需要转换的列
      • --include_fields 指定需要转换的列
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python scripts/dump_bin.py dump_all --csv_path ~/dev/stock_price_data_wind --qlib_dir ~/dev/qlib_data/cn_data_wind

转换完之后,我们可以看到在目标文件夹 ~/dev/qlib_data/cn_data_wind内多了三个文件夹:

其中calendars是根据价格文件自动生成的交易日历,features目录内保存了刚刚转换的价格数据。存放规则是每个股票一个目录,每个目录内,每一列(一个feature)一个文件:

instruments目录内存放着成分股数据,里面有一个自动生成的all.txt,包含了所有转换的股票。如果需要指数成分股的数据,可以自行导入。具体方法是,按“股票代码-纳入日期-剔除日期”的格式准备txt文件,注意列于列之间用\t分隔,如下图,我们准备了sh000300.txt,即沪深300成分股文件:

如何更新/扩展数据?

dump_all用于将数据批量导入至指定目录,那如何更新数据呢?更新数据不能再使用dump_all,因为dump_all会对目录进行覆盖。可以视情况使用dump_fix或dump_update。三者的区别如下:

  • dump_fix:增加新的因子(一列)、新的股票或重写已经导入的某一个feature。如果新增某个因子,为根据calendar.txt已有的日期进行新增,不在calendar日期覆盖的数据会被忽略。比如新增MACD因子,原先已有的数据保存至2020-12-31,新的MACD因子数据至2021-01-31,那用dump_fix只会新增MACD至2020-12-31。多出的那部分数据需要使用dump_all
  • dump_update:在时间维度上扩展已经存在的数据,所以称之为更新。

总之,dump_fix用于非时间维度的扩展,包括新增标的、因子等。dump_update用于已有数据在时间维度上的更新。

更详细解释可参考:

https://github.com/microsoft/qlib/issues/535

如何使用数据?

准备好数据以后,我们就可以在qlib中使用数据,qlib最近更新了一个tutorial notebook,更适合日常研究场景下在notebook中使用qlib。因为qlib原先使用配置文件+workflow的模式,让初学者很难入手。我们基于这个tutorial notebook介绍下qlib中的数据模块。

首先初始化qlib的数据目录,使用我们刚刚的目录初始化qlib:

qlib中提供了一个数据接口D,可以使用D获取原始数据,如以下代码可以获取股票601216指定时间的价格数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from qlib.data import D
df = D.features(['SH601216'], ['$open', '$high', '$low', '$close', '$factor'], start_time='2020-05-01', end_time='2020-05-31')

关于qlib中数据获取及使用的更详细介绍,可以参考以下notebook:

https://github.com/microsoft/qlib/blob/main/examples/tutorial/detailed_workflow.ipynb

我们对qlib上不同的数据模块类做一个总结,有利大家更好的理解qlib的各个模块:

  • DataLoader:用于读取原始数据,如果从刚刚dump的文件夹读取转换后的数据,可以使用QlibDataLoader,如果是直接使用外部已经准备好的数据文件,可以使用StaticDataLoader。
  • DataHandler:数据使用DataLoader读取好之后,就需要交给DataHandler进行处理,其中包括缺失值、标准化等处理,也可以自定义处理函数传入DataHandler。
  • Dataset:处理好的数据,需要整理成Dataset,才能在模型训练中使用。

本文核心介绍了,如果在qlib中导入外部数据。关于DataLoader、DataHandler、Dataset更多的使用方法及注意事项,我们将在本系列下一篇推文中更大家分享。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量化投资与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
NLP(自然语言处理)扫盲
最近在学NLP,给自己扫扫盲,看看NLP具体干什么,本文先学学概念,后面再深入。(不是很深入的文章,高手误入。) 自然语言处理(简称NLP),是研究计算机处理人类语言的一门技术,是人工智能(AI)的一个子领域,包括: 1.句法语义分析:对于给定的句子,进行分词、词性标记、命名实体识别和链接、句法分析、语义角色识别和多义词消歧。 2.信息抽取:从给定文本中抽取重要的信息,比如,时间、地点、人物、事件、原因、结果、数字、日期、货币、专有名词等等。通俗说来,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什
大数据和云计算技术
2018/03/08
1.7K0
NLP学习路线总结
自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究人与计算机之间用自然语言进行有效通信的理论和方法。融语言学、计算机科学、数学等于一体的科学。旨在从文本数据中提取信息。目的是让计算机处理或“理解”自然语言,以执行自动翻译、文本分类和情感分析等。自然语言处理是人工智能中最为困难的问题之一。
全栈程序员站长
2022/11/10
1.4K0
NLP学习路线总结
NLP 基础知识大集合
大纲 NLP基础概念 NLP的发展与应用 NLP常用术语以及扩展介绍 ---- 1.1 什么是NLP 基本分类 自然语言生成(Natural Language Generation,NLG) 指从结构化数据中以读取的方式自动生成文本,主要包括三个阶段: 文本规划:完成结构化数据中的基础内容规划; 语句规划:从结构化数据中组合语句来表达信息流; 实现:产生语法通顺的语句来表达文本; 研究任务 机器翻译 情感分析 智能问答 文摘生成 文本分类 舆论分析 知识图谱 ---- 1
村雨遥
2022/06/15
7370
NLP 基础知识大集合
自然语言处理(NLP)学习路线总结
NLP是自然语言处理(Natural Language Processing)的缩写,它是计算机科学领域中专注于研究如何使计算机理解、生成和处理人类语言的学科。NLP涉及的技术包括但不限于分词、词性标注、句法分析、语义分析、机器翻译、情感分析、信息抽取、文本生成等。通过NLP,计算机可以处理和分析大量的文本数据,帮助人们更好地理解和应用语言信息。
机器学习AI算法工程
2024/07/04
1.4K0
自然语言处理(NLP)学习路线总结
《自然语言处理实战课程》---- 第一课:自然语言处理简介
大家好,今天开始和大家分享,我在自然语言处理(Natural Language Processing,NLP)的一些学习经验和心得体会。
流川疯
2019/04/17
2.4K0
《自然语言处理实战课程》---- 第一课:自然语言处理简介
从语言学到深度学习NLP,一文概述自然语言处理
选自arXiv 机器之心编译 参与:李亚洲、蒋思源 本文从两篇论文出发先简要介绍了自然语言处理的基本分类和基本概念,再向读者展示了深度学习中的 NLP。这两篇论文都是很好的综述性入门论文,希望详细了解自然语言处理的读者可以进一步阅读这两篇论文。 本文第一部分介绍了自然语言处理的基本概念,作者将 NLP 分为自然语言理解和自然语言生成,并解释了 NLP 过程的各个层级和应用,这一篇论文很适合读者系统的了解 NLP 的基本概念。 第二部分描述的是基于深度学习的 NLP,该论文首先描述了深度学习中的词表征,即从
机器之心
2018/05/08
1K0
从语言学到深度学习NLP,一文概述自然语言处理
绝干货! | 最有用的自然语言处理(NLP)入门资料
一周的时间转瞬即逝,今天作者给大家分享一下最近收集关于自然语言处理的一些资料,与大家分享,记得保存喲~不然到期了你还得给我要,^_^
ShuYini
2019/08/08
1.8K0
绝干货! | 最有用的自然语言处理(NLP)入门资料
《人工智能与自然语言处理:开启智能交流新时代》
在当今科技迅猛发展的时代,人工智能已经成为了各个领域的热门话题。其中,自然语言处理(Natural Language Processing,简称 NLP)作为人工智能的一个重要分支,正逐渐改变着我们与计算机交互的方式。那么,人工智能究竟是如何进行自然语言处理的呢?
程序员阿伟
2024/12/09
1710
详解自然语言处理5大语义分析技术及14类应用(建议收藏)
自然语言处理技术的研究,可以丰富计算机知识处理的研究内容,推动人工智能技术的发展。
IT阅读排行榜
2020/08/07
5.9K0
详解自然语言处理5大语义分析技术及14类应用(建议收藏)
【精品】NLP自然语言处理学习路线(知识体系)
下面的鱼骨图就是个人整理的NLP相关的一个学习路线,某种意义上可以理解为一个知识体系,本文将尽量结合示例简单的去描述一下这些基本概念。
MinChess
2023/09/07
1.2K0
【精品】NLP自然语言处理学习路线(知识体系)
一文梳理NLP之机器翻译和自动摘要的发展现状
2 NLP入门:CNN,RNN应用文本分类,个性化搜索,苹果和乔布斯关系抽取(2)
double
2018/07/25
2.6K0
【一分钟知识】依存句法分析
本文简要介绍了自然语言处理中极其重要的句法分析,并侧重对依存句法分析进行了重点总结,包括定义、重要概念、基本方法、性能评价、依存分析数据集,最后,分享了一些流行的工具以及工具实战例子。
zenRRan
2019/07/12
1.7K0
自然语言处理(NLP)技术的详细介绍
自然语言处理(Natural Language Processing,简称NLP)是人工智能(Artificial Intelligence,简称AI)领域的一个重要分支,旨在让计算机能够理解、理解和生成人类语言。
正在走向自律
2024/12/18
3K0
自然语言处理(NLP)技术的详细介绍
《NLP》你真的了解”自然语言处理(NLP)“吗?
上一周,清华大学AMiner发布了《2018自然语言处理研究报告》(下载地址:https://pan.baidu.com/s/1IXuZLgGVHjfYyyX63jcVHQ),因为时间原因,没能及时的更新,希望大家见谅。现在作者以初学者的态度整理了一下该报告的主要内容,希望能帮助大家。
ShuYini
2019/08/08
1.4K0
《NLP》你真的了解”自然语言处理(NLP)“吗?
从技术到人才,清华-中国工程院知识智能联合实验室发布「2018自然语言处理研究报告」
摘自AMiner 机器之心整理 参与:李亚洲、思源 自然语言处理是现代技术最重要的组成部分之一,而最近清华大学和中国工程院知识智能联合实验室发布一份非常全面的 NLP 报告。该报告从 NLP 的概念介
机器之心
2018/08/07
4940
从技术到人才,清华-中国工程院知识智能联合实验室发布「2018自然语言处理研究报告」
NLP学习基础入门(上)
NLP (Natural Langunge Possns,自然语言处理)是计算机科学领域以及人工智能领域的一个重要的研究方向,它研究用计算机来处理、理解以及运用人类语言(如中文、英文等),达到人与计算机之间进行有效通讯。所谓“自然”乃是寓意自然进化形成,是为了区分一些人造语言,类似C++、Java 等人为设计的语言。
菲宇
2020/03/25
1K0
一文概览NLP算法(Python)
NLP是人工智能领域历史较为悠久的领域,但由于语言的复杂性(语言表达多样性/歧义/模糊等等),如今的发展及收效相对缓慢。比尔·盖茨曾说过,"NLP是 AI 皇冠上的明珠。" 在光鲜绚丽的同时,却可望而不可及(...)。
算法进阶
2022/06/02
2.4K0
一文概览NLP算法(Python)
HanLP《自然语言处理入门》笔记--1.新手上路
自然语言处理(Natural Language Processing,NLP)是一门融合了计算机科学、人工智能及语言学的交叉学科,它们的关系如下图所示。这门学科研究的是如何通过机器学习等技术,让计算机学会处理人类语言,乃至实现终极目标–理解人类语言或人工智能。
mantch
2020/02/18
1.4K0
自然语言处理(一)NLP概述
NLP是利用计算机为工具,对人类特有的书面形式和口头形式的自然语言的信息进行各种类型处理和加工的技术.
JNJYan
2019/01/11
1.2K0
NLP随笔(四)
70 年代以后随着互联网的高速发展,语料库越来越丰富以及硬件更新完善,自然语言处理思潮由理性主义向经验主义过渡,基于统计的方法逐渐代替了基于规则的方法。
XianxinMao
2021/08/04
4410
推荐阅读
相关推荐
NLP(自然语言处理)扫盲
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档