仅使用getSymbols()

时间:2018-02-22 17:05:24

标签: r quantmod

所以我试图构建这个简单的函数,只使用getSymbols()在google上返回调整后的价格。

yahoo<-function(a){
a<-getSymbols("a", from= as.Date("1/1/13", format="%m/%d/%y"),to=Sys.time(), auto.assign = FALSE)
a[,6]

}

然而,这实际上得到了名为a或x的符号,无论它是什么。 我期待像雅虎(GOOG)这样的东西将返回谷歌的调整价格。 知道我怎么能这样做吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果我们需要返回值,则获取substitute参数并将其解析为字符串

library(quantmod)   
yahoo <- function(a){
   a <- deparse(substitute(a))
    res <- getSymbols(a, from= as.Date("1/1/13", 
           format="%m/%d/%y"),to=Sys.time(), auto.assign = FALSE)
    res[,6]

  }

out <- yahoo(GOOG)
head(out)
#           GOOG.Adjusted
#2013-01-02      359.2882
#2013-01-03      359.4968
#2013-01-04      366.6006
#2013-01-07      365.0010
#2013-01-08      364.2807
#2013-01-09      366.6751

tail(out)
#           GOOG.Adjusted
#2018-02-13       1052.10
#2018-02-14       1069.70
#2018-02-15       1089.52
#2018-02-16       1094.80
#2018-02-20       1102.46
#2018-02-21       1111.34

另一种选择是使用tidyquanttidyverse

library(dplyr)
library(tidyquant)
yahoo2 <- function(a) {
      a <- quo_name(enquo(a))
      tq_get(a, from = "2013-01-01", to = Sys.Date()) %>%
          select(date, adjusted)
 }  

yahoo2(GOOG)
# A tibble: 1,294 x 2
#   date       adjusted
#   <date>        <dbl>
# 1 2013-01-02      359
# 2 2013-01-03      359
# 3 2013-01-04      367
# 4 2013-01-07      365
# 5 2013-01-08      364
# 6 2013-01-09      367
# 7 2013-01-10      368
# 8 2013-01-11      368
# 9 2013-01-14      359
#10 2013-01-15      360
# ... with 1,284 more rows

答案 1 :(得分:0)

使用assign即可。

assign('AAPL',getSymbols(‘AAPL,from='2018-02-01',auto.assign = F)[,6] )

如果你想在一个函数中执行此操作:

yahoo <- function(ticker, from){
  assign(ticker,
         getSymbols(ticker,from=from,auto.assign = F)[,6],
         pos = 1
         )
}
yahoo(‘AAPL’)

请注意,某些Yahoo代码使用的是^@等特殊字符,这些字符将被删除/替换(即&#34; ^ GSPC“)。在命名对象时,您可以更灵活地使用非函数方法。