如何使用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参数
复权的简单介绍:链接
- 向前复权,就是保持现有价位不变,将以前的价格缩减
- 向后复权,就是保持先前的价格不变,而将以后的价格增加。
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()
关于分红的一点说明
- 股权登记日(date of record)是指董事会规定的登记有权领取股利的股东名单的截止日期,股权登记日通常在股利宣告日的两周以后,在股权登记日拥有公司股票的人能够分得股利。
如果4月2号是股权登记日,请问在4月2号当天才买入的股票能分红吗?
股权登记日之前持有的股票,就能得到赠送的分红。股权登记日收盘后,假如第二天卖掉了,也能得到赠送的分红。总之,只要你在股权登记日收盘的时刻拥有该公司的股票,你就能被券商系统登记,在次日就可以得到分红。
- 除权除息日即股权登记日下一个交易日。在股票的除权除息日,证券交易所都要计算出股票的除权除息价,以作为股民在除权除息日开盘的参考。其意义是股票股利分配给股东的日期。
除权除息日买进的股票不再享有送配公告中所登载的各种权利。如果在股权登记日已拥有该股票,在除权除息日将该股票卖出,仍然享有现金红利,送红股及配股权利
指数数据下载
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 ...