我尝试使用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
如果有更好的方法可以使用简单的条件测试策略,我会很感激...
答案 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