量化百科

量化回测的基础:干净的,准确的历史股票数据

由polll创建,最终由polll 被浏览 31 用户

如果你想回测交易策略,可能第一件需要的东西就是历史交易数据。的确,如果你有上帝之手或者从未来穿越回来,那么不经过测试,直接上线实盘交易,也能赚的盆满钵满。而我等凡人,则必须在历史数据中回测我们的策略。而国外有些基金公司,交易策略都有数月的回测和模拟盘考验期。

或许你会对自己说“这不是很难啊 - 就是拿到数据然后把数据加入数据库中。” 我们也希望这件事情如此简单!但是现实残酷,以国内股票数据来说:

  1. 获取股票数据的接口很多。免费的接口有新浪、网易、雅虎的API接口,收费的就是证券公司及相应的公司提供的接口。接口不统一,数据质量参差不齐。
  2. 数据颗粒度相差很大。最粗的有日k线数据,细一点有5分钟/1分钟数据,更细一点有9s数据/5s数据,颗粒度最细就是3s数据tick数据了。
  3. 量化交易最好有level 2的3秒tick数据,并有卖/买 10笔的内容。这些数据往往就不是免费能够拿到的了。

如何才能为我们的AI量化框架打下坚实的数据基础呢?

历史日K线数据

日K线数据有很多地方可以下载到。国内提供股票数据的接口如sinajs,http://money.163.com,yahoo,它们提供的API接口不同,每家提供的数据大同小异,可以选择一家的数据来处理。国内有个开源的财经数据获取包,封装了上述的接口,不需要关心那里来的数据,方便可靠,推荐使用,那就是著名的tushare了(TuShare -财经数据接口包)。它使用起来十分方便,有python接口,和我们需要定制的回测框架pyalgotrade,DL的框架TensorFlow十分契合,这里强烈推荐。我们后面也会写文章介绍如何使用它,敬请关注。为了方便起见,这里分享了已经下载好的2016.1.1到2017.8.31号的数据。(链接:http://pan.baidu.com/s/1nvHsctV 密码:9gig)

历史Tick+买卖5笔数据

日K线数据对SMA等策略勉强够用,但对我们量化交易则是远远不够,我们的DL也需要feed大量的数据。虽然我们的目标是中低频量化交易,但对数据的要求还是比较高的,Tick数据+买卖10笔最好,再不济也需要买卖5笔的数据。那么这个数据从哪里来呢?合法的大概有三种

  1. 从tushare下载
  2. 从证券/基金公司购买
  3. 从淘宝购买

tushare有实时tick 5笔数据,但没有历史tick5笔数据。2)需要高昂的费用,3)虽然相对便宜,但数据质量堪忧。

后面我们会介绍怎么用tushare批量下载实时tick 5笔数据。聪明的你也许会说那我从现在开始就下载5笔数据,过一阵不就有历史数据了吗?诚然如果你不急着开始回测你的策略,这也不失为一个经济的办法。但tushare的数据和淘宝数据有个很大的问题,那就是缺帧严重,3秒数据并不稳定,有时候会缺少很多个bar。这对我们的目标:多因子策略,会带来很大问题。我们引入股票联动的因子,而操作标的bar的稀疏不均,与参考标的时间序列不一致,会极大影响我们的回测效率在消除影响上。一个折中的办法是在使用前清洗一下,用一次性的清洗代替大量循环中的错误处理。

另一个问题是数据规模的庞大,2017.8.1就有3048只股票交易,每只股票tick5笔的数据大概1MB左右,2016年大致有246个交易日,所以单单2016年的数据就有 3048 × 246 × 1MB /1024 = 732GB左右。这里有个2017.8.1日当日数据的例子(链接:https://pan.baidu.com/s/1bXCaj8 密码:esh0)

因为大小关系,我们现在不能开放下载所有数据,只会对我们将来参考的股票池中的股票数据公布下载,这样既方便大家测试代码,又不会影响相关人士的生意,可谓两全其美。作为一个例子和后继文章的基础,我们精选了29只证券类股票:

002500,山西证券,证券,山西
000686,东北证券,证券,吉林
000712,锦龙股份,证券,广东
000728,国元证券,证券,安徽
000750,国海证券,证券,广西
000776,广发证券,证券,广东
000783,长江证券,证券,湖北
002673,西部证券,证券,陕西
002797,第一创业,证券,深圳
600061,国投安信,证券,上海
600109,国金证券,证券,四川
600369,西南证券,证券,重庆
601099,太平洋,证券,云南
601198,东兴证券,证券,北京
601377,兴业证券,证券,福建
601555,东吴证券,证券,江苏
601901,方正证券,证券,湖南
601688,华泰证券,证券,江苏
601788,光大证券,证券,上海
000166,申万宏源,证券,新疆
600030,中信证券,证券,深圳
601211,国泰君安,证券,上海
600837,海通证券,证券,上海
600958,东方证券,证券,上海
600999,招商证券,证券,深圳
601881,中国银河,证券,北京
601375,中原证券,证券,河南
600909,华安证券,证券,安徽
601878,浙商证券,证券,浙江

分享了它们今年到目前为止(2017.1.1到2017.8.31)的5笔tick数据(链接:http://pan.baidu.com/s/1dEICPJ7 密码:6d8i)。大家可以看到数据分布均匀整洁,我们可以将之作为今后数片文章的数据范例。请大家多多点赞支持!

下一节会介绍编程环境的设置,在此之前请做好最基本的准备:

Tensorflow Windows下安装

Tensorflow Linux下安装

欢迎关注本专栏!

标签

量化回测交易策略实盘交易回测股票