python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据
前两篇文章分别简单介绍了tushare这个财经数据接口包的使用,用起来很简单顺手,一两句代码就可以获取到你想的要的数据,但是有在群里经常看到说获取数据经常挂,延迟很严重等等,其实那是因为使用者没有好好去领悟和了解工具。片面两篇文章已经对tushare如何获取股票的历史数据和实时数据有过简单的介绍,没看过的朋友可以到微信公众号【数据之佳】点击往期文章就可以查看。
上两篇文章只是向大家介绍了tushare这个工具,相信有不少对量化投资感兴趣,却不知道如何获取数据的朋友已经尝试过使用他来获取数据,但遗憾的是,如果不注意使用的技巧,你获取数据的脚本即使不经常挂,得到的数据质量也不高,尤其是实时分笔数据,上一篇文章展示的代码,获取一次所有股票的实时数据整整花了20秒的时间,遇到这种情况,可能很多人会想,是不是我的网速的问题,或者是数据服务器限制访问的频次导致的?所以只能退而求其次,自我安慰,有总比没有好。
其实不然,我们使用tushare来获取数据,器数据也是通过爬虫从各个数据服务器爬下来的,那么在代码访问数据的过程中,每一次访问都需要经过验证,就好像你需要从仓库中取一万个零件,你每一次只取一个,而仓库管理员必须遵守规定,每一次取物品都需要验证人的身份,做记录等等一系列繁杂的手续,很可能你验证身份所花的时间比你取物品的时间还要多得多,然而如果你有一辆卡车,一次可以运走一千个零件,那么你每次验证身份,就可以取走一千件,这样身份验证所花的时间比一件一件的取要少一千倍。
这么一说其实道理是很简单的,关键在于你会不会这样去想,向服务器获取数据也一样,每次访问服务器,都需要发送请求,验证等等,这些都是无用的时间开销,如果我们能一次性获取多条数据,就可以大大节省时间开销,恰好tushare获取实时数据的接口函数提供了这样的功能,一次性可以获取多只股票的数据,但不能太多,tushare网页文档说的是最好每次不要获取超过30只股票的数据,但经过我验证,每次最多可以获取880只股票的实时数据,现在深市沪市一共有3400多只股票,我们只需要获取4次就够了,下面提供一下源代码,核心代码的确只有5行,为了验证是否获取一次数据的时间间隔,我把获取数据之前,以及之后的时间都打印出来了。
import tushare as ts import pandas as pd import datetime f=open('F:\get_stocks\get_data\stocks.txt') time1=datetime.datetime.now() stocks=[line.strip() for line in f.readlines()] data1=ts.get_realtime_quotes(stocks[0:880]) data2=ts.get_realtime_quotes(stocks[880:1760]) data3=ts.get_realtime_quotes(stocks[1760:2640]) data4=ts.get_realtime_quotes(stocks[2640:-1]) time2=datetime.datetime.now() print('开始时间:'+str(time1)) print('结束时间:'+str(time2)) print(data1) print(data2) print(data3) print(data4)
开始时间:2017-12-04 21:42:27.184003
结束时间:2017-12-04 21:42:27.696398
可以看到,获取数据前后的时间差,只有0.5秒多一些,准确的说,这一次实验只用了0.5123秒,当然在这里只是抛砖引玉,帮助大家打开思路,在这里还得感谢tushare的开发者,让我们可以很方便的就获取到一些很有价值的金融数据。虽然他不是万能的,但是却能使我们把更多的时间花在自己的模型上面。
在这里数据就不贴了,感兴趣的朋友自己动手实验一下,我的电脑配置很一般,网速也算不上很好,不用担心你的网速,这个速度你一样可以达到
如果想要把这个思路用在自己的服务器上面,用来获取一整天的实时数据,建议读者使用调度工具,最简单的是linux下面的crontab,它只支持最小单位分钟的调度,但稍加运用,也可以用来调度我们获取实时数据的程序。
本文来自博客园,作者:王竹笙,转载请注明原文链接:https://www.cnblogs.com/edeny/p/10069986.html