利用Tushare平台获取金融大数据

张剑

2020/04/02

Categories: 投资学 Tags: 投资 R

Tushare平台简介

Tushare免费为高校师生提供金融金融大数据接口,可以说是国内最好的免费金融数据接口,可以使用我们常用的Python或R进行数据导入,是各位同学在校及今后工作的一个数据入口。

链接在此

与本课程有关的主要功能简介

  1. 上市公司基础数据、财务数据与日历行情数据
  2. 指数数据,作为资本资产定价模型的重要变量
  3. 宏观经济数据,主要是利率数据,作为我们无风险利率、贴现率参考
  4. 债券数据,特别是收益率曲线数据,作为固定收益课程的参考

该平台的其他数据可以作为同学们后续科研、练手的资源。更多的内容大家可以自行查阅数据接口

如何使用R获取数据

该平台早期使用python,相对数据接口案例均以python为主,这里我简单介绍一些R调用数据接口的方法,供大家参考。

注册账号,获取接口TOKEN

该网站存在一定的推广驱动,因此采用积分制,利用积分限制不同数据接口等级。但是高校师生可以获得全部权限,故而大家可以放心使用。


注册后可以在个人账号处获得TOKEN,从而激活两个api,来调取数据。具体方法见代码:

#安装包,建议使用pacman
pacman::p_load(Tushare,tidyverse,DT)
api <- pro_api(token = '5adce34e8c81bf7085828754a8e09590c3630032d0f61aad6483eaaa')
bar <- pro_bar(token = '5adce34e8c81bf7085828754a8e09590c3630032d0f61aad6483eaaa')
# 上面那一串数字就是我的token,如果同学们要用,也可以直接粘贴过去,建议最好自己申请一个全不权限的

股票基本信息获取

pingan <-api(api_name = 'stock_company', ts_code='601318.SH')
str(pingan)
## 'data.frame':    1 obs. of  12 variables:
##  $ ts_code    : chr "601318.SH"
##  $ exchange   : chr "SSE"
##  $ chairman   : chr "马明哲"
##  $ manager    : chr "谢永林"
##  $ secretary  : chr "盛瑞生"
##  $ reg_capital: num 1828024
##  $ setup_date : chr "19880321"
##  $ province   : chr "广东"
##  $ city       : chr "深圳市"
##  $ website    : chr "www.pingan.cn"
##  $ email      : chr "pr@pingan.com.cn;ir@pingan.com.cn"
##  $ employees  : int 372194
pingan_2 <- api(api_name = 'stock_company',ts_code='601318.SH')
str(pingan_2)
## 'data.frame':    1 obs. of  12 variables:
##  $ ts_code    : chr "601318.SH"
##  $ exchange   : chr "SSE"
##  $ chairman   : chr "马明哲"
##  $ manager    : chr "谢永林"
##  $ secretary  : chr "盛瑞生"
##  $ reg_capital: num 1828024
##  $ setup_date : chr "19880321"
##  $ province   : chr "广东"
##  $ city       : chr "深圳市"
##  $ website    : chr "www.pingan.cn"
##  $ email      : chr "pr@pingan.com.cn;ir@pingan.com.cn"
##  $ employees  : int 372194
pingan_3 <- api(api_name = "stk_managers",ts_code='601318.SH')
## Warning in data.table::rbindlist(items): Column 11 [''] of item 1 is length 0.
## This (and 106 others like it) has been filled with NA (NULL for list columns) to
## make each item uniform.
str(pingan_3)
## 'data.frame':    209 obs. of  11 variables:
##  $ ts_code   : chr  "601318.SH" "601318.SH" "601318.SH" "601318.SH" ...
##  $ ann_date  : chr  "20190727" "20190727" "20190727" "20190727" ...
##  $ name      : chr  "刘宏" "刘宏" "刘宏" "储一昀" ...
##  $ gender    : chr  "M" "M" "M" "M" ...
##  $ lev       : chr  "委员会成员" "委员会成员" "委员会成员" "委员会成员" ...
##  $ title     : chr  "战略委员会委员" "投资委员会委员" "提名委员会委员" "审计委员会委员" ...
##  $ edu       : chr  "博士" "博士" "博士" "博士" ...
##  $ national  : chr  "中国" "中国" "中国" "中国" ...
##  $ birthday  : chr  "1967" "1967" "1967" "1964" ...
##  $ begin_date: chr  "20190726" "20190726" "20190726" "20190726" ...
##  $ end_date  : chr  NA NA NA NA ...

行情数据获取

library(DT)
pingan_4 <- api(api_name = "daily",ts_code='601318.SH',start_date="20200101",end_date='20200401')
pingan_4 <- pingan_4 %>% mutate(trade_date = as.Date(trade_date,format="%Y%m%d")) %>%
  select(ts_code,trade_date,close,pct_chg) 
pingan_4 %>% datatable()

注意使用这种方式获得的回报率是没有复权的,我们使用刚才创建的另一个接口获取复权数据,同时还需要大家注意的是这里的日期是字符形式,最好将其转换为日期形式,注意我的format参数


复权的简单介绍:链接

  1. 向前复权,就是保持现有价位不变,将以前的价格缩减
  2. 向后复权,就是保持先前的价格不变,而将以后的价格增加。
