Moneycode 2018-05-18
小编说:数据可以说是量化投资的根本,一切投资策略都是建立在数据基础上的。本文以优矿网为例,带领大家用Python实现金融数据的获取与整理。本文选自《Python与量化投资:从基础到实战》一书。
作为投资者,我们常听到的一句话是“不要把鸡蛋放入同一个篮子中”,可见分散投资可以降低风险,但如何选择不同的篮子、每个篮子放多少鸡蛋,便是见仁见智的事情了,量化投资就是解决这些问题的一种工具。
目前各种在线策略编程平台都支持Python语言,例如优矿、米筐、聚宽等,这也是我们选择Python进行量化投资的原因。
可以看到,这些数据基本涵盖了大部分金融数据,而且绝大部分是免费的。我们以一些最常用的金融数据来展示如何对它们进行调用。
在详情中展示了各个参数的含义,例如,在输入时我们需要给出要调用哪些股票及在什么时间段的行情。而在返回值中,我们可选的行情不仅包括基本的高开低收、成交量、涨跌幅,也包括流通市值、VWAP等数据,应将所有选择返回的项传给field参数。在Notebook中的代码编写如图。
除了某一天的截面数据,DataAPI也支持获取过去一时间段的数据,通过beginDate与endDate参数即可方便地获取。下图中,我们调取了平安银行与浦发银行从2018年1月17日至2018年1月19日的收盘价与总市值数据。
股票日行情DataAPI支持提取多只股票在某一时间段的数据,我们再来看看量化投资常用的因子数据。
而如果想调用一只股票在某一时间段的因子数据,则应该使用另一个 DataAPI。
如果我们还是想获取多只股票在某一时间段的因子数据,则可以写循环来多次调用DataAPI,将它们全部取出来。
1 数据整合
数据整合指将不同数据源的数据进行汇总,形成可用于综合分析的表。
1.合并、追加
指向表中添加其他表中的字段或记录。例如,如果要分析一只股票站上其均线的情况,则需要知道其收盘价格及均线价格。当然,均线价格可以通过收盘价计算出来,但实际上在优矿因子库中已经有了均线因子,可以直接使用。现在的问题就变成了,如何将我们通过行情DataAPI与因子DataAPI调出来的数据合并?这个问题在Python中通过一两行代码即可解决。
上图所示,我们通过merge函数便把均线价格添加到行情表上了,再在这个表上判断当日是否站上均线就十分方便了。
2.数据透视
3 数据探索与数据清洗
通常我们会认为ROE的值约为10%~30%,但实际上在调用所有股票的ROE因子进行分析时,我们发现并不是这么一回事。这里以ROE为例,介绍常用的数据探索方法及数据清洗方式。
我们在进行数据探索时,通常会先通过做一个简单的直方图来看看数据的分布。如下所示,真实的ROE分布可能与我们想象的并不一样,存在许多负值,并且大约存在-3~3的极端值。
可以再做一下boxplot图来看看结果,如下图。
可以看到,经过去极值处理后的数据全部在原始数据的3倍标准差内,分布不再有极端值,已处理后的因子建模将更加稳定,这也是数据挖掘中常常提及的“盖帽法”。
4 数据转化
除了数据清洗,为了建立模型,我们有时还需要进行数据转化。这里介绍两个常用的数据转化方法:数据标准化及设置哑变量。
z-score标准化的计算公式为:
Min-max标准化可以将标准化后的值统一到0~1;z-score标准化可以使标准化后的数据分布均值为0,方差为1。我们将去极化后的数据再进行一次标准化,如下图。
标准化永远不会改变数据原始的序数,它做的只是对数值大小的调整。若不看数值的话,则数据的分布并没有变化。
上图中,我们首先调用通联数据的股票行业分类DataAPI,获取各股票的一级行业分类名字,然后通过一系列数据处理,生成每个行业的0或1的变量,这样才能把行业作为变量加入模型中进行分析。
当然,Pandas本身也有get_dummies函数,也可以瞬间对分类变量进行哑变量化,读者可自行查阅帮助文档学习。
欢迎大家关注我的博客:https://home.cnblogs.com/u/sm123456/
欢迎大家加入千人交流学习,资源共享群:125240963