It’s been some time since I last posted so what better way to start than by quantifying and exploring a momentum strategy that was first introduced to me by the good guys at Quantpedia (www.quantpedia.com). If you haven’t heard of this site before, then I encourage you to check it out. For a nominal fee you get access to an incredible array of trading strategies that have been sourced and vetted by the folk at Quantpedia. They essentially do all the hard work for you by scanning through financial research papers and isolating the strategies that hold the most promise, delivering the trading ideas in an easy to use and intuitive website. They reached out to me some time back to collaborate with them by quantifying one of their premium strategies in exchange for disclosing the strategy rules in full to my readership. I naturally accepted the challenge and I’m excited to share my results with you today along with the strategy rules. So, thanks Quantpedia for your excellent service. A crucial tool for any serious trader!
For reference, the strategy is based on the paper by Chen, Chou, Hsieh: Persistency of the Momentum Effect: The Role of Consistent Winners and Losers; published on www.ssrn.com.
What is Momentum?
Momentum is one of the most well-known and broadly accepted phenomena in the market. The general idea is that stocks that have recently performed well are likely to continue to do so. In other words, their recent returns carry momentum. There are a great many methodologies that attempt to exploit this anomaly, some employ cross-sectional momentum, that is stock returns are compared with their peers to measure relative outperformance, while others employ time-series momentum, which is the study of stock returns relative to the stock’s recent past. Today I’m going to examine cross-sectional momentum by comparing monthly returns of individuals stocks with their peers. The basic idea is we’ll buy stocks that have been outperforming their peers and hold them for a predetermined timeframe. I’m going to focus exclusively on the long side in this post, but the same can be done for shorts and indeed their paper includes shorts. But before we get to the nuts and bolt, let’s look at why momentum exists.
Why does it work?
As with most market anomalies, there is usually a behavioural bias that causes the pricing inefficiency. Specifically relating to momentum, investors act irrationally by under-reacting to new information which results in slow price adjustments creating the momentum effect. As discussed in their paper, this anomaly is most prevalent in stocks with higher idiosyncratic volatility and lower percentage of institutional participation. Which makes sense since perceived risk associated with these stocks is probably over-compensated for resulting in slow price adjustments as market participants digest postitive news flow and movements in price that results in progressively more attractive views toward the stock and subsequent buying, delivering momentum.
This is where things get interesting. Their paper employs a relatively complex strategy by most retail standards. I had to extend my C++ library slightly to be able to replicate their strategy. For the most part the rules I employ follow theirs, but I made some minor changes. Here’s the rules that I employed:
Database: All listed and delisted equities on the NYSE, NASDAQ and AMEX.
Test Period: 2003/01/01 to 2018/07/31
- At the end of the month, rank all the equities by their 12 month average traded dollar amount – Average( (volume * close), 12 months) – in descending order. Choose the top 1000 most liquid equities.
- Rank the liquid list by their 6-month return – RateOfChange(Close, 6 months) – in descending order and select the top 100.
- Now rank the same liquid list (the 1000 equities) by their 6 month return from the prior month – Ref(RateOfChange(Close, 6 months) , t-1) – in descending order and select the top 100.
- Take the intersection of 2 and 3. In other words, filter for stocks that belong to both lists generated in point 2 and point 3. These are stocks that are showing consistent momentum.
- Buy all these stocks and allocate 100% capital equally across all the equities.
- Hold the portfolio for 6 months and repeat the process.
Performance is Impressive!
I haven’t spent a lot of time working with long-term strategies that operate on monthly intervals partly because engineering my C++ engine to accurately test and mark positions to market, along with a plethora of other complex stuff I hadn’t thought of, was a job I had not found time to complete; and partly because I have not had much luck uncovering truly robust and consistent edges in longer-time frames. However, as this paper clearly shows, there is reason to spend time researching this space. So, let’s explore the performance:
Although performance is impressive, the risk one had to endure, as measured by drawdown, was less so. That said, all the ugly risk was tied to the financial crisis in 2008. No surprises there, and I doubt anyone would continue to buy stocks outperforming peers but still generating steep negative returns. Which means that some form of regime filter (the S&P 500 is in bull mode) or absolute return filter (the stock’s 6 month return is positive by some margin) will probably go a long way in mitigating this risk and improving the overall performance profile. All-in-all this is a pretty neat strategy, and given the broad academic findings tied to momentum, coupled with the intuitive nature of why this happens, it’s going to be pretty robust.
Next, Optimise this Strategy Further
In my next post I’ll examine adding regime and absolute return filters and further optimise the strategy by adjusting return and holding periods among other things. I’m certain that we’ll be able to improve upon these findings further. I hope you enjoyed reading and look forward to my next post with you.