我正在尝试使用sigPeak
信号,我的代码是:
add.signal(strategy=strat.id, name='sigPeak',
arguments=list(column='ADX.ADX', direction="peak", data=quote(mktdata)),
label='ADX.peak')
但是,当我在添加该applySignals(..., applyIndicators(..))
之后立即运行Error in FUN(X[[i]], ...) : k must be a non-negative integer
时,我收到错误:
quantmod
我认为这是由于quantstrat
和sigPeak
的以下行中的矛盾:
Quantstrat,在Lag(ret_sig,-1)
的定义中:
Lag.quantmod.OHLC
Quantmod,在if(k.e<0||k.e!=as.integer(k.e)) stop("k must be a non-negative integer")
的定义中,因为它是在XTS对象上使用的那个:
sigPeak
这是否意味着使用当前版本的quantmod和quantstrat,2016-05-20
只是不起作用?
答案 0 :(得分:2)
我不确定该功能何时处于工作状态。该行于2011年3月在修订版588中添加。在此之前,该功能的状态为:
sigPeak <- function(label,data,column, direction=c("peak","bottom")){
colNum<-match.names(column,colnames(data))
direction=direction[1] # only use the first]
switch(direction,
"peak" = { Lag(data[,colNum],2) < Lag(data[,colNum],1) & Lag(data[,colNum],1) > data[,colNum] } ,
"bottom","valley" = { Lag(data[,colNum],2) > Lag(data[,colNum],1) & Lag(data[,colNum],1) < data[,colNum] }
)
colnames(ret_sig)<-paste(label,direction,"sig",sep='.')
return(ret_sig)
}
您可以看到ret_sig
在通过colnames
引用之前未创建,因此调用colnames
会引发错误。
无论如何,要解决此问题,您只需删除Lag(ret_sig, -1)
行即可。该值未分配给任何内容,因此实际上并没有执行任何操作。
在issue #41报告并修复。