本期导读

本文介绍了股票1分钟数据常见的一些问题,比如时间少于240分钟,数据不准确,时间格式不一致等等,之后展示用Python找出这些问题的思路和代码。

网上教学量化交易的文章很多,但是在我自己从事量化的这两年多里面,第一年我50%的工作量都花在了数据处理上面,其中预处理中的股票数据清洗工作在最初阶段占用了我大量的时间。一开始我就没有用手工的方式去做,我用python去做清洗的。但是股票1分钟数据里面各种奇奇怪怪的错误层出不穷,我只能不断地打补丁,直到一年后才开始稳定下来。本文分享我处理这些问题的经验。

01

1分钟数据结构

原始的一分钟数据往往是csv文件格式。这个文件没有head,用逗号“,”分割,每一列数据依次是日期,时间,开盘价,最高价,最低价,收盘价,量能,金额

2f77bbff92db87d1c88ce9e61e0948d6.png

我们要把这种原始的csv1分钟文件转换成hdf5格式才能在系统中使用。但是在转换过程中经常遇到错误,原因在于csv文件中有很多问题,导致转换失败,或者转换出来的数据有错误。所以我们需要在源头先做一次检查,把“脏”数据清洗一遍。csv转为hdf5的格式可以看下面这篇文章。

02

1分钟数据文件中常见的各种错误

我在处理过程中发现过以下几种问题:

1. 含有不等于240分钟的交易日的股票文件。即文件行数无法整除240

2. 含有连续25分钟无量的文件,即可能盘中停牌,或者数据来源中断的情况。

3. 价格=1000的情况

4. 量能>=1亿手的情况(一般不太可能出现)

5. 时间格式问题

6. 如果是指数,还要与沪市大盘做交易日比较。

接下去分别详细描述每一个问题,并给出解法。

1. 含有不等于240分钟的交易日的股票文件。即文件行数无法整除240

我们知道,交易日一天是4个小时,也就是240分钟,所以正常情况下应该有240行数据,但是早期数据往往少于240分钟。在回测中遇到这种情况,就会出问题。所以应该事先找出这部分数据。

思路:如果一天有240分钟,那么一个文件中无论包含多少天,这个文件的行数应该能够整除240

解决:

思路2:也有可能正巧有些数据,有2个或多个交易日不足240行数据,但是加起来正好是240行,所以可以躲过第一种检测。

解决方法:一个个交易日去检查,设定一个指针firstmin指向每一个交易日的第一行数据,另一个指针pos遍历这一个交易日的每一天。如果pos指向了第二个

2. 含有连续25分钟无量的文件,即可能盘中停牌,或者数据来源中断的情况。

这种问题在新股和停牌的股票中很常见,这几年数据稳定多了,但是以前的数据这种情况经常出现。需要记录下来以后可以有其他数据后补充进去。

3. 价格=1000的情况

4. 量能>=1亿手的情况(一般不太可能出现)

这两个问题放一起检查,这种问题看起来匪夷所思,但是在我处理过程中确实出现过。

5. 时间格式问题

我们要求的时间格式是YYYY/MM/DD,但是有可能出现MM/DD/YYYY,YYYY-MM-DD,DD/MM/YYYY等格式,这会导致在之后转换成hdf文件时出错。

思路:用正则表达式匹配

解决:

把这个功能添加进上面的check_line函数中。

这个check_line比上面的多了几行,代码很简单。主要是注意一天只要记录一次就够了,否则记录240次,看log会发现满屏的时间错误,时间错误。

6. 如果是指数,还要与沪市大盘做交易日比较。

很幸运,一般来说,大盘的数据总是完整,准确的。

不幸的是,其他的指数就经常有很多问题了,比如缺失交易日,数据错误等等。

解决:这个功能我是把csv转换成hdf5之后再做的,用pandas的index比较很方便。首先要保证sh000001没有交易日缺失,然后用下面这一句话就可以判断指数sz399300是否有交易日缺失。

03

好的log可以帮你更快定位问题

对沪市主板,深市主板,中小板,创业板,指数各自单独做记录,有利于之后分批做处理。

下面的文件名分前缀和后缀,前缀代表板块,后缀代表问题。sh6代表沪市主板,sz000代表深市主板,sz002代表中小板,sz300代表创业板。后缀imcomp代表有交易日不满240分钟,novol代表有连续25分钟以上无量,wrong_price代表有价格错误,datefmt代表日期格式不一致。

568864bb8cca197988d96a3ea53c0aa6.png

下面展示一些记录。

汇总

ca62abe481bc7fdb44765d0b01778d31.png

无量日

833debd61fcfcfa84584427b268aa742.png

不完整日

f42e1f27bab5c3824215a1075331d7e2.png

问题找出来了,怎么解决呢?

大多数情况只能再去寻找其他数据,把多份不完整的数据补完成一份完整的数据。

数据错误我是手动去一个个检查,然后对照通达信等看盘软件去修正。但是这个只能修正近期的数据,过去的数据还是没办法。只能去找其他数据源来对照修复。

时间格式错误最简单,写个python脚本替换一下就行了。

好了,今天的分享就到这里,大家有什么问题可以留言。

up主写文花了不少时间,觉得好的话,请帮忙点个赞,给up主一点鼓励,谢谢啦~

end

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