Search code examples
rtime-seriesxtsquantmod

Filter xts objects by common dates


I am stuck with the following code.

For reference the code it is taken from the following website (http://gekkoquant.com/2013/01/21/statistical-arbitrage-trading-a-cointegrated-pair/), I am also compiling the code through R Studio.

library("quantmod")

startDate = as.Date("2013-01-01")
symbolLst<-c("WPL.AX","BHP.AX")

symbolData <- new.env() 
getSymbols(symbolLst, env = symbolData, src = "yahoo", from = startDate)

stockPair <- list(
   a =coredata(Cl(eval(parse(text=paste("symbolData$\"",symbolLst[1],"\"",sep="")))))
  ,b = coredata(Cl(eval(parse(text=paste("symbolData$\"",symbolLst[2],"\"",sep="")))))
  ,hedgeRatio = 0.70   ,name=title)

spread <- stockPair$a - stockPair$hedgeRatio*stockPair$b

I am getting the following error.

Error in stockPair$a - stockPair$hedgeRatio * stockPair$b : 
      non-conformable arrays

The reason these particular series don't match is because "WPL.AX" has an extra value (date:19-05-2014 - the matrix lengths are different) compared to "BHP". How can I solve this issue when loading data?

I have also tested other stock pairs such as "ANZ","WBC" with the source = "google" which produces two of the same length arrays.

> length(stockPair$a)
[1] 360
> length(stockPair$b)
[1] 359

Solution

  • Add code such as this prior to the stockPair computation, to trim each xts set to the intersection of dates:

    common_dates <- as.Date(Reduce(intersect, eapply(symbolData, index)))
    symbolData <- eapply(symbolData, `[`, i=common_dates)