Harry Long posted another article on SeekingAlpha. As usual, it’s another strategy to be taken with a grain of salt, but very much worth discussing. So here’s the strategy:
50% XLP, 15% GLD, 35% TLT — aka a variation of the stocks/bonds portfolio, just with some gold added in. The twist is the idea that XLP is less risky than SPY. The original article, written by Harry Long, can be found here.
This strategy is about as simple as they come, and is tested just as easily in R.
Here’s the original replication:
require(PerformanceAnalytics) require(quantmod) getSymbols("XLP", from="1990-01-01") getSymbols("GLD", from="1990-01-01") getSymbols("TLT", from="1990-01-01") prices <- cbind(Ad(XLP), Ad(GLD), Ad(TLT)) prices <- prices[!is.na(prices[, 2]),] rets <- Return.calculate(prices) warthogRets <- Return.portfolio(rets, weights=c(.5, .15, .35), rebalance_on = "years") getSymbols("SPY", from="1990-01-01") SPYrets <- Return.calculate(Ad(SPY)) comparison <- merge(warthogRets, SPYrets, join='inner') charts.PerformanceSummary(comparison)
And the resulting replicated (approximately) equity curve:
So far, so good.
Now, let’s put the claim of outperforming over an entire cycle to the test.
years <- apply.yearly(comparison, Return.cumulative) years <- years[-1,] #remove 2004 years sum(years[,1] > years[,2])/nrow(years) sapply(years, mean)
And here’s the output:
> years portfolio.returns SPY.Adjusted 2005-12-30 0.07117683 0.04834811 2006-12-29 0.10846819 0.15843582 2007-12-31 0.14529234 0.05142241 2008-12-31 0.05105269 -0.36791039 2009-12-31 0.03126667 0.26344690 2010-12-31 0.14424559 0.15053339 2011-12-30 0.20384853 0.01897321 2012-12-31 0.07186807 0.15991238 2013-12-31 0.04234810 0.32309145 2014-12-10 0.16070863 0.11534450 > sum(years[,1] > years[,2])/nrow(years)  0.5 > sapply(years, mean) portfolio.returns SPY.Adjusted 0.10302756 0.09215978
So, even with SPY’s 2008 in mind, this strategy seems to break even on a year-to-year basis, and the returns are slightly better, which I suppose should be par for the course for a backtest against SPY through the recession.
Now, let’s just remove that one year and see how things stack up:
years <- years[-4,] #remove 2008 sapply(years, mean)
And we obtain the following results:
> sapply(years, mean) portfolio.returns SPY.Adjusted 0.1088025 0.1432787
In short, the so-called outperformance is largely sample-dependent on the S&P having a terrible year. Beyond that, things don’t look so stellar for the strategy.
Lastly, anytime anyone makes a claim about a strategy outperforming a benchmark, one very, very easy test to do is to simply look at the equity curve of a “market neutral” strategy that shorts the benchmark against the strategy, and see if that looks like an equity curve one would be comfortable holding. Here are the results:
diff <- comparison[,1] - comparison[,2] charts.PerformanceSummary(diff, main="short SPY against portfolio")
And the resulting equity curve of the outperformance:
Basically, ever since the crisis passed, the strategy has been flat to underperforming against SPY, which is fair enough considering that the market has been on a roar since then.
To hammer the point, let’s look at the equity curves from 2009 onwards.
#strategy against SPY post-crisis charts.PerformanceSummary(comparison["2009::"])
With the result:
To its credit, the strategy’s equity curve is certainly a smoother ride. At the same time, the underperformance is clear as well. I suppose this makes sense as a portfolio invested 35% in bonds should expect to underperform a portfolio fully invested in equities on an absolute returns basis.
Now, as I did before, in It’s Amazing How Well Dumb Things Get Marketed, I’m going to backtest this strategy as far as I can using proxies from Quandl for gold and bonds, by going directly to the futures. Refer to that post to see that the proxies are relatively decent for the ETFs. In this case, I switched from adjusted to close prices, but the concept should still hold.
require(IKTrading) goldFutures <- quandClean(stemCode = "CHRIS/CME_GC", verbose = TRUE) thirtyBond <- quandClean(stemCode="CHRIS/CME_US", verbose = TRUE) longPrices <- cbind(Cl(XLP), Cl(goldFutures), Cl(thirtyBond)) longRets <- Return.calculate(longPrices) longRets <- longRets[!is.na(longRets[,1]),] names(longRets) <- c("XLP", "Gold", "Bonds") longWarthog <- Return.portfolio(longRets, weights=c(.5, .15, .35), rebalance_on = "years") longComparison <- merge(longWarthog, SPYrets, join='inner') charts.PerformanceSummary(longComparison)
And here’s the resultant equity curve comparison:
So, the idea that the strategy outperforms SPY on an absolute returns basis? It seems to be due to SPY’s horrendous performance in 2008, which is a once-in-several-decades event. As you can see, if you started from XLP’s inception to approximately 2005, the strategy was actually in drawdown for all those years, at least if you started in 1998.
Let’s look at the risk/reward metrics for this timeframe:
stats <- rbind(Return.annualized(longComparison), maxDrawdown(longComparison), SharpeRatio.annualized(longComparison), Return.annualized(longComparison)/maxDrawdown(longComparison) ) rownames(stats) <- "Return Over MaxDD" stats
And the results:
> stats portfolio.returns SPY.Adjusted Annualized Return 0.0409267 0.05344120 Worst Drawdown 0.2439091 0.55186722 Annualized Sharpe Ratio (Rf=0%) 0.4846184 0.26295594 Return Over MaxDD 0.1677949 0.09683706
To its credit, the strategy has a significantly better return to risk profile than SPY does, which I hope would be the case for any backtest going up against SPY with 2008 in mind. Overall, the strategy has a bit of merit as a defensive play, and for a simple static allocation based strategy that plays on the defensive side, it delivers what you might expect from a risk-averse strategy, which is reflected in a much better return to drawdown profile than the market. Nevertheless, one should be careful not to misinterpret a strategy whose focus is to control risk for a strategy that aims to swing for the fences. Furthermore, this is a strategy that Harry Long has been so kind as to give away, so take it for what it’s worth–a simple-to-implement defensive strategy which delivers on its defensive promises.
Thanks for reading.
NOTE: I am a freelance consultant in quantitative analysis on topics related to this blog. If you have contract or full time roles available for proprietary research that could benefit from my skills, please contact me through my LinkedIn here.
Pingback: The Whole Street’s Daily Wrap for 12/12/2014 | The Whole Street
Yet another solid research piece! You have exposed a flawed portfolio design. The initial period of drawdown is not one that investors would hold through. The removal of 2008 and the comparison to being short the benchmark are quite revealing. Ilya, again, I appreciate the rigor and knowledge you bring to testing. There are way to many people out there just plugging in numbers until they get a decent back-test result with no thought or explanation for the reason it works. It’s just a fluke (or optimization) of the sample. You go the distance and figure out if it really is working or not. This post will hopefully help people from being sucked into investing with a defective strategy. Well done!
What was demonstrated was not so much a flawed portfolio design as much as flawed expectations of returns from investments. If the “bad numbers” from reality are removed from the assessment, then it appears flawed as it did not otherwise compare favorably. However, the question then becomes whether an investor expects equity returns without some large drawdowns during a long holding period. What is the time frame of analysis to create a return expectation.
The value I take from the suggestion is that at different times different assets are better to own. We all probably know people who just closed out the equity account near the lows of 2008 and missed the recovery. If they were only down 12% overall they would have still be in the game and earned a respectible return, though not market beating, since then.
Pingback: The Quarterly Tactical Strategy (aka QTS) | QuantStrat TradeR
Every few months Harry posts a new ETF strategy on SA. I wish someone would analyze them all like this one.
Working on a general algorithm to help you guys here.
Thanks, look forward to it!
Is this it?