-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へのcalrifyへのEDIT dut

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 に答える