a newbie's exploration of the core combination ranking system - part 2


This is a continuation of my exploration of the “Core : Combination” ranking system using as my stock universe the S&P 1500. (See part 1 for the other rules I used.) After seeing the results and it being substantially less than what I was expecting, I decided to see how each of the individual components performed.

NEWBIE ALERT: If you are like me and just now exploring Portfolio 123, please go back and read my previous posts before reading this one. Many of the folks on the forum have pointed out in their comments on my previous posts shortcomings in my approach. All of those comments were valid. I committed the sin of not reserving any data for walk forward testing. I did so because I simply wanted to get a sense of how well the ranking method did.

So with the caveats out of the way, here are the results of my using the same simulation rules, but setting each factor group to 100% and the others to 0% just to see how the different factors worked. I initially tested 5 stocks (and much later 25 stocks). The figures outside of parentheses are for 5 stocks, while those inside parentheses are for 25 stocks. I have omitted the “Total Return” and the “Active Return” as they are not that helpful (to me at least) compared to the “Annual Return”, and have omitted the “Benchmark Return” and “Benchmark Max Drawdown” as they are the same for all factors (393.03% and -55.19%).

Growth 100%

Annualized Return … 9.73% (7.13%)
Annual Turnover … 221.53% (242.98%)
Max Drawdown … -76.12% (-71.20%)
Overall Winners … (129/241) 53.00% ((717/1319) 54.00%)
Sharpe Ratio … 0.43 (0.36)

Low volatility 100%

Annualized Return … 8.02% (9.76%)
Annual Turnover … 16.54% (30.15%)
Max Drawdown … -31.15% (-33.92%)
Overall Winners … (15/24) 62.00% ((127/187) 67.00%)
Sharpe Ratio … 0.65 (0.81)

Sentiment 100%

Annualized Return … 21.96% (15.08%)
Annual Turnover … 561.12% (712.76%)
Max Drawdown … -60.17% (-46.68%)
Overall Winners … (347/604) 57.00% ((2181/3853) 56.00%)
Sharpe Ratio … 0.85 (0.85)

Momentum 100%

Annualized Return … 3.13% (6.17%)
Annual Turnover … 264.67% (309.48%)
Max Drawdown … -70.89% (-66.53%)
Overall Winners … (124/302) 41.00% ((798/1821) 43.00%)
Sharpe Ratio … 0.21 (0.28)

Quality 100%

Annualized Return … 11.75% (9.61%)
Annual Turnover … 11.95% (19.44%)
Max Drawdown … -56.48% (-55.34%)
Overall Winners … (14/20) 70.00% ((79/141) 56.00%)
Sharpe Ratio … 0.56 (0.55)

Value 100%

Annualized Return … 18.18% (18.58%)
Annual Turnover … 91.24% (117.58%)
Max Drawdown … -77.37% (-65.59%)
Overall Winners … (60/101) 59.00% ((381/611) 62.00%)
Sharpe Ratio … 0.61 (0.70)

Some surprises: I had expected Growth to have a bigger impact than it did, but it at least matched the overall return of the “Core : Combination”. But the two biggest surprises were the top performance of “Sentiment” at 21.96% and the horrible performance of “Momentum” at 3.13%. I was aware of the second best screen at AAII over the period of 1998 - present being “Est Rev: Up 5% Screen” at 21.5%, so the 21.96% for “Sentiment” was in-line with that.

The horrible performance of “Momentum” was a surprise to me because, just before joining Portfolio 123, I read the book “Quantitative Momentum” [QM] by the folks at Alpha Architect. In that book they described the different kinds of momentum and ways to improve it. I glanced at the factors in Momentum and ranking system, and while they weren’t exactly what I was expecting, I didn’t see anything that looked wrong. I did notice that there was no “Frog In the Pan” algorithm component (QM, chapter 8), nor was there an R^2 calculation that other analysts have used to improve their momentum selection process. Explanations for the terrible performance came to mind: because I have a rebalancing period of 4 weeks, maybe the momentum factor is actually picking up short term reversion to the mean: QM p. 82: “Short term winners are losers in the near term future, and short term losers are winners in the near term future.” QM p. 82, table 5.2, over the years 1927 - 2014, using the strategy of buying last month’s loser, holding it for a month, then selling and buying the next short term loser and holding for a month, yielded a CAGR of 13.46% as compared to the S&P’s CAGR of 9.95%. Buying short-term winners, selling after a month, etc., had a CAGR of 3.21%, remarkably close to the 3.13%. Or maybe my rebalance period of 4 weeks is too short of a holding time, and if I were to use a longer rebalance period of 13 weeks, or 26 weeks, then Core : Momentum would have had a much better outcome. I did not run those tests.

I decided to see how each subcomponent for the different factors performed. In other words, for Growth, I set the weight for EPS to 100% and ran the simulation, then set Sales to 100% and ran the simulation, then set Operating Income to 100% and ran the simulation. I did the same for the respective subcomponents for low volatility, momentum, quality, sentiment, and value. I will present the findings in part 3.


A few observations/comments:

  1. The sentiment system has extremely high turnover compared to the others.
  2. Momentum works much better if you don’t include the most recent month. For example, instead of using Close(252)/Close(0), use Close(252)/Close(21). This allows you to buy on the dip. However, don’t do this with industry momentum.
  3. Why does momentum usually work? I wrote a post on this that you might want to read: https://blog.portfolio123.com/why-momentum-works/
  4. The above comment does not apply to industry momentum. Using industry momentum alone (the fourth folder in the Core: Momentum ranking system) might get you better results than using all four folders.
  5. You’re testing at the very extreme ends of the returns. If you look at bucket returns (using the Performance tab on the ranking system) of the various folders you’ll see what’s happening. Growth and momentum in particular are very subject to mean reversion in their tails. For those measures you’ll want to either focus on strong but not too strong growth/momentum (exclude the outliers), include a lot more stocks, or use a measure that favors stocks with high but not too high growth/momentum. (You can do this with a formula like Abs(FRank(“[growth/momentum measure]”,#all,#desc)-80) or … -70), with lower values better.)

Thanks, Mr. Yuval, sir! As always, a great reply.

I thought I read every post in the blog but I don’t remember reading that article. That makes me want to go back and read all of the posts again.

As for the utility of using momentum versus other factors (one of the observations in the article), I don’t know enough to offer an educated observation. My current UN-educated (not UN as in United Nations, but as in NOT) observation is that if a phenomenon has shown to have predictive power and undergone numerous tests at falsification and survives, then I am inclined to at least give it attention. Such an approach runs the risk of falling for things like the butter production of Bangladesh (e.g., see https://kevinkroskeymoneyblog.blogspot.com/2009/08/bangladesh-butter-production-predicts.html ) and other data mining biases. But with enough proper testing, if the predictions continue to come true, then I am inclined to give it credence. Of course, look who is talking about testing, namely the newbie who did idiot things in my testing. And look who I am talking to, namely one of the smartest guys on this forum, who has forgotten more than I will ever know. So I hope you took no offense in my UN-educated observation.

Once I have had a chance to read all of the other posts you and others have provided, I may go back and see making the changes you mentioned (using close(21) instead of close(0)) and adding a frog-in-the-pan algorithm component that the book Quantitative Momentum talks about, and see what kind of performance results.

Thank you again for your comments.