python股票数据清洗,量化交易股票数据清洗工作不用愁,Python帮你解忧愁
本期导读本文介绍了股票1分钟数据常见的一些问题,比如时间少于240分钟,数据不准确,时间格式不一致等等,之后展示用Python找出这些问题的思路和代码。网上教学量化交易的文章很多,但是在我自己从事量化的这两年多里面,第一年我50%的工作量都花在了数据处理上面,其中预处理中的股票数据清洗工作在最初阶段占用了我大量的时间。一开始我就没有用手工的方式去做,我用python去做清洗的。但是股票1分钟数据里
本期导读
本文介绍了股票1分钟数据常见的一些问题,比如时间少于240分钟,数据不准确,时间格式不一致等等,之后展示用Python找出这些问题的思路和代码。
网上教学量化交易的文章很多,但是在我自己从事量化的这两年多里面,第一年我50%的工作量都花在了数据处理上面,其中预处理中的股票数据清洗工作在最初阶段占用了我大量的时间。一开始我就没有用手工的方式去做,我用python去做清洗的。但是股票1分钟数据里面各种奇奇怪怪的错误层出不穷,我只能不断地打补丁,直到一年后才开始稳定下来。本文分享我处理这些问题的经验。
01
—
1分钟数据结构
原始的一分钟数据往往是csv文件格式。这个文件没有head,用逗号“,”分割,每一列数据依次是日期,时间,开盘价,最高价,最低价,收盘价,量能,金额

我们要把这种原始的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代表日期格式不一致。

下面展示一些记录。
汇总

无量日

不完整日

问题找出来了,怎么解决呢?
大多数情况只能再去寻找其他数据,把多份不完整的数据补完成一份完整的数据。
数据错误我是手动去一个个检查,然后对照通达信等看盘软件去修正。但是这个只能修正近期的数据,过去的数据还是没办法。只能去找其他数据源来对照修复。
时间格式错误最简单,写个python脚本替换一下就行了。
好了,今天的分享就到这里,大家有什么问题可以留言。
up主写文花了不少时间,觉得好的话,请帮忙点个赞,给up主一点鼓励,谢谢啦~
end
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)