Overnight vs. Intraday ETF Returns
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
I haven’t done much “googling” before posting, so this topic might have been covered elsewhere but I think it’s really worth sharing or repeating anyway.
A lot has been written about the source of ETF returns (some insights might be found here). In a nutshell some analysis found that the bulk of the return is made overnight (return between close price at t and open price at t+1). This is only partially true as it hides some major differences across asset classes and regions. The table below displays the sum of daily returns (close to close) , intraday returns (open to close) and overnight returns (close to open) for most liquid ETF over a period going from today back to January 1st 2000 when data is available. The inception date of the ETF is used when no data is available prior to January 1st 2000.
ETF | Daily Rtn | Intraday Rtn | Overnight Rtn |
---|---|---|---|
SPY | 53.7% | -8.1% | 59.2% |
QQQ | 10.7% | -84.3% | 93.3% |
IWN | 81.8% | 30.4% | 52.1% |
EEM | 51.5% | -42.5% | 83.8% |
EFA | 13.2% | 73.3% | -61.5% |
EWG | 77.7% | 143.1% | -62.6% |
EWU | 41.2% | 132.3% | -84.5% |
EWL | 109.4% | 229.9% | -110.3% |
EWJ | 10.4% | 115% | -107.9% |
FXI | 72.8% | 13.8% | 45.3% |
EWS | 89.7% | -83.9% | 175.9% |
GLD | 120.9% | 18.7% | 101.1% |
GDX | 29% | -270.2% | 293.5% |
SLV | -2.8% | -36.6% | 39.1% |
USO | -21.6% | 56.7% | -79.5% |
SHY | 4% | 10.7% | -6.5% |
IEF | 23.5% | 37.4% | -13.4% |
TLT | 37.1% | 50.6% | -13.5% |
LQD | 16.7% | -36.3% | 54.3% |
A few obvious features clearly appear
- For US Equity markets (SPY, QQQ, IWM), Emerging Equity Markets (EEM), Metals (GLD,GDX,SLV) and Investment Grades (LQD) the bulk of the return is definitely made overnight. Intraday returns tend to deteriorate the overall performance (intraday return < 0)
- The exact opposite is true for European Equity Markets (EFA,EWG,EWU,EWL), US Bonds (SHY,IEF,TLT) and Oil (USO). Overnight returns are detracting significantly from the overall performance.
I didn’t manage to come up with a decent explanation about why this is happening but I’m keen on learning if someone is willing to share! I’m not too sure at this stage how this information can be used but it has to be taken into account somehow.
Below is the code for generating the analysis above.
#################################################### ## OVERNIGHT RETURN IN ETF PRICES ## ## [email protected] - Jan 2014 #################################################### library(quantmod) symbolList <- c("SPY","QQQ","IWN","EEM","EFA","EWG","EWU","EWL","EWJ","FXI","EWS","GLD","GDX","SLV","USO","SHY","IEF","TLT","LQD") results <- NULL for (ii in symbolList){ data <- getSymbols(Symbols = ii, src = "yahoo", from = "2000-01-01", auto.assign = FALSE) colnames(data) <- c("open","high","low","close","volume","adj.") dailyRtn <- (as.numeric(data[2:nrow(data),"close"])/as.numeric(data[1:(nrow(data)-1),"close"])) - 1 intradayRtn <- (as.numeric(data[,"close"])/as.numeric(data[,"open"]))-1 overnightRtn <- (as.numeric(data[2:nrow(data),"open"])/as.numeric(data[1:(nrow(data)-1),"close"])) - 1 results <- rbind(results,cbind( paste(round(100 * sum(dailyRtn,na.rm=TRUE),1),"%",sep=""), paste(round(100 * sum(intradayRtn,na.rm=TRUE),1),"%",sep=""), paste(round(100 * sum(overnightRtn,na.rm=TRUE),1),"%",sep=""))) } colnames(results) <- c("dailyRtn","intradayRtn","overnightRtn") rownames(results) <- symbolList
As usual any comments welcome
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.