1. 程式人生 > >金融量化分析-python量化分析系列之---使用python獲取股票歷史資料和實時分筆資料

金融量化分析-python量化分析系列之---使用python獲取股票歷史資料和實時分筆資料

財經資料介面包tushare的使用(一)

Tushare是一款開源免費的金融資料介面包,可以用於獲取股票的歷史資料、年度季度報表資料、實時分筆資料、歷史分筆資料,本文對tushare的用法,已經存在的一些問題做一些介紹。
一:安裝tushare

為避免由於依賴包缺失導致安裝失敗,請先安裝anaconda,百度網盤地址:
連結:http://pan.baidu.com/s/1qYDQUGs 密碼:6wq8
安裝直接一直下一步即可
安裝完成之後,anaconda會自動配置環境變數,直接就可以用了,cmd開啟命令列視窗,使用命令
pip install tushare
即可安裝tushare
二: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
2017-11-22 13.89 13.96 13.95 13.77 19670.56 -0.02 -0.14
2017-11-21 13.97 13.98 13.97 13.77 23196.87 -0.01 -0.07
2017-11-20 13.90 14.02 13.98 13.68 23114.10 0.01 0.07
2017-11-17 13.87 13.97 13.97 13.67 39828.91 0.00 0.00
2017-11-16 13.98 14.09 13.97 13.86 18029.02 -0.04 -0.29
2017-11-15 14.37 14.37 14.01 13.88 31731.32 -0.37 -2.57
2017-11-14 14.00 14.43 14.38 14.00 49168.37 0.32 2.28

ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover
1
date
2017-11-22 13.968 14.046 14.044 24767.89 26789.33 28602.29 0.26
2017-11-21 13.980 14.048 14.054 27180.04 27617.60 28540.55 0.31
2017-11-20 14.062 14.043 14.064 32374.34 28650.48 28455.20 0.31
2017-11-17 14.078 14.038 14.083 31644.05 29352.32 28141.07 0.53
2017-11-16 14.114 14.039 14.099 28582.57 29823.22 27169.73 0.24
2017-11-15 14.124 14.042 14.118 28810.76 30467.91 27007.47 0.42
2017-11-14 14.116 14.046 14.132 28055.16 30117.38 26536.15 0.66

請讀者注意,文件中的註釋並不準確,使用該介面並不能獲取股票自上市以來的所有日線資料,例如這裡舉的例子,金龍機電這隻股票(2009年12月25日上市)。
請再看例子:
例二:
import tushare as ts
data=ts.get_hist_data(‘300032’,start=’2011-01-01’,end=’2011-05-01’)
print(data)

返回結果是:
Empty DataFrame
Columns: [open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover]
Index: []
可以看到,這幾行程式碼返回的資料為一個空的dataframe,這是網頁文章中沒有詳細說明的問題在這裡指出。如何解決這個問題,請關注微信公眾號【資料之佳】,注意是才子佳人的佳,該公眾號分享量化分析模型,講解一些比較好的模型,工具等等,tushare的使用公眾號中有更詳細的介紹。公眾號也會講解如何用其他方式獲取更穩定可靠的資料

2、獲取歷史資料之get_h_data
作者提供另外一個函式get_h_data用於獲取股票歷史資料,該函式的呼叫網頁文件沒有給出例子,在這裡依然用上面的例子來作測試:
例三:
import tushare as ts
data=ts.get_h_data(‘300032’)
print(data)

返回結果:
open high close low volume amount
date
2017-11-22 13.89 13.96 13.95 13.77 1967056.0 27282987.0
2017-11-21 13.97 13.98 13.97 13.77 2319687.0 32194061.0
2017-11-20 13.90 14.02 13.98 13.68 2311410.0 32033838.0
2017-11-17 13.87 13.97 13.97 13.67 3982891.0 54911258.0
……
2016-11-24 17.31 17.42 17.17 17.15 3799600.0 66045345.0
2016-11-23 17.37 17.51 17.27 17.24 5008208.0 87687070.0
2016-11-22 17.37 17.41 17.40 17.20 4536796.0 79050365.0
[246 rows x 6 columns]

在不指定開始時間和結束時間時,該函式預設返回最近一年的日線資料,返回的資料與get_hist_data不同的是,該函式只返回開盤價(open)、最高價(high)、收盤價(close)、最低價(low)、成交量(volume)、成交金額(amount)六列
同樣的,測試一下該介面能不能獲取更早一些的資料:

import tushare as ts
data=ts.get_h_data(‘300032’,start=’2011-01-01’,end=’2011-05-01’)
print(data)

返回結果:
[Getting data:]# open high close low volume amount
date
2011-04-29 14.18 14.41 14.41 13.96 444287.0 10930304.0
2011-04-28 14.60 14.66 14.10 13.86 2550197.0 63069508.0
2011-04-27 14.50 14.67 14.44 14.26 457503.0 11427143.0
2011-04-26 14.82 14.82 14.41 14.31 628685.0 15732398. ……
2011-01-04 13.14 13.23 13.21 12.84 1099825.0 24814884.0
[77 rows x 6 columns]

