为了解释我试图回溯可能的配对交易策略 . 因此我先测试了所有可能的对组合以进行协整,然后将它们存储在名为combos的变量中,这是一个2x869矩阵,在每列中包含两个协整的资产的id,所以如果我取这个变量的第一列我get(1,25)表示我的数据中的资产编号1和编号25是协整的 . 第二个变量是datats,它是一个xts对象,它包含我在不同日期的73个资产的价格 . 现在我正在尝试对它们运行一个循环,以便使用R中的PairTrading包来回测对货币交易策略 .

这是包中使用stock.price的代码 .

install.packages("PairTrading", repos="http://R-Forge.R-project.org")
install.packages("plyr")
library(PairTrading)
library(plyr)
datats<-stock.price
combos <- combn(ncol(datats),2)
adply(combos, 2, function(x) {  
  price.pair <- datats[,c(x[1],x[2])]
  params <-EstimateParametersHistorically(price.pair, period = 180) 
  signal <- Simple(params$spread, 0.05)
  return.pairtrading <- Return(price.pair, lag(signal), lag(params$hedge.ratio)) 
  returnS<-(100 * cumprod(1 + return.pairtrading)) 
  out <- data.frame("return"=returnS)
  return(out)
})

这段代码工作正常,问题是我使用自己的数据库而不是包中的数据库 .

所以我要做的是测试策略,即前面定义的功能,组合存储在组合中,这意味着第一次执行我想测试资产编号1和资产编号25之间的策略,然后在1之间和61等等,所以我使用 datats[,c(x[1],x[2])] 来做到这一点,并存储策略的累积回报 returnS<-(100 * cumprod(1 + return.pairtrading)) . 我手动测试了上面的功能,它完美地运行,问题是当我尝试循环它时,所以我的猜测是循环工作正常,但是在打破代码后出现问题 .

这是我得到的错误:

Error in apply(merge(signal[, 1], weight.pair[, 1], return.pair[, 1],  : 
  dim(X) must have a positive length

这是一个更新,代码在我的数据中工作正常,但它似乎在某些点上突破,例如,我设法在一次执行中运行从1到400的所有组合,但是408似乎打破了代码,并且当我手动使用组合408时,该功能正常,但在我尝试循环时休息?这个错误非常令人困惑,因为它我今天无法前进,如果可以的话请帮助 .