-1

我正在尝试使用 MFI 生成买入/卖出信号来测试策略。它实际上应该很简单,但是 R 让我很难过。

这是我的代码:

q <- get(getSymbols('spy',src='yahoo'))
q$mfi <- MFI(q[,2:4],q[,5],5)
sig <- function(row) { 
if (row$mfi < 20) { return (1)} 
else if (row$mfi > 80) { return (-1)} 
else { return (0)}}
q$result<-apply(q,1,sig)

我得到的错误是:

Error in row$mfi : $ operator is invalid for atomic vectors

如果有更好的方法使用简单的条件测试策略,我将不胜感激......

4

1 回答 1

1

这里不需要使用apply,使用ifelse,它是矢量化的

mfi <- c(10,15,20,50,70,90,100)
res <- ifelse(mfi < 20, 1, ifelse( mfi < 80,0,-1))

rbind(mfi,res)  ## rbind here just to show you the result and you can compare
    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
mfi   10   15   20   50   70   90  100
res    1    1    0    0    0   -1   -1

编辑对 OP 的校准

q <- getSymbols('XXX')
q$mfi <- ....
q$rsi <- ....
sig <- function(q,...) {
  if('mfi' %in% names(q))
    res <- ifelse(mfi < 20, 1, 
                  ifelse( mfi < 80,0,-1))
  else 
    res <- NULL
  res
}
 sig(q)
[1]  1  1  0  0  0 -1 -1
于 2013-02-02T16:57:02.780 回答