可以看到,相比於get_hist_data,該函式能夠返回較早一些的資料,但沒有換手率,均線資料這些指標,當然,我們可以獲取到資料之後,自己寫個指令碼計算均線這些資訊,但是如果要自己計算換手率,就必須知道股票的市值是多少,這兩個函式都沒有返回關於股票市值的資訊,因此如果要自己計算換手率,就得從其他地方獲取股票每個交易日的市值資訊。

3、獲取歷史資料之:get_k_data
作者提供了第三個獲取K線資料的函式,get_k_data,引數與get_hist_data相同。

例四:
import tushare as ts
data=ts.get_k_data(‘300032’)
print(data)
返回結果:
date open close high low volume code
0 2015-02-02 12.914 13.742 14.086 12.914 56295.0 300032
1 2015-02-03 13.742 14.377 14.500 13.742 63588.0 300032
2 2015-02-04 14.412 14.510 14.761 13.791 35558.0 300032
3 2015-02-05 14.520 14.471 14.751 14.224 34088.0 300032
4 2015-02-06 14.648 14.343 14.648 13.845 35039.0 300032
5 2015-02-09 14.372 14.062 14.549 13.904 24195.0 300032

與前兩個函式相比,這個函式獲取資料的速度很明顯要快很多,而且可以返回每一隻股票從上市開始到當前交易日的所有日線資料,這個有點是前兩個函式都不具備的,讀者可以自己驗證一下,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 讀者傳媒 -0.622 7.99 8.03 8.11 7.92 8.04
1 603998 方盛製藥 -2.535 12.69 13.00 13.13 12.58 13.02
2 603997 繼峰股份 -1.529 11.59 11.77 11.86 11.50 11.77
……
volume turnoverratio amount per pb mktcap \
0 2208414.0 0.95851 17697355.0 27.552 2.759 4.602240e+05
1 2733900.0 1.01565 34976989.0 79.313 5.471 5.468584e+05
2 1848500.0 1.08099 21572699.0 19.644 4.428 7.301700e+05
nmc
0 1.840896e+05
1 3.415859e+05
2 1.981890e+05
…….
[3446 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(‘300032’)
print(data)
name open pre_close price high low bid ask volume \
0 金龍機電 13.890 13.970 13.950 13.960 13.770 13.940 13.950 1967056
amount … a2_p a3_v a3_p a4_v a4_p a5_v a5_p \
0 27282987.240 … 13.960 741 13.970 547 13.980 332 13.990
date time code
0 2017-11-22 16:28:03 300032
[1 rows x 33 columns]

該介面返回的資料量較小,還是比較快的,讀者可以自己在實時行情中和盤後自己測試一下

6、當日歷史分筆之get_today_ticks
引數說明:
code:股票程式碼,即6位數字程式碼
retry_count : int, 預設3,如遇網路等問題重複執行的次數
pause : int, 預設 0,重複請求資料過程中暫停的秒數,防止請求間隔時間太短出現的問題

例九
import tushare as ts
data=ts.get_today_ticks(‘300032’)
print(data)

返回值
[Getting data:]################# time price pchange change volume amount type
0 15:00:03 14.36 +2.79 0.00 938 1346968 賣盤
1 14:57:00 14.36 +2.79 0.01 2 2872 賣盤
2 14:56:57 14.35 +2.72 -0.01 27 39463 賣盤
……
984 09:25:03 13.89 -0.57 0.00 27 37503 0
[985 rows x 7 columns]

該介面返回當前日期,當前時刻的所有粉筆成交資料,相比於上一個介面,速度慢很多,也請讀者自己測試

7、大單交易資料之get_sina_dd
獲取大單交易資料,預設為大於等於400手,資料來源於新浪財經。
引數說明:
• code:股票程式碼,即6位數字程式碼
• date:日期,格式YYYY-MM-DD
• vol:手數,預設為400手,輸入數值型引數
• retry_count : int, 預設3,如遇網路等問題重複執行的次數
• pause : int, 預設 0,重複請求資料過程中暫停的秒數,防止請求間隔時間太短出現的問題
返回值說明:
• code:程式碼
• name:名稱
• time:時間
• price:當前價格
• volume:成交手
• preprice :上一筆價格
• type:買賣型別【買盤、賣盤、中性盤】
例10:
import tushare as ts
data=ts.get_sina_dd(‘300032’,’2017-11-1’)
print(data)

返回值
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已經可以做得很好的就不洗自己再去做了,想要了解怎樣獲取更全面的資料,學習如何將機器學習演算法和資料分析方法運用到自己的量化模型當中,請關注微信公眾號【資料之佳】,我們將不定期更新文章
---------------------
作者:wolf1132
來源:CSDN
原文:https://blog.csdn.net/wolf1132/article/details/78606945
版權宣告:本文為博主原創文章,轉載請附上博文連結!