2016-05-16 104 views
2

我试图用一个sigPeak信号和我添加此代码:Quantstrat sigPeak错误:“K必须是一个非负整数”

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 

我相信这是由于在quantmodquantstrat如下的自相矛盾的codicum

Quantstrat,在sigPeak定义:

Lag(ret_sig,-1) 

Quantmod,在Lag.quantmod.OHLC作为该定义是在XTS对象使用的一个:

if(k.e<0||k.e!=as.integer(k.e)) stop("k must be a non-negative integer") 

这是否意味着与quantmod和quantstrat的当前版本,sigPeak只是不起作用?

回答

2

我不确定何时该功能处于工作状态。在修订版588加入这条线在2011年3月之前,该功能的状态是:

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) 
} 

你可以看到,之前它通过colnames引用ret_sig没有建立,所以colnames召唤就会抛出一个错误。

无论如何,要解决问题,您只需要删除Lag(ret_sig, -1)行。价值没有分配给任何东西,所以它实际上没有做任何事情。

报告并修复于issue #41

相关问题