TuShare獲取K線數據
Tushare是一個免費、開源的python財經數據接口包。主要實現對股票等金融數據從數據采集、清洗加工 到 數據存儲的過程,能夠為金融分析人員提供快速、整潔、和多樣的便於分析的數據,為他們在數據獲取方面極大地減輕工作量,使他們更加專註於策略和模型的研究與實現上。考慮到Python pandas包在金融量化分析中體現出的優勢,Tushare返回的絕大部分的數據格式都是pandas DataFrame類型,非常便於用pandas/NumPy/Matplotlib進行數據分析和可視化。當然,如果您習慣了用Excel或者關系型數據庫做分析,您也可以通過Tushare的數據存儲功能,將數據全部保存到本地後進行分析。應一些用戶的請求,從0.2.5版本開始,Tushare同時兼容Python 2.x和Python 3.x,對部分代碼進行了重構,並優化了一些算法,確保數據獲取的高效和穩定。
Tushare從發布到現在,已經幫助很多用戶在數據方面降低了工作壓力,同時也得到很多用戶的反饋,Tushare將一如既往的用免費和開源的形式分享出來,希望對有需求的人帶來一些幫助。如果您覺得Tushare好用並有所收獲,請通過微博、微信或者網站博客的方式分享出去,讓更多的人了解和使用它,使它能在大家的使用過程中逐步得到改進和提升。Tushare還在不斷的完善和優化,後期將逐步增加港股、期貨、外匯和基金方面的數據,所以,您的支持和肯定才是Tushare堅持下去的動力
獲取個股歷史交易數據(包括均線數據),可以通過參數設置獲取日k線、周k線、月k線,以及5分鐘、15分鐘、30分鐘和60分鐘k線數據。本接口只能獲取近3年的日線數據,適合搭配均線數據進行選股和分析,如果需要全部歷史數據,請調用下一個接口get_h_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
ts.get_hist_data(‘600848‘) #一次性獲取全部日k線數據
結果顯示:
open high close low volume p_change ma5 date 2012-01-11 6.880 7.380 7.060 6.880 14129.96 2.62 7.060 2012-01-12 7.050 7.100 6.980 6.900 7895.19 -1.13 7.020 2012-01-13 6.950 7.000 6.700 6.690 6611.87 -4.01 6.913 2012-01-16 6.680 6.750 6.510 6.480 2941.63 -2.84 6.813 2012-01-17 6.660 6.880 6.860 6.460 8642.57 5.38 6.822 2012-01-18 7.000 7.300 6.890 6.880 13075.40 0.44 6.788 2012-01-19 6.690 6.950 6.890 6.680 6117.32 0.00 6.770 2012-01-20 6.870 7.080 7.010 6.870 6813.09 1.74 6.832 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover date 2012-01-11 7.060 7.060 14129.96 14129.96 14129.96 0.48 2012-01-12 7.020 7.020 11012.58 11012.58 11012.58 0.27 2012-01-13 6.913 6.913 9545.67 9545.67 9545.67 0.23 2012-01-16 6.813 6.813 7894.66 7894.66 7894.66 0.10 2012-01-17 6.822 6.822 8044.24 8044.24 8044.24 0.30 2012-01-18 6.833 6.833 7833.33 8882.77 8882.77 0.45 2012-01-19 6.841 6.841 7477.76 8487.71 8487.71 0.21 2012-01-20 6.863 6.863 7518.00 8278.38 8278.38 0.23
設定歷史數據的時間:
ts.get_hist_data(‘600848‘,start=‘2015-01-05‘,end=‘2015-01-09‘) open high close low volume p_change ma5 ma10 date 2015-01-05 11.160 11.390 11.260 10.890 46383.57 1.26 11.156 11.212 2015-01-06 11.130 11.660 11.610 11.030 59199.93 3.11 11.182 11.155 2015-01-07 11.580 11.990 11.920 11.480 86681.38 2.67 11.366 11.251 2015-01-08 11.700 11.920 11.670 11.640 56845.71 -2.10 11.516 11.349 2015-01-09 11.680 11.710 11.230 11.190 44851.56 -3.77 11.538 11.363 ma20 v_ma5 v_ma10 v_ma20 turnover date 2015-01-05 11.198 58648.75 68429.87 97141.81 1.59 2015-01-06 11.382 54854.38 63401.05 98686.98 2.03 2015-01-07 11.543 55049.74 61628.07 103010.58 2.97 2015-01-08 11.647 57268.99 61376.00 105823.50 1.95 2015-01-09 11.682 58792.43 60665.93 107924.27 1.54
其他:
ts.get_hist_data(‘600848‘, ktype=‘W‘) #獲取周k線數據 ts.get_hist_data(‘600848‘, ktype=‘M‘) #獲取月k線數據 ts.get_hist_data(‘600848‘, ktype=‘5‘) #獲取5分鐘k線數據 ts.get_hist_data(‘600848‘, ktype=‘15‘) #獲取15分鐘k線數據 ts.get_hist_data(‘600848‘, ktype=‘30‘) #獲取30分鐘k線數據 ts.get_hist_data(‘600848‘, ktype=‘60‘) #獲取60分鐘k線數據 ts.get_hist_data(‘sh‘)#獲取上證指數k線數據,其它參數與個股一致,下同 ts.get_hist_data(‘sz‘)#獲取深圳成指k線數據 ts.get_hist_data(‘hs300‘)#獲取滬深300指數k線數據 ts.get_hist_data(‘sz50‘)#獲取上證50指數k線數據 ts.get_hist_data(‘zxb‘)#獲取中小板指數k線數據 ts.get_hist_data(‘cyb‘)#獲取創業板指數k線數據
復權數據
獲取歷史復權數據,分為前復權和後復權數據,接口提供股票上市以來所有歷史數據,默認為前復權。如果不設定開始和結束日期,則返回近一年的復權數據,從性能上考慮,推薦設定開始日期和結束日期,而且最好不要超過三年以上,獲取全部歷史數據,請分年段分步獲取,取到數據後,請及時在本地存儲。獲取個股首個上市日期,請參考以下方法:
df = ts.get_stock_basics()
date = df.ix[‘600848‘][‘timeToMarket‘] #上市日期YYYYMMDD
本接口還提供大盤指數的全部歷史數據,調用時,請務必設定index參數為True,由於大盤指數不存在復權的問題,故可以忽略autype參數。
ts.get_h_data(‘002337‘) #前復權
ts.get_h_data(‘002337‘, autype=‘hfq‘) #後復權
ts.get_h_data(‘002337‘, autype=None) #不復權
ts.get_h_data(‘002337‘, start=‘2015-01-01‘, end=‘2015-03-16‘) #兩個日期之間的前復權數據
ts.get_h_data(‘399106‘, index=True) #深圳綜合指數
參數說明:
- code:string,股票代碼 e.g. 600848
- start:string,開始日期 format:YYYY-MM-DD 為空時取當前日期
- end:string,結束日期 format:YYYY-MM-DD 為空時取去年今日
- autype:string,復權類型,qfq-前復權 hfq-後復權 None-不復權,默認為qfq
- index:Boolean,是否是大盤指數,默認為False
- retry_count : int, 默認3,如遇網絡等問題重復執行的次數
- pause : int, 默認 0,重復請求數據過程中暫停的秒數,防止請求間隔時間太短出現的問題
返回值說明:
- date : 交易日期 (index)
- open : 開盤價
- high : 最高價
- close : 收盤價
- low : 最低價
- volume : 成交量
- amount : 成交金額
結果:
open high close low volume amount date 2015-03-16 13.27 13.45 13.39 13.00 81212976 1073862784 2015-03-13 13.04 13.38 13.37 13.00 40548836 532739744 2015-03-12 13.29 13.95 13.28 12.96 71505720 962979904 2015-03-11 13.35 13.48 13.15 13.00 59110248 780300736 2015-03-10 13.16 13.67 13.59 12.72 105753088 1393819776 2015-03-09 13.77 14.73 14.13 13.70 139091552 1994454656 2015-03-06 12.17 13.39 13.39 12.17 89486704 1167752960 2015-03-05 12.79 12.80 12.17 12.08 26040832 966927360 2015-03-04 13.96 13.96 13.30 12.58 26636174 1060270720 2015-03-03 12.17 13.10 13.10 12.05 19290366 733336768
實時行情
一次性獲取當前交易所有股票的行情數據(如果是節假日,即為上一交易日,結果顯示速度取決於網速)
import tushare as ts
ts.get_today_all()
返回值說明:
- code:代碼
- name:名稱
- changepercent:漲跌幅
- trade:現價
- open:開盤價
- high:最高價
- low:最低價
- settlement:昨日收盤價
- volume:成交量
- turnoverratio:換手率
- amount:成交量
- per:市盈率
- pb:市凈率
- mktcap:總市值
- nmc:流通市值
結果顯示:
code name changepercent trade open high low settlement 0 002738 中礦資源 10.023 19.32 19.32 19.32 19.32 17.56 1 300410 正業科技 10.022 25.03 25.03 25.03 25.03 22.75 2 002736 國信證券 10.013 16.37 16.37 16.37 16.37 14.88 3 300412 迦南科技 10.010 31.54 31.54 31.54 31.54 28.67 4 300411 金盾股份 10.007 29.68 29.68 29.68 29.68 26.98 5 603636 南威軟件 10.006 38.15 38.15 38.15 38.15 34.68 6 002664 信質電機 10.004 30.68 29.00 30.68 28.30 27.89 7 300367 東方網力 10.004 86.76 78.00 86.76 77.87 78.87 8 601299 中國北車 10.000 11.44 11.44 11.44 11.29 10.40 9 601880 大連港 10.000 5.72 5.34 5.72 5.22 5.20 volume turnoverratio 0 375100 1.25033 1 85800 0.57200 2 1058925 0.08824 3 69400 0.51791 4 252220 1.26110 5 1374630 5.49852 6 6448748 9.32700 7 2025030 6.88669 8 433453523 4.28056 9 323469835 9.61735
歷史分筆
獲取個股以往交易歷史的分筆數據明細,通過分析分筆數據,可以大致判斷資金的進出情況。在使用過程中,對於獲取股票某一階段的歷史分筆數據,需要通過參入交易日參數並append到一個DataFrame或者直接append到本地同一個文件裏。歷史分筆接口只能獲取當前交易日之前的數據,當日分筆歷史數據請調用get_today_ticks()接口或者在當日18點後通過本接口獲取。
參數說明:
- code:股票代碼,即6位數字代碼
- date:日期,格式YYYY-MM-DD
- retry_count : int, 默認3,如遇網絡等問題重復執行的次數
- pause : int, 默認 0,重復請求數據過程中暫停的秒數,防止請求間隔時間太短出現的問題
調用方法:
import tushare as ts
df = ts.get_tick_data(‘600848‘,date=‘2014-01-09‘)
df.head(10)
返回值說明:
- time:時間
- price:成交價格
- change:價格變動
- volume:成交手
- amount:成交金額(元)
- type:買賣類型【買盤、賣盤、中性盤】
結果顯示:
time price change volume amount type 0 15:00:00 6.05 -- 8 4840 賣盤 1 14:59:55 6.05 -- 50 30250 賣盤 2 14:59:35 6.05 -- 20 12100 賣盤 3 14:59:30 6.05 -0.01 165 99825 賣盤 4 14:59:20 6.06 0.01 4 2424 買盤 5 14:59:05 6.05 -0.01 2 1210 賣盤 6 14:58:55 6.06 -- 4 2424 買盤 7 14:58:45 6.06 -- 2 1212 買盤 8 14:58:35 6.06 0.01 2 1212 買盤 9 14:58:25 6.05 -0.01 20 12100 賣盤
實時分筆
獲取實時分筆數據,可以實時取得股票當前報價和成交信息,其中一種場景是,寫一個python定時程序來調用本接口(可兩三秒執行一次,性能與行情軟件基本一致),然後通過DataFrame的矩陣計算實現交易監控,可實時監測交易量和價格的變化。
參數說明:
- symbols:6位數字股票代碼,或者指數代碼(sh=上證指數 sz=深圳成指 hs300=滬深300指數 sz50=上證50 zxb=中小板 cyb=創業板) 可輸入的類型:str、list、set或者pandas的Series對象
調用方法:
import tushare as ts
df = ts.get_realtime_quotes(‘000581‘) #Single stock symbol
df[[‘code‘,‘name‘,‘price‘,‘bid‘,‘ask‘,‘volume‘,‘amount‘,‘time‘]]
結果顯示:
code name price bid ask volume amount time 0 000581 威孚高科 31.15 31.14 31.15 8183020 253494991.16 11:30:36
返回值說明:
0:name,股票名字 1:open,今日開盤價 2:pre_close,昨日收盤價 3:price,當前價格 4:high,今日最高價 5:low,今日最低價 6:bid,競買價,即“買一”報價 7:ask,競賣價,即“賣一”報價 8:volume,成交量 maybe you need do volume/100 9:amount,成交金額(元 CNY) 10:b1_v,委買一(筆數 bid volume) 11:b1_p,委買一(價格 bid price) 12:b2_v,“買二” 13:b2_p,“買二” 14:b3_v,“買三” 15:b3_p,“買三” 16:b4_v,“買四” 17:b4_p,“買四” 18:b5_v,“買五” 19:b5_p,“買五” 20:a1_v,委賣一(筆數 ask volume) 21:a1_p,委賣一(價格 ask price) ... 30:date,日期; 31:time,時間;
請求多個股票方法(一次最好不要超過30個):
#symbols from a list
ts.get_realtime_quotes([‘600848‘,‘000980‘,‘000981‘])
#from a Series
ts.get_realtime_quotes(df[‘code‘].tail(10)) #一次獲取10個股票的實時分筆數據
獲取實時指數:
#上證指數
ts.get_realtime_quotes(‘sh‘)
#上證指數 深圳成指 滬深300指數 上證50 中小板 創業板
ts.get_realtime_quotes([‘sh‘,‘sz‘,‘hs300‘,‘sz50‘,‘zxb‘,‘cyb‘])
#或者混搭
ts.get_realtime_quotes([‘sh‘,‘600848‘])
當日歷史分筆
獲取當前交易日(交易進行中使用)已經產生的分筆明細數據。
參數說明:
- code:股票代碼,即6位數字代碼
- retry_count : int, 默認3,如遇網絡等問題重復執行的次數
- pause : int, 默認 0,重復請求數據過程中暫停的秒數,防止請求間隔時間太短出現的問題
調用方法:
import tushare as ts
df = ts.get_today_ticks(‘601333‘)
df.head(10)
返回值說明:
- time:時間
- price:當前價格
- pchange:漲跌幅
- change:價格變動
- volume:成交手
- amount:成交金額(元)
- type:買賣類型【買盤、賣盤、中性盤】
結果顯示:
time price pchange change volume amount type 0 11:30:07 5.77 -0.52 0.00 634 366372 買盤 1 11:29:57 5.77 -0.52 0.00 216 124632 買盤 2 11:29:52 5.77 -0.52 0.00 306 176562 買盤 3 11:29:42 5.77 -0.52 0.01 159 91766 買盤 4 11:29:37 5.76 -0.69 0.00 546 314496 賣盤 5 11:29:32 5.76 -0.69 -0.01 954 549504 賣盤 6 11:29:22 5.77 -0.52 0.00 374 215798 買盤 7 11:29:17 5.77 -0.52 0.00 762 439674 買盤 8 11:29:12 5.77 -0.52 0.00 164 95182 買盤 9 11:29:07 5.77 -0.52 0.00 303 174854 買盤
大盤指數行情列表
獲取大盤指數實時行情列表,以表格的形式展示大盤指數實時行情。
調用方法:
import tushare as ts
df = ts.get_index()
返回值說明:
- code:指數代碼
- name:指數名稱
- change:漲跌幅
- open:開盤點位
- preclose:昨日收盤點位
- close:收盤點位
- high:最高點位
- low:最低點位
- volume:成交量(手)
- amount:成交金額(億元)
結果顯示:
code name change preclose close high low 0 000001 上證指數 -1.13 4527.396 4476.215 4572.391 4432.904 1 000002 A股指數 -1.13 4744.093 4690.628 4791.534 4645.190 2 000003 B股指數 -2.15 403.694 395.018 405.795 392.173 3 000008 綜合指數 0.79 3724.496 3753.906 3848.575 3695.817 4 000009 上證380 -2.79 7689.128 7474.305 7695.329 7398.911 5 000010 上證180 -1.13 10741.180 10619.610 10863.080 10529.900 6 000011 基金指數 -1.02 7033.291 6961.659 7058.856 6918.273 7 000012 國債指數 0.01 148.626 148.641 148.656 148.510 8 000016 上證50 -0.79 3308.454 3282.330 3370.025 3255.769 9 000017 新綜指 -1.13 3826.013 3782.936 3864.307 3746.284 10 000300 滬深300 -1.37 4807.592 4741.861 4839.078 4703.567 11 399001 深證成指 -0.69 14809.424 14707.245 14979.810 14580.422 12 399002 深成指R -0.69 17193.832 17075.202 17391.652 16927.959 13 399003 成份B指 -1.93 9027.079 8853.081 9013.194 8826.048 14 399004 深證100R -1.79 5994.881 5887.414 6036.322 5832.431 15 399005 中小板指 -3.34 8935.338 8637.195 8953.813 8551.202 16 399006 創業板指 -2.17 2747.497 2687.974 2779.200 2650.425 17 399100 新 指 數 -2.77 10091.194 9811.256 10111.664 9718.085 18 399101 中小板綜 -3.31 12792.057 12368.868 12800.453 12253.744 19 399106 深證綜指 -2.76 2271.275 2208.561 2275.344 2187.897 20 399107 深證A指 -2.77 2375.176 2309.466 2379.507 2287.784 21 399108 深證B指 -1.77 1398.244 1373.512 1397.996 1367.343 22 399333 中小板R -3.34 9640.766 9319.085 9660.699 9226.304 23 399606 創業板R -2.16 2828.251 2767.127 2861.040 2728.472 volume amount 0 767676416 10611.72 1 766188823 10599.65 2 1487592 12.07 3 263748855 3440.01 4 182628996 2531.04 5 464275133 6437.40 6 66280981 428.46 7 263420 2.74 8 266042859 3735.74 9 766077611 10596.65 10 608638545 8603.50 11 51106975785 6405.28 12 6357969430 1017.68 13 51206484 4.32 14 10418315890 1779.58 15 3071396395 830.54 16 1441659735 551.73 17 32943457787 6091.34 18 10450911278 2291.43 19 33395285515 6137.71 20 33274363870 6128.94 21 120921645 8.77 22 3071396395 830.54 23 1441659735 551.73
大單交易數據
獲取大單交易數據,默認為大於等於400手,數據來源於新浪財經。
參數說明:
- code:股票代碼,即6位數字代碼
- date:日期,格式YYYY-MM-DD
- vol:手數,默認為400手,輸入數值型參數
- retry_count : int, 默認3,如遇網絡等問題重復執行的次數
- pause : int, 默認 0,重復請求數據過程中暫停的秒數,防止請求間隔時間太短出現的問題
返回值說明:
- code:代碼
- name:名稱
- time:時間
- price:當前價格
- volume:成交手
- preprice :上一筆價格
- type:買賣類型【買盤、賣盤、中性盤】
調用方法:
import tushare as ts
df = ts.get_sina_dd(‘600848‘, date=‘2015-12-24‘) #默認400手
#df = ts.get_sina_dd(‘600848‘, date=‘2015-12-24‘, vol=500) #指定大於等於500手的數據
結果顯示:
code name time price volume preprice type 0 600848 上海臨港 14:58:10 23.05 104309 23.05 賣盤 1 600848 上海臨港 14:57:03 23.05 56500 23.07 賣盤 2 600848 上海臨港 14:52:47 23.00 76750 23.04 賣盤 3 600848 上海臨港 14:47:32 23.10 47000 23.09 買盤 4 600848 上海臨港 14:16:03 23.00 60859 23.01 賣盤 5 600848 上海臨港 14:15:38 23.01 68659 23.03 賣盤 6 600848 上海臨港 14:00:34 23.10 66200 23.10 買盤 7 600848 上海臨港 13:25:24 23.28 42000 23.09 買盤 8 600848 上海臨港 13:23:54 23.28 79600 23.07 買盤 9 600848 上海臨港 13:16:16 23.03 40000 23.08 賣盤
TuShare獲取K線數據