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,它只支持最小單位分鍾的調度,但稍加運用,也可以用來調度我們獲取實時數據的程序。