R 中的相对性能循环

Relative Performance loop in R

我无论如何都不是程序员,并且一直在尝试学习 R 来编写各种交易策略。我正在尝试计算一系列股票与标准普尔 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))

尝试(查看添加的 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.