2

这是代码:

require("quantmod")

getSymbols("SPY")  

ticker <- SPY[,4]

win <- 0 

for(i in 11:NROW(ticker))

j <- i-10

if(ticker[i] > ticker[j])               

win <- win + 1

我想检查今天的收盘价是否大于 10 天前的收盘价,以及是否要增加 win 变量。我还尝试了以下方法:

for(i in 11:NROW(ticker))

if(ticker[i] > ticker[i-10])               

win <- win + 1             

两者似乎都应该工作,所以我实际上有两个问题。首先让它工作,但重要的是要了解它们为什么不起作用。两个标志“参数长度为零”。我的预感是ticker[j] 或ticker[i-10] 是罪魁祸首。主要是因为当我用硬编码值替换它们时,它们会起作用。

4

3 回答 3

2

问题是 ticker[i] 不返回数字对象,因此您无法比较或减去它们。试试这个好玩:

str(ticker[15])
ticker[15]-ticker[10]

所以,只需将它们包装在 as.numeric 中,你就会得到你需要的东西。

require("quantmod")
getSymbols("SPY")  
ticker <- SPY[,4]
win <- 0 
for(i in 11:NROW(ticker)){
    j <- i-10
    if(as.numeric(ticker[i]) > as.numeric(ticker[j])){             
        win <- win + 1
    }
}
于 2011-03-24T02:33:35.470 回答
1

这与 for 循环无关。这是因为 xts/zoo 在执行任何操作之前都按其索引对齐。 ticker[i] > ticker[j]为空,因为索引不同。

你也不需要一个 for 循环。您可以通过滞后系列轻松做到这一点:

merged.ticker <- merge(ticker, lag(ticker,10))
win <- sum(merged.ticker[,1] > merged.ticker[,2], na.rm=TRUE)
lose <- sum(merged.ticker[,1] < merged.ticker[,2], na.rm=TRUE)
于 2011-03-24T16:27:34.540 回答
-1

花括号是你的朋友,我的朋友。

于 2011-03-24T02:30:49.127 回答