我无论如何都不是程序员,一直在努力学习R来编写各种交易策略。我试图计算一系列股票相对于标准普尔500指数的相对表现;P 500并将其保存到矩阵中。我写的东西似乎只经过第一个符号,然后就停止了。下面是我想出的代码。我感谢任何关于如何进行的帮助、意见和建议。非常感谢。
library(quantmod)
library(PerformanceAnalytics)
Sys.setenv(TZ = "UTC")
symbols <- c('IBM', 'GE', '^GSPC')
getSymbols(symbols, src = "yahoo", from = "2010-12-31", to = Sys.Date())
symadj <- cbind(IBM[,6], GE[,6])
sp5adj <- GSPC[,6]
# Calculate Relative Performance vs S&P and save data
for (i in length(symadj)) {
rp <- matrix(symadj[,1]/sp5adj, nrow = 1070, ncol = 3)
print(tail(rp))
}
_您不是在数组上循环,而是在单个数字上循环:
for (i in length(symadj))
Try(请参阅添加的seq,注意括号。另外,注意长度,迭代超过ncol(即列):
for (i in seq(1,ncol(rp),1))
_此外,你总是在浏览同一列:
rp <- matrix(symadj[,1]/sp5adj, nrow = 1070, ncol = 3)
_我跳过了一件事:你应该在循环之前构建你的矩阵:
rp <- matrix(0,nrow=1071,ncol=2)
然后在不覆盖先前矩阵的情况下进行分配-您已经构建了它(另外,看看1所在的i,现在您正在迭代)
rp[,i] <- symadj[,i]/sp5adj #This inside the loop
_你的for循环最终应该是这样的:
rp <- matrix(0,nrow=1071,ncol=2)
for (i in seq(1,ncol(rp),1)) {
rp[,i] <- symadj[,i]/sp5adj #This inside the loop
print(tail(rp))
}
\!/现在这段时间有1071天,所以矩阵应该还有一行——这就是为什么1071天。