在R中的qountmod数据框中添加计算列

时间:2013-02-02 15:47:42

标签: r

我尝试使用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

如果有更好的方法可以使用简单的条件测试策略,我会很感激...

1 个答案:

答案 0 :(得分: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

编辑 dut to the calrify to the 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