首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >getFinancials (quantmod)和tq_get (整洁的quant)不工作吗?

getFinancials (quantmod)和tq_get (整洁的quant)不工作吗?
EN

Stack Overflow用户
提问于 2018-03-23 23:12:19
回答 2查看 2.6K关注 0票数 2

我在金融数据的quantmod和tinyquant中都得到了相同的错误。有没有人知道这是不是可以重现的?这是一个谷歌金融服务器的问题吗?下面的函数对我来说都不起作用,我不确定是我还是服务器。

代码语言:javascript
复制
    tq_get("AAPL", get= "financials")
    [1] NA
    Warning message:
    x = 'AAPL', get = 'financials': Error in thead[x]:thead[x + 1]: NA/NaN 
    argument

和:

代码语言:javascript
复制
    getFin("AAPL")
    Error in thead[x]:thead[x + 1] : NA/NaN argument

有人能帮帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-24 02:23:38

是的,我在过去的几天里也遇到了同样的问题。我认为这可能与谷歌财经的变化有关。这个网站现在不同了,url也不一样了。

票数 -1
EN

Stack Overflow用户

发布于 2018-03-24 23:10:27

试试这个:

代码语言:javascript
复制
library(jsonlite)
library(httr)

transpose_df <- function(df_list){
  df_list$maxAge <- NULL
  myColnames <- df_list$endDate$fmt
  df_list$endDate <- NULL
  
  mydf <- data.frame(row.names = colnames(df_list))
  
  for (i in 1:length(df_list)) {
    for (j in 1:4) {
      tryCatch(
        {
          mydf[i,j] <- df_list[j,i]$raw
        },
        error = function(cond){
          mydf[i,j] <- NA
        }
      )
      
    }
  }
  colnames(mydf) <- myColnames
  return(mydf)
}

scrapy_stocks <- function(stock){
  for (i in 1:length(stock)) {
    tryCatch(
      {
        url <- paste0('https://query1.finance.yahoo.com/v10/finance/quoteSummary/',stock[i],'?formatted=true&lang=en-US&region=US&modules=incomeStatementHistory%2CcashflowStatementHistory%2CbalanceSheetHistory&corsDomain=finance.yahoo.com')
        a <- GET(url)
        a <- content(a, as="text")
        
        df <- fromJSON(a, simplifyDataFrame = TRUE)
        
        df_is <- df$quoteSummary$result$incomeStatementHistory$incomeStatementHistory[[1]]
        df_is <- transpose_df(df_is)
        
        df_bs <- df$quoteSummary$result$balanceSheetHistory$balanceSheetStatements[[1]]
        df_bs <- transpose_df(df_bs)
        
        df_cs <- df$quoteSummary$result$cashflowStatementHistory$cashflowStatements[[1]]
        df_cs <- transpose_df(df_cs)
        assign(paste0(stock[i],'.f'),value = list(IS = df_is,BS = df_bs,CF = df_cs),envir = parent.frame())
      },
      error = function(cond){
        message(stock[i], "Give error ",cond)
      }
    )
  }
}

scrapy_stocks(c('PETR4.SA','VALE3.SA'))

您可以将其称为scrapy_stocks(c("AAPL","GOOGL")),并以AAPL.f$ISAAPL.f$BSAAPL.f$CF的形式访问其数据。

我使用R已经有一段时间了,所以可能有一种更好的方法来做这件事,特别是转置Dataframe,但我认为它是有效的。我希望它能帮助一些人。

在网址中,如果你使用balanceSheetHistory,你可以得到年值,如果你使用balanceSheetHistoryQuarterly,你也可以得到季度数字。人们可以很容易地为此调整函数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49452906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档