pingan_5 <- bar(ts_code='601318.SH',start_date="20200101",end_date='20200401',adj="hfq")
pingan_6 <- bar(ts_code='601318.SH',start_date="20200101",end_date='20200401',adj="qfq")
pingan_5 %>% select(trade_date,close) %>% datatable()
pingan_6 %>% select(trade_date,close) %>% datatable()

获取分红情况

pingan_div <- api(api_name = "dividend",ts_code='601318.SH')  %>%  filter(div_proc=="实施") %>%
  select(ts_code,end_date,cash_div_tax,record_date,ex_date) %>% distinct()
pingan_div  %>% datatable()

关于分红的一点说明

  1. 股权登记日(date of record)是指董事会规定的登记有权领取股利的股东名单的截止日期,股权登记日通常在股利宣告日的两周以后,在股权登记日拥有公司股票的人能够分得股利。

如果4月2号是股权登记日,请问在4月2号当天才买入的股票能分红吗?
股权登记日之前持有的股票,就能得到赠送的分红。股权登记日收盘后,假如第二天卖掉了,也能得到赠送的分红。总之,只要你在股权登记日收盘的时刻拥有该公司的股票,你就能被券商系统登记,在次日就可以得到分红。


  1. 除权除息日即股权登记日下一个交易日。在股票的除权除息日,证券交易所都要计算出股票的除权除息价,以作为股民在除权除息日开盘的参考。其意义是股票股利分配给股东的日期。

除权除息日买进的股票不再享有送配公告中所登载的各种权利。如果在股权登记日已拥有该股票,在除权除息日将该股票卖出,仍然享有现金红利,送红股及配股权利

指数数据下载

ts_code一次只能传入一个指数或者股票代码,因此如果希望一次下载多个股票,可能需要使用循环或者利用apply函数

sz_ind <- api(api_name = 'index_basic',market="SSE")
glimpse(sz_ind)
## Observations: 590
## Variables: 8
## $ ts_code    <chr> "000001.SH", "000002.SH", "000003.SH", "000004.SH", "000...
## $ name       <chr> "上证综指", "上证A指", "上证B指", "上证工业类指数", "上证商业类指数", "上证房地产指数",...
## $ market     <chr> "SSE", "SSE", "SSE", "SSE", "SSE", "SSE", "SSE", "SSE", ...
## $ publisher  <chr> "中证公司", "中证公司", "中证公司", "中证公司", "中证公司", "中证公司", "中证公司", ...
## $ category   <chr> "综合指数", "综合指数", "综合指数", "综合指数", "综合指数", "综合指数", "综合指数", ...
## $ base_date  <chr> "19901219", "19901219", "19920221", "19930430", "1993043...
## $ base_point <dbl> 100.00, 100.00, 100.00, 1358.78, 1358.78, 1358.78, 1358....
## $ list_date  <chr> "19910715", "19920221", "19920221", "19930503", "1993050...
hs300 <- api(api_name = "index_daily",ts_code='399300.SZ',start_date='20200101', end_date='20200401')
sz_1 <- api(api_name = "index_daily",ts_code='000001.SH',start_date='20200101', end_date='20200401')
glimpse(sz_1)
## Observations: 59
## Variables: 11
## $ ts_code    <chr> "000001.SH", "000001.SH", "000001.SH", "000001.SH", "000...
## $ trade_date <chr> "20200401", "20200331", "20200330", "20200327", "2020032...
## $ close      <dbl> 2734.521, 2750.296, 2747.214, 2772.203, 2764.911, 2781.5...
## $ open       <dbl> 2743.541, 2767.307, 2739.719, 2792.984, 2761.896, 2775.3...
## $ high       <dbl> 2773.364, 2771.168, 2759.099, 2805.548, 2788.504, 2788.6...
## $ low        <dbl> 2731.079, 2743.115, 2723.054, 2771.756, 2753.428, 2757.8...
## $ pre_close  <dbl> 2750.296, 2747.214, 2772.203, 2764.911, 2781.591, 2722.4...
## $ change     <dbl> -15.7747, 3.0824, -24.9895, 7.2924, -16.6804, 59.1532, 6...
## $ pct_chg    <dbl> -0.5736, 0.1122, -0.9014, 0.2637, -0.5997, 2.1728, 2.340...
## $ vol        <dbl> 217253427, 218598674, 239706604, 240764066, 234084022, 2...
## $ amount     <dbl> 225624647, 224271062, 250687144, 253630726, 248279785, 2...
str(hs300)
## 'data.frame':    59 obs. of  11 variables:
##  $ ts_code   : chr  "399300.SZ" "399300.SZ" "399300.SZ" "399300.SZ" ...
##  $ trade_date: chr  "20200401" "20200331" "20200330" "20200327" ...
##  $ close     : num  3675 3686 3674 3710 3698 ...
##  $ open      : num  3682 3708 3657 3746 3693 ...
##  $ high      : num  3732 3716 3691 3759 3736 ...
##  $ low       : num  3671 3676 3638 3710 3681 ...
##  $ pre_close : num  3686 3674 3710 3698 3723 ...
##  $ change    : num  -11.1 12 -35.9 12 -24.5 ...
##  $ pct_chg   : num  -0.301 0.328 -0.969 0.325 -0.657 ...
##  $ vol       : num  1.19e+08 1.11e+08 1.27e+08 1.24e+08 1.12e+08 ...
##  $ amount    : num  1.70e+08 1.62e+08 1.81e+08 1.86e+08 1.69e+08 ...