Earlier this week I published a simple 12 month momentum model which shows surprisingly good performance. The rules used are so simple that many of you are probably doubting the results. Perhaps you want a closer demonstration? Let’s take a look at the details of this model and see if it really works.
First, let’s revisit the rules.
- Every Friday we check if yesterday’s closing price is above or below what it was exactly a year ago. If it’s higher than a year ago, we go long. If it’s lower than a year ago, we go short.
- Position sizes are volatility adjusted, using the common ATR method. In this case, set to target 5 basis points per day and instrument.
- Investment universe is 100 futures contracts, covering all asset classes. Currencies, equity indexes, interest rates and commodities are all well covered with similar weights to each sector.
Got it? Nothing else. We just check if current price is below or above the price a year ago. No stops. No indicators. No magical numerology or mystical wave counts.
By itself, with just this logic, the model shows a compound annual return of 22% and a maximum drawdown of 26%. That’s before cost, but still quite ok. This model keeps positions open for quite a long time, so perhaps it would make sense to rebalance the risk once in a while. If we balance too often, that would raise trading costs and operational hassle, but if we rebalance too seldom we may end up with risk allocations that we hadn’t planned on. So let’s do a rebalance once a month.
When we rebalance, we just recalculate the position sizes based on the current volatility. Using the same simple ATR method, we see how many contract we should be having in the position, and correct any open position sizes.
After adding this, we’re now seeing an annual return of 22% and a maximum drawdown of 22%. This is the return profile we have now:
This is in effect just a long term trend following model. One that actually did better than most other models in recent years. But can this work for single instruments? Or smaller portfolios?
Let’s try it on just one instrument first. How about the S&P 500 mini futures?
Yes, those are some scary looking drawdowns, and that’s why you should use diversified investment universes. But, it still shows pretty good results. The blue line uses a position sizing of 500bp, which may be on the aggressive side. Even with half the sizing, the index doesn’t stand a chance.
Let’s make a tiny portfolio of the same strategy and try it again. Just using the most common markets from each sector. We’ll try it on corn, cotton, Euro, Aussie, S&P, Nasdaq, oil, gold, Bund and US10. Just two from each sector. Not much diversification there.
And the concept still works. Of course, we still have a little more volatility than you might want to see in a CTA fund, but that’s to be expected with such a narrow portfolio. Still, even this iteration is substantially better than buy-and-hold equities.
The point with this exercise is to demonstrate the importance of the concept. The exact method matter much less than the concept. In this case, we’re looking for trends. Simply checking if the price is higher or lower than a year ago gets that job done. Are there better ways than this model? Sure. Would it make a huge difference? No, but a little bit.
Do I seriously suggest that you trade this model? No, not really. You can easily improve upon this model. But perhaps this demonstration will refocus your efforts from indicators and details to looking at the bigger picture.
So what’s the problem with this model? First, it’s scary. It’s a long term model without stops and with very unpredictable risk. That makes it tough to run in a fund or institutional mandate. Of course, you’d have a tough time raising institutional money anyhow with such seemingly dumb model. Second, this model eats up a lot of margin. It has many positions on at any given time and uses much more margin than slightly more sophisticated models.
Would this model benefit from treating the short side differently or from adding volatility targeting? Probably. Fire up your compiler and try it out.