Tushare库在数据获取方面一直受到金融分析人员的青睐,极大地减轻了他们在金融数据采集、清洗加工、存储过程的工作量,更加专注于策略和模型的研究与实现上。由于Tushare旧版运行了有3年之久,因此目前网上很多涉及财经和股票交易数据获取的文章使用的是旧版Tushare。Tushare社区现在主要维护新版本tushare pro,它的数据更稳定质量更高,而且从广度和深度上相对旧版本都做了更大的改进,可获取的数据内容扩大到了包括沪深股票行情、财务、市场参考、指数(含国外股指)、基金、期货、期权、宏观经济、行业经济、新闻资讯等财经数据,以及数字货币行情等区块链数据,为金融量化人员节省了大量宝贵时间。
pro版本的总体来说使用是免费的,使用前需要登陆官网注册账号以获取token,注册地址:https://tushare.pro/register?reg=365212 。不过部分接口设置了权限,需要达到一定的积分才能使用。下面以获取常用的股票行情数据为例,展示下tushare pro获取数据的方法。
先介绍下stock_basic()接口,该接口获取上市的所有股票基础信息数据,包括股票代码、名称、上市日期、退市日期等。输入参数说明如下:
is_hs:是否沪深港通标的,N否、H沪股通、S深股通;
list_status:上市状态,L上市、D退市、P暂停上市;
exchange:交易所 SSE上交所,SZSE深交所,HKEX港交所。
注:关于输出参数大家可参照官网的介绍,此处不在赘述。
1 pro = ts.pro_api(token) 2 data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date') 3 print(data.head()) 4 """
5 ts_code symbol name area industry list_date 6 0 000001.SZ 000001 平安银行 深圳 银行 19910403 7 1 000002.SZ 000002 万科A 深圳 全国地产 19910129 8 2 000004.SZ 000004 国农科技 深圳 生物制药 19910114 9 3 000005.SZ 000005 世纪星源 深圳 房产服务 19901210 10 4 000006.SZ 000006 深振业A 深圳 区域地产 19920427 11 """
12 print(data.tail()) 13 """
14
15 ts_code symbol name area industry list_date 16 3585 603993.SH 603993 洛阳钼业 河南 小金属 20121009 17 3586 603996.SH 603996 中新科技 浙江 家用电器 20151222 18 3587 603997.SH 603997 继峰股份 浙江 汽车配件 20150302 19 3588 603998.SH 603998 方盛制药 湖南 中成药 20141205 20 3589 603999.SH 603999 读者传媒 甘肃 出版业 20151210 21 """
再介绍下daily()接口,该接口获取股票行情数据,也是最常用的接口。输入参数包括股票代码ts_code、开始日期start_date、结束日期end_date。
#获取平安银行日行情数据
1 pa=pro.daily(ts_code='000001.SZ', start_date='20180101', 2 end_date='20190106') 3
4 print(pa.head()) 5 """
6 ts_code trade_date open ... pct_chg vol amount 7 0 000001.SZ 20190104 9.24 ... 5.0647 1481159.06 1422149.888 8 1 000001.SZ 20190103 9.18 ... 0.9793 415537.95 384457.707 9 2 000001.SZ 20190102 9.39 ... -2.0256 539386.32 498695.109 10 3 000001.SZ 20181228 9.31 ... 1.0776 576604.00 541571.004 11 4 000001.SZ 20181227 9.45 ... -0.2151 624593.27 586343.755 12
13 [5 rows x 11 columns] 14 """
15 print(pa.tail()) 16 """
17 ts_code trade_date open ... pct_chg vol amount 18 241 000001.SZ 20180108 13.25 ... -2.56 2158620.81 2806099.169 19 242 000001.SZ 20180105 13.21 ... 0.38 1210312.72 1603289.517 20 243 000001.SZ 20180104 13.32 ... -0.60 1854509.48 2454543.516 21 244 000001.SZ 20180103 13.73 ... -2.70 2962498.38 4006220.766 22 245 000001.SZ 20180102 13.35 ... 3.01 2081592.55 2856543.822 23
24 [5 rows x 11 columns] 25 """
我们发现此处返回的DataFrame格式数据的行索引为序号,而不是交易日期,并且数据按日期的排列顺序是从20190104到20180102,与专栏例程中的标准数据格式不稳和,我们需要调整下返回
的数据格式。
1 pa.index = pd.to_datetime(pa.trade_date) 2 pa.sort_index(inplace=True) 3 pa.drop(axis=1, columns='trade_date', inplace=True) 4 print(pa.head()) 5 """ 6 ts_code open high ... pct_chg vol amount 7 trade_date ... 8 2019-01-04 000001.SZ 9.24 9.82 ... 5.0647 1481159.06 1422149.888 9 2019-01-03 000001.SZ 9.18 9.33 ... 0.9793 415537.95 384457.707 10 2019-01-02 000001.SZ 9.39 9.42 ... -2.0256 539386.32 498695.109 11 2018-12-28 000001.SZ 9.31 9.46 ... 1.0776 576604.00 541571.004 12 2018-12-27 000001.SZ 9.45 9.49 ... -0.2151 624593.27 586343.755 13 14 [5 rows x 10 columns] 15 """ 16 print(pa.tail()) 17 """ 18 ts_code open ... vol amount 19 trade_date ... 20 2018-01-08 000001.SZ 13.25 ... 2158620.81 2806099.169 21 2018-01-05 000001.SZ 13.21 ... 1210312.72 1603289.517 22 2018-01-04 000001.SZ 13.32 ... 1854509.48 2454543.516 23 2018-01-03 000001.SZ 13.73 ... 2962498.38 4006220.766 24 2018-01-02 000001.SZ 13.35 ... 2081592.55 2856543.822 25 26 [5 rows x 10 columns] 27 """
关于使用index_daily接口获取指数每日行情,该接口设置了使用权限,用户需要累积200积分才可以调取,积分积累的办法可以参照官网的介绍。如果未达到积分,也可以通过旧版接口获取指数行
情。这里我们通过旧版本获取并可视化国内上证综指、深证成指、沪深300、创业板指、上证50、中小板指数据。
1 #获取常见股票指数行情 2 indexs={'上证综指': 'sh','深证成指': 'sz', 3 '沪深300': 'hs300','创业板指': 'cyb', 4 '上证50': 'sz50', '中小板指': 'zxb'} 5 6 index_data = {} 7 for name, code in indexs.items(): 8 #df = pro.index_daily(ts_code=code)#需要200积分 9 df = ts.get_hist_data(code,start='2019-01-01',end=datetime.datetime.now().strftime('%Y-%m-%d')) 10 df.index = pd.to_datetime(df.index) 11 index_data[name] = df.sort_index()