以下是代码:
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天前收盘价,以及是否要增加赢额变量。我也尝试了以下内容:
for(i in 11:NROW(ticker))
if(ticker[i] > ticker[i-10])
win <- win + 1
看起来他们应该工作所以我实际上有两个问题。首先让它工作,但也重要的是理解它们为什么不起作用。两个标志“参数长度为零”。我的预感是它是罪魁祸首[j]或自动收报机[i-10]的罪魁祸首。主要是因为当我用硬编码的值替换它们时,它们起作用。
答案 0 :(得分: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
}
}
答案 1 :(得分: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)
答案 2 :(得分:-1)
大括号是你的朋友,我的朋友。