2

我下载了 2 条可追溯到 2000 年的每日股票历史记录:

library(quantmod)
check <- c("FB","GOOG")
getSymbols(check, from='2000-01-01')

隔离最后的价格:

close <- cbind(Cl(GOOG),Cl(FB))

现在我想使用非常好的“TTR”包中的一些工具,例如SMA

smacheck <- SMA(close,50)
Error in `colnames<-`(`*tmp*`, value = c("GOOG.Close.SMA.50", "FB.Close.SMA.50":
  length of 'dimnames' [2] not equal to array extent

FB的历史比 短GOOG。无论 NA 何时开始,我如何让这两种股票都适用?

4

2 回答 2

3

这与缺失值无关。 SMA目前不适用于具有多于一列的对象。您需要SMA单独在每一列上运行。

library(quantmod)
e <- new.env()
getSymbols('GOOG;FB', from='2000-01-01', env=e)
smacheck <- do.call(merge, eapply(e, function(x) SMA(Cl(x), 50)))
于 2013-11-05T17:31:17.213 回答
1

你可以只使用apply功能

SMAs <- xts(apply(close, MARGIN = 2, FUN = "SMA", n = 50), index(close))
head(SMAs)
##            GOOG.Close FB.Close
## 2004-08-19         NA       NA
## 2004-08-20         NA       NA
## 2004-08-23         NA       NA
## 2004-08-24         NA       NA
## 2004-08-25         NA       NA
## 2004-08-26         NA       NA

tail(SMAs)
##            GOOG.Close FB.Close
## 2013-10-29   899.6198  46.7544
## 2013-10-30   902.9198  46.9664
## 2013-10-31   906.1448  47.2042
## 2013-11-01   909.2114  47.4282
## 2013-11-04   912.3294  47.5816
## 2013-11-05   915.4320  47.7570
于 2013-11-06T04:02:22.757 回答