财經資料接口包tushare的使用(一)
Tushare是一款開源免費的金融資料接口包,可以用于擷取股票的曆史資料、年度季度報表資料、實時分筆資料、曆史分筆資料,本文對tushare的用法,已經存在的一些問題做一些介紹。
一:安裝tushare
為避免由于依賴包缺失導緻安裝失敗,請先安裝anaconda,百度網盤位址:
連結:http://pan.baidu.com/s/1qYDQUGs 密碼:6wq8
安裝直接一直下一步即可
安裝完成之後,anaconda會自動配置環境變量,直接就可以用了,cmd打開指令行視窗,使用指令
pip install tushare
即可安裝tushar
二:tushare的使用
1、擷取曆史資料之 get_hist_data
參數說明:
• code:股票代碼,即6位數字代碼,或者指數代碼(sh=上證指數 sz=深圳成指 hs300=滬深300指數 sz50=上證50 zxb=中小闆 cyb=創業闆)
• start:開始日期,格式YYYY-MM-DD
• end:結束日期,格式YYYY-MM-DD
• ktype:資料類型,D=日k線 W=周 M=月 5=5分鐘 15=15分鐘 30=30分鐘 60=60分鐘,預設為D
• retry_count:當網絡異常後重試次數,預設為3
• pause:重試時停頓秒數,預設為0
傳回值說明:
• date:日期
• open:開盤價
• high:最高價
• close:收盤價
• low:最低價
• volume:成交量
• price_change:價格變動
• p_change:漲跌幅
• ma5:5日均價
• ma10:10日均價
• ma20:20日均價
• v_ma5:5日均量
• v_ma10:10日均量
• v_ma20:20日均量
• turnover:換手率[注:指數無此項]
調用方法:
例一:
import tushare as ts
data=ts.get_hist_data(‘300032’)
print(data)
結果展示:
open high close low volume price_change p_change \
date
2018-12-04 16.80 17.15 17.09 16.70 52382.91 0.25 1.49
2018-12-03 17.00 17.22 16.84 16.62 53706.54 0.58 3.57
2018-11-30 16.30 16.39 16.26 15.72 39473.33 0.04 0.25
2018-11-29 17.05 17.09 16.22 16.20 43111.44 -0.68 -4.02
2018-11-28 16.70 16.94 16.90 16.20 45034.68 0.23 1.38
2018-11-27 16.77 16.88 16.67 16.52 34464.46 0.15 0.91
2018-11-26 16.75 16.95 16.52 16.11 34463.00 -0.18 -1.08
2018-11-23 18.01 18.02 16.70 16.60 77016.79 -1.20 -6.70
2018-11-22 18.25 18.27 17.90 17.86 47241.00 -0.15 -0.83
2018-11-21 18.00 18.17 18.05 17.77 68355.30 -0.33 -1.79
ma5 ma10 ma20 v_ma5 v_ma10 v_ma20
date
2018-12-04 16.662 16.915 17.569 46741.78 49524.95 74213.35
2018-12-03 16.578 17.044 17.603 43158.09 55527.30 76015.06
2018-11-30 16.514 17.249 17.666 39309.38 59021.37 78567.25
2018-11-29 16.602 17.503 17.748 46818.07 66538.81 82437.55
2018-11-28 16.938 17.792 17.800 47643.99 78491.83 84790.15
2018-11-27 17.168 17.943 17.812 52308.11 87770.77 86009.69
2018-11-26 17.510 18.066 17.819 67896.51 93372.31 87098.74
2018-11-23 17.984 18.203 17.831 78733.36 97700.81 87289.41
2018-11-22 18.404 18.273 17.846 86259.55 94334.13 85500.81
2018-11-21 18.646 18.239 17.799 109339.68 96096.54 85845.67
2018-11-20 18.718 18.223 17.773 123233.42 98901.76 84578.53
2018-11-19 18.622 18.162 17.736 118848.10 96502.82 82182.74
請讀者注意,文檔中的注釋并不準确,使用該接口并不能擷取股票自上市以來的所有日線資料,例如這裡舉的例子,金龍機電這隻股票(2009年12月25日上市)。
請再看例子:
例二:
import tushare as ts
data=ts.get_hist_data('603712',start='2018-11-28',end='2018-12-01')
print(data)
傳回結果是:
open high close low volume price_change p_change \
date
2018-11-30 16.30 16.39 16.26 15.72 39473.33 0.04 0.25
2018-11-29 17.05 17.09 16.22 16.20 43111.44 -0.68 -4.02
2018-11-28 16.70 16.94 16.90 16.20 45034.68 0.23 1.38
ma5 ma10 ma20 v_ma5 v_ma10 v_ma20
date
2018-11-30 16.514 17.249 17.666 39309.38 59021.37 78567.25
2018-11-29 16.602 17.503 17.748 46818.07 66538.81 82437.55
2018-11-28 16.938 17.792 17.800 47643.99 78491.83 84790.15
2、擷取曆史資料之 get_h_data
作者提供另外一個函數get_h_data用于擷取股票曆史資料,該函數的調用網頁文檔沒有給出例子,在這裡依然用上面的例子來作測試:
例三:
import tushare as ts
data=ts.get_h_data(‘300032’)
print(data)
傳回結果:
[Getting data:] open high close low volume amount
date
2018-11-30 16.30 16.39 16.26 15.72 3947333.0 63721274.0
2018-11-29 17.05 17.09 16.22 16.20 4311144.0 72000288.0
2018-11-28 16.70 16.94 16.90 16.20 4503468.0 75076700.0
在不指定開始時間和結束時間時,該函數預設傳回最近一年的日線資料,傳回的資料與get_hist_data不同的是,該函數隻傳回開盤價(open)、最高價(high)、收盤價(close)、最低價(low)、成交量(volume)、成交金額(amount)六列
同樣的,測試一下該接口能不能擷取更早一些的資料:
import tushare as ts
data=ts.get_h_data('603712',start='2018-11-28',end='2018-12-01')
print(data)
[Getting data:] open high close low volume amount
date
2018-11-30 16.30 16.39 16.26 15.72 3947333.0 63721274.0
2018-11-29 17.05 17.09 16.22 16.20 4311144.0 72000288.0
2018-11-28 16.70 16.94 16.90 16.20 4503468.0 75076700.0
可以看到,相比于get_hist_data,該函數能夠傳回較早一些的資料,但沒有換手率,均線資料這些名額,當然,我們可以擷取到資料之後,自己寫個腳本計算均線這些資訊,但是如果要自己計算換手率,就必須知道股票的市值是多少,這兩個函數都沒有傳回關于股票市值的資訊,是以如果要自己計算換手率,就得從其他地方擷取股票每個交易日的市值資訊。
3、擷取曆史資料之:get_k_data
作者提供了第三個擷取K線資料的函數,get_k_data,參數與get_hist_data相同。
例四:
import tushare as ts
data=ts.get_k_data('603712')
print(data)
date open close high low volume code
0 2018-02-26 5.455 6.543 6.543 5.455 666.0 603712
1 2018-02-27 7.203 7.203 7.203 7.203 372.0 603712
2 2018-02-28 7.922 7.922 7.922 7.922 425.0 603712
3 2018-03-01 8.711 8.711 8.711 8.711 882.0 603712
4 2018-03-02 9.580 9.580 9.580 9.580 3754.0 603712
與前兩個函數相比,這個函數擷取資料的速度很明顯要快很多,而且可以傳回每一隻股票從上市開始到目前交易日的所有日線資料,這個有點是前兩個函數都不具備的,讀者可以自己驗證一下,get_h_data可以傳回比get_hist_data更早一些的資料,但是對于有些股票依然不能擷取很早的資料,更重要的是,如果批量3000多隻股票的資料,前兩個都不如get_k_data穩定,我一開始搜集資料的時候,為了擷取更全面的資料,用的是get_hist_data,但是批量擷取,反反複複跑腳本,沒有一次是能夠将資料完整擷取完的,每一次都是中途就挂了,讀者可以自己測試一下,間隔時間長一些應該沒問題,不過我後來已經知道其他的解決辦法,既能夠擷取全面的資料,同時也不必擔心速度的問題,怎麼擷取一樣會在微信公衆号【資料之佳】介紹,這裡先介紹tushare
4、擷取實時行情資料 get_today_all()
• code:代碼
• name:名稱
• changepercent:漲跌幅
• trade:現價
• open:開盤價
• high:最高價
• low:最低價
• settlement:昨日收盤價
• volume:成交量
• turnoverratio:換手率
• amount:成交量
• per:市盈率
• pb:市淨率
• mktcap:總市值
• nmc:流通市值
該函數沒有參數,直接調用即可
測試:
例五:
import tushare as ts
data=ts.get_today_all()
print(data)
傳回值:
[Getting data:]############################################################
code name changepercent trade open high low settlement \
0 603999 讀者傳媒 9.945 5.97 5.41 5.97 5.35 5.43
1 603998 方盛制藥 -2.293 5.54 5.52 5.60 5.47 5.67
2 603997 繼峰股份 -2.036 8.18 8.29 8.29 8.15 8.35
...
volume turnoverratio amount per pb \
0 17473309.0 7.58390 100935110.0 45.573 2.025
1 5109486.0 1.20168 28242031.0 39.571 2.280
2 1192200.0 0.18924 9790259.0 17.783 2.878
...
mktcap nmc
0 3.438720e+05 1.375488e+05
1 2.374237e+05 2.355590e+05
2 5.232329e+05 5.153400e+05
...
[3634 rows x 15 columns]
限于篇幅,這裡隻貼出前三行資料,get_today_all()擷取了所有股票的目前行情資料,但是擷取一次資料的耗時比較長,讀者可以自己在實時行情和盤後自己測試一下,看看會不會挂,整體延時有多久等等
5、曆史分筆資料之:get_tick_data
code:股票代碼,即6位數字代碼
date:日期,格式YYYY-MM-DD
retry_count : int, 預設3,如遇網絡等問題重複執行的次數
pause : int, 預設 0,重複請求資料過程中暫停的秒數,防止請求間隔時間太短出現的問題
該函數傳回指定日期的曆史分筆資料,但由于曆史分筆資料很耗空間,是以一般伺服器都不會存儲很長時間的曆史分筆資料,該接口也一樣,并不能擷取從上市以來的所有日期的分筆資料。
例六:
import tushare as ts
data=ts.get_tick_data(‘300032’,’2017-11-01’)
print(data)
傳回結果:
time price change volume amount type
0 15:00:03 14.05 -0.01 371 521255 賣盤
1 14:57:03 14.06 0.01 1 1406 買盤
2 14:56:57 14.05 – 92 129260 賣盤
3 14:56:54 14.05 – 20 28100 賣盤
……
1526 09:30:36 14.10 -0.02 159 224190 中性盤
1527 09:30:06 14.12 14.12 7 9884 買盤
[1528 rows x 6 columns]
6、實時分筆資料之 get_realtime_quotes
• symbols:6位數字股票代碼,或者指數代碼(sh=上證指數 sz=深圳成指 hs300=滬深300指數 sz50=上證50 zxb=中小闆 cyb=創業闆) 可輸入的類型:str、list、set或者pandas的Series對象
例八:
import tushare as ts
data=ts.get_realtime_quotes('603712')
print(data)
name open pre_close price high low bid ask volume \
0 七一二 16.700 17.090 16.800 16.950 16.600 16.760 16.800 2561622
amount ... a2_p a3_v a3_p a4_v a4_p a5_v a5_p \
0 42952410.000 ... 16.810 88 16.820 63 16.830 10 16.840
date time code
0 2018-12-05 13:48:15 603712
[1 rows x 33 columns]
該接口傳回的資料量較小,還是比較快的,讀者可以自己在實時行情中和盤後自己測試一下
7、當月曆史分筆之 get_today_ticks
例九
import tushare as ts
data=ts.get_today_ticks('603712')
print(data)
傳回值
[Getting data:]##########################
time price pchange change volume amount type
0 13:49:35 16.77 -1.87 0.00 7 11739 買盤
1 13:49:32 16.77 -1.87 -0.01 30 50310 賣盤
2 13:49:11 16.78 -1.81 0.00 7 11746 買盤
3 13:49:08 16.78 -1.81 0.00 2 3356 買盤
4 13:49:02 16.78 -1.81 0.00 5 8390 買盤
5 13:48:47 16.78 -1.81 -0.02 10 16780 賣盤
該接口傳回目前日期,目前時刻的所有粉筆成交資料,相比于上一個接口,速度慢很多,也請讀者自己測試
7、大單交易資料之 get_sina_dd
擷取大單交易資料,預設為大于等于400手,資料來源于新浪财經。
• code:股票代碼,即6位數字代碼
• date:日期,格式YYYY-MM-DD
• vol:手數,預設為400手,輸入數值型參數
• retry_count : int, 預設3,如遇網絡等問題重複執行的次數
• pause : int, 預設 0,重複請求資料過程中暫停的秒數,防止請求間隔時間太短出現的問題
• name:名稱
• time:時間
• price:目前價格
• volume:成交手
• preprice :上一筆價格
• type:買賣類型【買盤、賣盤、中性盤】
例10:
data=ts.get_sina_dd(‘300032’,’2017-11-1’)
傳回值
code name time price volume preprice type
0 300032 金龍機電 14:45:54 13.97 91900 14.00 賣盤
1 300032 金龍機電 10:51:36 14.10 57488 14.11 賣盤
2 300032 金龍機電 10:19:42 14.05 50000 14.06 賣盤
3 300032 金龍機電 09:38:36 14.03 42800 14.02 買盤
借助于tushare,其實我們已經可以做一些量化分析和政策了,但是tushare在實際使用中,有一些不經如人意的地方,我在使用中遇到的問題,同時也自己優化了一一些地方,實在不滿意的資料,從其他地方用自己想辦法擷取,對于tushare已經可以做得很好的就不洗自己再去做了,想要了解怎樣擷取更全面的資料,學習如何将機器學習算法和資料分析方法運用到自己的量化模型當中,請關注微信公衆号【資料之佳】,我們将不定期更新文章
---------------------