tushare pro接口_R语言获取tushare.pro的金融数据

tushare的团队已经封装了R接口:通过R语言调取tushare数据。

但我在我的R环境中没能安装上,索兴自己照猫画虎写了一个:

query <- function(api_name, token, params = list(), ts_api = "http://api.tushare.pro/"){
      
  post_data <- list(api_name = api_name,
                    token = token,
                    params = params)
  
  r <- httr::POST(ts_api, body = post_data, encode = 'json') # post json
  
  content <- httr::content(r, "parsed", "application/json") 
  
  with(content, {
      
    if(code == 0) {
       # retrieve data successfully when code equals 0
      with(data, {
      
        
        # combine 'items' with 'fields' to create a data.frame
        dd <- data.table::rbindlist(items) # 返回一个data.table
        
        # data.table与data.frame的一些行为不一致, 故转换回data.frame
        dd <- data.frame(dd) 
        if(length(dd) > 0){
       
          names(dd) <- unlist(fields)
        } else {
       # create an empty data.frame when no items
          dd <- data.frame(matrix(ncol = length(fields), nrow = 0))
          names(dd) <- fields
        }
        
        list(code=code, data=dd)})
    } else {
       # failed to retrieve data
      list(code=code, msg=content[['msg']])
    }
  })
}

以上代码是用httr访问tushare的restful通用接口,获取并组织数据为数据框。接着是简单封装的获取股票基信息的函数:

stock_basic <- function(token=token) {
    query(api_name = "stock_basic", token = token)
    }

获取日股票日交易数据的函数:

daily <- function(token=token, ts_code=NULL, start_date=NULL, end_date=NULL) {
      
    params <- list(ts_code=ts_code, 
                   start_date=start_date, 
                   end_date=end_date)
    query(api_name = "daily", 
          token = token,
          params = params)
}

用例:

token <- 'XXXXXXXX'

# 获取所有股票的日k数据
res1 <- daily(token = token, trade_date = "20190103")
df1 <- res1[['data']]

# 获取一支股票一个时间段的日k数据
res2 <- daily(token = token, ts_code = '600000.SH')
df2 <- res2[['data']]

# 获取股票的基本信息
res3 <- stock_basic(token=token)
df3 <- res3[['data']]

httr用起来非常方便,tushare.pro的接口亦不遑多让,十分感谢tushare的Jimmy老师及团队,为我们提供这么好的数据,这么优雅的接口。

日k数据的数据清理:

clean.daily <- function(dd, omit.na = F) {
  # sort by trade_date
  dd[['trade_date']] <- as.Date(dd[['trade_date']], "%Y%m%d")
  new_order <- order(dd$trade_date, decreasing = FALSE)
  dd <- dd[new_order, ]
  
  # set column 'trade_date' as column
  row.names(dd) <- dd[['trade_date']]
  dd[['trade_date']] <- NULL
  dd
}

n日均线的添加:

# 递归添加mas中的各种均线
ma <- function(dd, v, mas) {
  if(length(mas) > 0) {
    m <- mas[1]
    col <- paste("ma", m, sep = "")
    dd[[col]] <- TTR::SMA(dd[[v]], m)
    
    # 去除第一个均线参数后,继续递归后边的均线
    ma(dd, v, mas[-1])
  } else {
    dd
  }
}

你可能感兴趣的:(tushare,pro接口)