小编说:数据可以说是量化投资的根本,一切投资策略都是建立在数据基础上的。本文以优矿网为例,带领大家用Python实现金融数据的获取与整理。

本文选自《Python与量化投资:从基础到实战》一书。

作为投资者,我们常听到的一句话是“不要把鸡蛋放入同一个篮子中”,可见分散投资可以降低风险,但如何选择不同的篮子、每个篮子放多少鸡蛋,便是见仁见智的事情了,量化投资就是解决这些问题的一种工具。

目前各种在线策略编程平台都支持Python语言,例如优矿、米筐、聚宽等,这也是我们选择Python进行量化投资的原因。

1 金融数据获取

我们可以通过多种途径获取金融数据,业内的许多公司会购买Wind、恒生聚源等数据提供商的数据库,若尚未入行,则也可以通过非常多的第三方策略平台获取免费数据,例如优矿、聚宽、米筐等。优矿依托通联数据,提供了丰富的数据信息,这里主要介绍如何在优矿中调用获取金融数据。

首先,可以在优矿官网(https://uqer.io)注册一个账号,然后单击“研究数据”模块,如图所示。

可以看到,这些数据基本涵盖了大部分金融数据,而且绝大部分是免费的。我们以一些最常用的金融数据来展示如何对它们进行调用。

单击“开始研究”模块,在左侧找到新建按钮,新建一个Notebook,再单击对应的Notebook,便进入Python代码的编辑环境。

我们将NoteBook左上角的模式设置为代码模式,开始调用数据。首先,打开一个浏览器新窗口并回到优矿的“研究数据”模块,寻找我们需要的数据。假定需要股票日行情数据,则我们既可以通过左边的一级选项一步一步地往下点来找到数据,也可以直接通过关键字在上方的搜索框中进行搜索。然后,我们找到了沪深股票的日行情数据,单击“展开详情”,结果如下图。

在详情中展示了各个参数的含义,例如,在输入时我们需要给出要调用哪些股票及在什么时间段的行情。而在返回值中,我们可选的行情不仅包括基本的高开低收、成交量、涨跌幅,也包括流通市值、VWAP等数据,应将所有选择返回的项传给field参数。在Notebook中的代码编写如图。

上图中,我们调取了平安银行与浦发银行在2015年5月13日的收盘价与总市值,返回的是一个DataFrame。需要注意的是,这里传入的股票代码是通联内部的编码,要在原股票代码的基础上加上后缀,例如对深市的股票加上后缀XSHE,对沪市的股票则加上后缀XSHG。当然,也支持直接传入股票代码,可以将原始股票的代码传入ticker参数。

除了某一天的截面数据,DataAPI也支持获取过去一时间段的数据,通过beginDate与endDate参数即可方便地获取。下图中,我们调取了平安银行与浦发银行从2018年1月17日至2018年1月19日的收盘价与总市值数据。

股票日行情DataAPI支持提取多只股票在某一时间段的数据,我们再来看看量化投资常用的因子数据。

在搜索因子中排名前两位的就是我们需要的DataAPI。可以看到有两个因子数据接口:一个用于获取多只股票在某一天的因子数据,另一个用于获取某只股票在历史上某一时间段的因子数据。可能是出于对数据量的考虑,并没有一个因子DataAPI可以直接调用多只股票在某一时间段的数据,所以我们在使用优矿的因子DataAPI时,应当考虑哪个DataAPI会更适合我们的需求。

如果只是想调用某一天的多只股票的因子数据,则应该使用如下DataAPI,如下图所示。

而如果想调用一只股票在某一时间段的因子数据,则应该使用另一个 DataAPI。

如果我们还是想获取多只股票在某一时间段的因子数据,则可以写循环来多次调用DataAPI,将它们全部取出来。

除了这些常用的金融数据,研究数据模块还包括财报数据、事件数据、期货数据等,我们可以通过搜索或者分类选项找到它们,在详情中对相应的参数有详细的解释。

2  数据整理

仅仅知道如何获取数据是不够的,我们还需要将原始数据整理成正确的、便于我们进一步使用的数据。下面展示一些常用的数据整理理念及Python的实现方法。

2.1数据整合

数据整合指将不同数据源的数据进行汇总,形成可用于综合分析的表。

2.1.1  合并、追加

指向表中添加其他表中的字段或记录。例如,如果要分析一只股票站上其均线的情况,则需要知道其收盘价格及均线价格。当然,均线价格可以通过收盘价计算出来,但实际上在优矿因子库中已经有了均线因子,可以直接使用。现在的问题就变成了,如何将我们通过行情DataAPI与因子DataAPI调出来的数据合并?这个问题在Python中通过一两行代码即可解决。

上图所示,我们通过merge函数便把均线价格添加到行情表上了,再在这个表上判断当日是否站上均线就十分方便了。

2.1.2  数据透视

指将长表转换为宽表,将作业型表转换为分析型表。假设我们有一个包含多只股票在某一时间段的总市值数据的长表,是优矿行情DataAPI的返回结果类型,那么如何方便地求出这些股票每一天的市值之和呢?这时可以使用Python的数据透视表方法,将长表转换为宽表,之后运用DataFrame的sum方法即可很简单地解决这个问题。

如上所示,在DataAPI的原始返回数据结构中计算每天的市值之和是比较困难的,然而在转换数据格式后,分析和计算起来就十分方便了。

2.2数据过滤

我们经常要对原始数据按某个指标进行过滤,例如在获取到了所有股票的PE后,仅想看PE大于0的股票(对于PE小于0的股票,该指标没有意义),这是非常常见的数据整理需求。

下图中,我们调取了所有A股在2018年1月19日的PE值,然后在DataFrame属性框中写筛选逻辑即可完成过滤。

2.3数据探索与数据清洗

通常我们会认为ROE的值约为10%~30%,但实际上在调用所有股票的ROE因子进行分析时,我们发现并不是这么一回事。这里以ROE为例,介绍常用的数据探索方法及数据清洗方式。

我们在进行数据探索时,通常会先通过做一个简单的直方图来看看数据的分布。如下所示,真实的ROE分布可能与我们想象的并不一样,存在许多负值,并且大约存在-3~3的极端值。

可以再做一下boxplot图来看看结果,如下图。

通过上图的boxplot图也可以看出,在数据中存在很多异常值。当然这些异常值按照ROE的传统算法,可能并不算是错误的值。但如果要把ROE当作一个指标,进一步分析其对股票的未来收益或者其他方面的影响,则在建立回归或者其他模型时,就必须考虑到对异常值的处理,因为它对模型的影响可能很大。

这里我们以最常用的3倍标准差法为例,将超过3倍标准差的数据调整为3倍标准差。

可以看到,经过去极值处理后的数据全部在原始数据的3倍标准差内,分布不再有极端值,已处理后的因子建模将更加稳定,这也是数据挖掘中常常提及的“盖帽法”。

2.4数据转化

除了数据清洗,为了建立模型,我们有时还需要进行数据转化。这里介绍两个常用的数据转化方法:数据标准化及设置哑变量。

2.4.1  数据标准化

数据标准化可以消除量纲及变量自身变异程度的影响,对很多模型来说都是十分重要的。常用的数据标准化有Min-max标准化和z-score标准化。

Min-max标准化的计算公式为:

z-score标准化的计算公式为:

Min-max标准化可以将标准化后的值统一到0~1;z-score标准化可以使标准化后的数据分布均值为0,方差为1。我们将去极化后的数据再进行一次标准化,如下图。

标准化永远不会改变数据原始的序数,它做的只是对数值大小的调整。若不看数值的话,则数据的分布并没有变化。

2.4.2  哑变量

除了标准化,我们在进行金融建模时的另一个常用的数据转化方法就是设置哑变量。例如,在将股票的行业信息加入建模分析时,依据原始分类是无法进行处理的,必须把它转化为0或1的变量。

上图中,我们首先调用通联数据的股票行业分类DataAPI,获取各股票的一级行业分类名字,然后通过一系列数据处理,生成每个行业的0或1的变量,这样才能把行业作为变量加入模型中进行分析。

当然,Pandas本身也有get_dummies函数,也可以瞬间对分类变量进行哑变量化,读者可自行查阅帮助文档学习。

相关图书《Python与量化投资:从基础到实战》

量化投资名师王小川主编、提供Python零基础入门及量化策略建模参考及实现、提供大型回测平台、代码直接实盘、可在线交流

作者:王小川 等

图书详情:京东、当当、亚马逊

python处理金融数据_量化投资:用Python实现金融数据的获取与整理相关推荐

  1. python 量化交易 库_量化投资的Python库——Tushare

    本来想用python自带的help命令和dir命令,来写一个关于Tushare库的使用手册呢,但是后来发现了Tushare的官方网站, ̄□ ̄||,网址如下: http://tushare.org/ 把 ...

  2. python量化投资自学书籍推荐_好书推荐:量化投资以Python为工具

    戴着耳机在手机键盘上打字会妨碍你释放或者接收友好信号,而缺乏与他人互动会减少你提高社交技能.观察并向别人学习的机会.向别人学习甚至不需要投入太多精力.你要做的只是找一家餐馆去观察别人.量化投资以Pyt ...

  3. python 量化投资书_好书推荐:量化投资以Python为工具

    戴着耳机在手机键盘上打字会妨碍你释放或者接收友好信号,而缺乏与他人互动会减少你提高社交技能.观察并向别人学习的机会.向别人学习甚至不需要投入太多精力.你要做的只是找一家餐馆去观察别人.量化投资以Pyt ...

  4. python实训收获_Python量化投资实训营

    原标题:Python量化投资实训营 时间:基础班:2018.2.2~2018.2.7(五天) 地点:清华大学深圳研究生院量化研究中心 在2017年,已经成功举办3期线下营队 公益支持方为 清华大学深圳 ...

  5. 如何搭建量化投资研究系统?(数据篇之财务数据)

    股票市场的存在为企业融资提供了一个自由开放的环境,在这里投资者们将资金配置于他们认为的优秀.稳健.有潜力的企业,无数的投资决策汇聚而成的"群体智慧"影响着整体的经济运行,最终促进社 ...

  6. 推荐学习《Python与量化投资从基础到实战》PDF及代码+《量化投资以Python为工具》PDF及代码...

    利用python分析量化投资问题是现在研究的热点,推荐两份资料用于学习 <Python与量化投资:从基础到实战>主要讲解如何利用Python进行量化投资,包括对数据的获取.整理.分析挖掘. ...

  7. 量化投资交易python工具干货大全

    http://www.newsmth.net/nForum/#!article/Python/128763 最近程序化交易很热,量化也是我很感兴趣的一块. 国内量化交易的平台有几家,我个人比较喜欢用的 ...

  8. java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略

    <量化投资:以python为工具>第五部分笔记 先来画k线图,要注意finance模块已经从matplotlib库中去除,现在要用mpl_finance库,单独安装. 其中有candles ...

  9. python股票编程入门_Python股票量化投资-3.python基础

    Python股票量化投资-1.开发环境部署 Python股票量化投资-2.量化投资介绍 继续开始今天的内容,主要介绍 PyCharm的开发使用[这IDE对JAVA人员来说不陌生] Python的语法推 ...

最新文章

  1. 数据库删除记录核心语句 解读 (vb6.0)
  2. Spring MVC拦截器实现
  3. python 网页自动处理_推荐一款 10 行 Python 代码实现网页自动化工具
  4. jquery php cookie,jQuery的Cookie插件 cookie 使用方法
  5. 传输文件过程中遇到异常被中断
  6. 2018冬令营模拟测试赛(十八)
  7. haproxy配置文件
  8. c语言猴子吃桃嵌套调用编程,C语言实现猴子吃桃问题(循环、递归两种方法)...
  9. SAP SD 模块与FI、MM的接口
  10. 让学习体系化,造福一大波上进青年
  11. .html与.htm为网页后缀的区别
  12. js 刷新,返回上一步,前进,后退,
  13. django-rest-framework二--权限(转载)
  14. 度分秒与度数相互转换的Matlab函数
  15. win10 常用DOS命令
  16. 170923_Spring Cloud 微服务实战(翟永超著) 读书笔记(一)_什么是Spring Cloud?
  17. 我的理想200字计算机工程师,我的理想工程师作文(我的理想是做一名工程师)...
  18. SAP FICO 固定资产批导
  19. 直击文印痛点 中小企业需要这样一台复合机
  20. QQ电脑版修改聊天界面的显示比例后变成纯文本界面

热门文章

  1. 单体、集群、分布式、微服务概念理解
  2. 【微信小程序】组件使用及属性参考
  3. 怎样用matlab实现图像的缩放,matlab实现图像缩放
  4. 做一个保护星球小游戏
  5. 嵌入式Tomcat示例
  6. java 性能 火焰图_flamegraph(火焰图)性能分析
  7. 求Python 计算列表元素之和
  8. 机器人在进行激光建图,会出现激光与地图不重合的情况
  9. matlab trapz二重积分函数_科学网—MATLAB中的数值积分方法 - 王福昌的博文
  10. 比较CPU和GPU中的矩阵计算