自打入門量化分析起,就有相當部分的時間在與數據打交道,從數據的獲取、清洗到使用,對分析而言既是繁瑣的,也是必須的。有大牛曾經說,量化分析有8成的開發時間都在處理數據。
為了節省時間,將更多精力投入到策略的開發,數據的來源和初始的質量就尤為重要。
方便的數據渠道和整潔的數據編排,可以節省大量時間。
這里我們以大A股為例,分享3種獲取行情交易數據的方法,推薦程度為由低到高。
一、從行情軟件手動搬運
通達信、大智慧、同花順等行情軟件都會將數據儲存在本地。
1、一些比較基本的數據(如日線、分鍾線等)通常在行情軟件中會開放相應的導出功能;
2、有些數據例如分時、分筆交易數據,需要使用外部工具進行導出,這方面大多數是針對於大智慧軟件,如有需要,可在某寶上搜索。實際上某寶上很多店鋪直接販賣的數據就是由此方法獲得;
3、逐筆成交明細數據、10擋(5擋)盤口記錄數據、掛單撤單記錄數據等,這部分是最難免費獲取的數據之一,除上述外部工具外,還需要目標軟件已開通level-2權限才能獲取,也可在某寶上購買現成數據。
很多人可能不明白這部分數據的用途價值,這部分其實是抓資金行為脈絡的關鍵所在。
優點:簡單易上手
缺點:沒有定制性,而且每天的數據更新很難自動化,大多依靠手動導出,我初期曾嘗試過用pyautogui等鍵鼠操作模擬的庫,把導出的操作強行做成自動化,后因覺得太傻而放棄。
二、萬能的爬蟲
爬蟲是我的大愛,因為它是幾乎萬能的。
目前可以爬取交易數據的主流數據網站有:新浪、東方財富、百度、騰訊等。
之所以選擇國內主流網站,是因為首先它們在境內(雅虎什么的速度實在要炸了),然后它們的訪問量大、服務器夠結實,因此也不會過多的“反爬”你。
這里以騰訊為例,分享幾個實用的數據鏈接:
5分鍾
30分鍾
60分鍾
五日 只有收盤價和成交量
日數據 640為一年,如三年要640*3
周數據 128為一年,如三年要128*3
月數據 12為一年,如三年要12*3
以python為例,在知道這些鏈接以后,
1、用urllib.request.urlopen(...).read().decode()即可取得頁面信息;
2、然后用re.compile().findall()提取數據部分;
3、用pandas庫將數據整齊的碼進dataframe中,再to_csv()保存至本地。
由於是編程實現,可以寫成每日定時運行。
優點:爬蟲是近乎萬能的
缺點:開發相對繁瑣,一旦某日網站做了更新,你的爬蟲代碼就需要大改甚至作廢重來。
重寫代碼是需要時間的,因此,為了讓數據更新每日不間斷,你需要常備一個備選方案,也就是2個爬蟲,萬一某天你的try不成功,它還可以執行except完成任務,同時,你需要讓它把信息及時反饋給你,為此,你需要寫一個好的log生成方法。
三、神器Tushare
tushare是一個在國內非常火的python庫,它的強大就在於它既能全面的提供金融分析所需的各類數據,而且速度超快,也能完美結合到各種自定義的使用場景,幾乎可以說是沒有缺點。
關於tushare,最不可思議的一點就是,一個這么火這么強大的庫,竟然是以個人性質開發的,而且完全免費,而且多年如一日運行穩定。
當然,這里不說心路歷程,只聊干貨。
1、Tushare一代
http://tushare.org 點開這個貫徹了極簡主義美學的鏈接,一個精彩的世界就浮現在你眼前。
一切股票交易相關的數據應有盡有,任何數據只要一行代碼即可取得。
Tushare的另一個優勢在於,它可以無縫對接pandas庫,使用Tushare所導出的任何數據都可以pandas庫的dataframe對象形式保存,可以立刻方便的使用pandas庫進行分析和運算。這一點是絕大多數同類型庫所無法實現的。
因此,如果用於A股行情數據,Tushare是毋庸置疑的首選。
其中一些著名的function可謂火遍大街小巷,業內無人不曉,諸如:
get_h_data()
get_today_all()
以及后面退出的get_k_data()等等,
傳入股票代碼、起止日期等參數就可以一次性取得某股票詳盡的時間序列數據。(具體可點擊官網進行了解,在此不贅述。)
其實,一代Tushare的底層實現方法就是我們上文所說的爬蟲,但正如我們所提到,爬蟲是一個分析、編寫過程繁雜,且需要精力去維護的工具,在沒有收費的情況下運維如此之多的爬蟲,實屬不易。
經過了對數據質量的反復檢測和不斷推敲篩選,最終封裝成了一個個好用的api。Tushare把辛苦、繁瑣留給了自己,把簡約和高效給了大家。
這個基於爬蟲的數據服務平台,就是一代的Tushare,也是Tushare的初心。
2、Tushare二代
https://tushare.pro 與一代一脈相承的極簡畫風,帶有科技感的主頁設計,以及不變的初衷。
二代在數據的質量、穩定性等方面作了大幅提升,而它依然免費開放。
二代的Tushare不再依賴爬蟲,而是通過自建服務器、自行整理和儲存數據供大家下載使用,由創始人米哥等大牛負責運營,這種方式徹底克服了爬蟲和第三方數據源與生俱來的缺點,但所需傾注的精力和付出非常巨大,以至於我很擔心他們的身板還頂不頂得住。
可以說,當前的Tushare作為一個免費數據平台,所提供的是不遜於國內一流收費平台的服務,這里我舉幾個自己常用的作為例子。
(1)打開姿勢
新版Tushare的打開姿勢與舊版有所不同,
1、引入模塊后,在正式調用前,需要先傳入你的token(在官網登錄后點擊個人中心即可查看和復制,每個ID對應的token是唯一的),它是用戶的身份識別機制
2、生成一個pro_api()的對象,很多高級功能是通過pro.xxx()來調取的,而非像舊版直接使用ts.get_xxx()
1 import Tushare as ts
2 ts.set_token('**********************************') 3 pro = ts.pro_api() 4 5 #取000001的前復權行情 6 df = ts.pro_bar(ts_code='000001.SZ', adj='qfq', start_date='20180101', end_date='20181011') 7 8 #查詢當前所有正常上市交易的股票列表 9 data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
重要提示:
不要使用多進程!
是的,我們爬東方財富、新浪的時候,可以隨手multiprocessing.Pool(),甚至連ip代理都可以不開。(別問我是怎么知道的)
Tushare新版是通過自己的服務器提供服務的,來之不易,要有所節制的使用。
如果突破了單位時間內訪問頻率限制,服務器會拒絕你的訪問,甚至……。
(2)積分體系
之所以多了token這一步,正是因為新版Tushare引入了積分系統,積分決定着你在新版平台上的權限高低。
看到這里你以為TS走向商業化就大錯特錯了,因為積分是無法用金錢購買的。這也是我認為它非常牛逼的地方。
沒錯,既不是“花錢充點卡,氪金買優越”的庸俗,也不是“屠龍寶刀,極品一秒刷爆”的膚淺。
積分不靠買,而靠掙!
邀請、分享、撰文等多種方式都可以增加積分,如是一來,積分表達的一名用戶對社區的貢獻程度。
既是最高明的模式,也是最善意的模式!
如同以氪金為標尺可以對用戶的購買力進行階梯式分級一樣,以貢獻作為標尺所建立的積分體系,也從另一層面實現了對用戶的精准篩選和正向引導。
時至今日,Tushare依然有着極度活躍的社區、爆好的口碑和越來越強大的功能。
發展到今天這樣的強大,仍然沒有向商業化屈膝,始終保有着那份初衷,不得不說這是個奇跡。
在這個三流游戲外掛都要賣錢的世道里,Tushare就像一個俠客,有俠道、有傲骨,任世事變遷,初心猶然不改。
未來,希望Tushare越來越好。