我正在尝试使用第6列的数据,也就是调整后的股价。我想查找多只股票的月收益。在查看股票的第六列时,我总是遇到错误。 这是我的代码。
ticker <- c('DPZ','SPY','AMD','AAPL','TSLA')
Portfolio1 <- getSymbols(ticker[1], src="yahoo",
from='2014-01-01', to='2018-12-31', auto.asign = TRUE)
Portfolio2 <- Portfolio1[, 6]
my.portfolio <- monthlyReturn(Portfolio1)
for( i in 2:length(ticker)){
Portfolio1 <- getSymbols(ticker[i], src="yahoo",
from='2014-01-01', to='2018-12-31', auto.asign = TRUE)
Portfolio2 <- Portfolio1[, 6]
my.portfolio.a <- monthlyReturn(Portfolio2)
my.portfolio <- cbind(my.portfolio, my.portfolio.a)
}
第二个问题是,此循环是否将创建具有全部5个每月返回值的xts?
答案 0 :(得分:0)
使用getSymbols
时,默认情况下,数据存储在股票代号中,而不是您为其分配的名称中。
library(quantmod)
Portfolio1 <- getSymbols(ticker[1], src="yahoo",
from='2014-01-01', to='2018-12-31', auto.asign = TRUE)
Portfolio1
#[1] "DPZ"
如果对该值进行子集化,则会收到错误消息
Portfolio1[, 6]
Portfolio1 [,6]中的错误:维数错误
这很有意义,因为Portfolio1
只是一个矢量和一维对象。实际数据显示在股票代号中。
head(DPZ)
# DPZ.Open DPZ.High DPZ.Low DPZ.Close DPZ.Volume DPZ.Adjusted
#2014-01-02 69.65 69.65 68.74 68.94 407300 64.57759
#2014-01-03 69.01 69.25 68.81 68.98 415500 64.61507
#2014-01-06 69.11 69.40 68.68 69.10 799600 64.72745
#2014-01-07 69.54 69.97 69.35 69.67 487000 65.26139
#2014-01-08 69.62 70.18 69.41 69.78 851400 65.36441
#2014-01-09 70.12 70.59 69.54 70.28 576500 65.83280
因此,我们可以将符号的所有数据收集在一起,并使用lapply
进行绑定。
getSymbols(ticker, src="yahoo",
from='2014-01-01', to='2018-12-31', auto.asign = TRUE)
data <- setNames(do.call(cbind, lapply(ticker, function(x) {
Portfolio1 <- get(x)
monthlyReturn(Portfolio1[, 6])
})), ticker)
head(data)
# DPZ SPY AMD AAPL TSLA
#2014-01-31 0.02422370 -0.025913218 -0.13164557 -0.09496826 0.2085942488
#2014-02-28 0.11967181 0.045515825 0.08163265 0.05751062 0.3494845521
#2014-03-31 -0.02334707 0.008295903 0.08086253 0.01995296 -0.1485233499
#2014-04-30 -0.03364960 0.006951531 0.01995012 0.09939627 -0.0026864860
#2014-05-30 -0.02594769 0.023205889 -0.02200489 0.07870922 -0.0005772043
#2014-06-30 0.01229755 0.020645189 0.04750000 0.02766200 0.1554122028