【问题标题】:Quantmod in R... downloading stock dataR 中的 Quantmod... 正在下载股票数据
【发布时间】:2014-12-09 21:57:26
【问题描述】:

在R中的Quantmod包中,可以下载股价数据如下

my_portfolio <- c("AAPL", "SBUX")
getSymbols(my_portfolio)

这很好用。我可以通过输入AAPLSBUX 来访问股票数据。例如

> head(AAPL)
           AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2007-01-03     86.29     86.58    81.90      83.80   309579900         11.34
2007-01-04     84.05     85.95    83.82      85.66   211815100         11.59
2007-01-05     85.77     86.20    84.40      85.05   208685400         11.51
2007-01-08     85.96     86.53    85.28      85.47   199276700         11.56
2007-01-09     86.45     92.98    85.15      92.57   837324600         12.52
2007-01-10     94.75     97.80    93.45      97.00   738220000         13.12

...我可以通过这种方式进行很多不错的统计。

但这很不方便,因为如果我更改my_portfolio,比如用"IBM" 替换"AAPL",那么我必须在脚本后面用IBM 更改所有将来出现的AAPL .

我的问题: 如何在无需再次显式键入AAPLSBUX 的情况下找到从getSymbols 获得的与my_portfolio 关联的下载数据?

【问题讨论】:

  • 把它放在一个环境中,如?getSymbols所示。

标签: r quantmod


【解决方案1】:

我倾向于这样做:

library(quantmod)
my_portfolio <- c("AAPL", "SBUX")
stocks <- lapply(my_portfolio,getSymbols,auto.assign=FALSE)
names(stocks) <- my_portfolio
# access the data
head(stocks[[my_portfolio[1]]])
#            AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
# 2007-01-03     86.29     86.58    81.90      83.80   309579900         11.34
# 2007-01-04     84.05     85.95    83.82      85.66   211815100         11.59
# 2007-01-05     85.77     86.20    84.40      85.05   208685400         11.51
# 2007-01-08     85.96     86.53    85.28      85.47   199276700         11.56
# 2007-01-09     86.45     92.98    85.15      92.57   837324600         12.52
# 2007-01-10     94.75     97.80    93.45      97.00   738220000         13.12

所以这会生成一个包含股票价格的 xts 对象的命名列表。列表元素与您投资组合中的股票名称相同。

不幸的是,列名仍然是特定于股票的(例如,AAPL.Close 而不仅仅是Close),但您可以使用例如quantmod 中的Cl(...) 函数来解决这个问题。

【讨论】:

  • 您可以使用sapplysimplify=FALSE 来获得相同的结果,但不需要names(stocks) &lt;- my_portfolio 行。这是在列表中获取结果的另一种方法:getSymbols(my_portfolio, env=e &lt;- new.env()); as.list(e)[my_portfolio]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多