In Part 1, I provided an overview of Mohanram’s G-Score. This article will detail my backtest of the G-Score factors using Portfolio123. For this backtest, I used the basic process I outlined in my article, How to Backtest Stock Fundamentals Using Portfolio123.
I selected the S&P equal weight benchmark with dividends (RSP) to best match up with the equal weighting of the backtest positions. I’ve designed the filtering criteria for this backtest with a focus on enhancing data quality. The filters include the following criteria:
- No OTC stocks. Stocks not traded on the New York Stock Exchange, NASDAQ, or American Stock Exchange markets are excluded. The quality of fundamental stock data for OTC can be somewhat lower and less timely that that for stocks traded on major exchanges.
- No ADRs. Fundamental data for foreign American Depositary Receipt can include errors due to currency exchange, different accounting standards, and share count.
- Liquidity test. The minimum daily total amount traded over the past 42 trading days must be larger than $100,000. This amount was selected so that a $1 million dollar portfolio could hold 100 positions and that each new $10,000 position would not exceed 10 percent of a day’s trading volume. The liquidity test also ensures that the backtest has reliable market price information for any of the stocks that are being tested.
- Market Cap > $50 million. This filter was revised back to $50 million based on reader feedback. Nano cap stocks are excluded to help improve data quality. This filter also ensures that positions in a modest sized portfolio never exceed one percent of shares outstanding or the available float for a company.
- Price > $1. True penny stocks are excluded due to various information issues and manipulation of these stocks.
After these filters are applied, we are left with approximately 2,500 to 3,400 stocks each year. These stocks are then ranked by the criteria being tested; in this case, we are testing the Mohanram G-Score.
Summary of Results for the Mohanram G-Score Backtest
* Average excess returns were analyzed starting in each month with 12-month holding periods (230 sample periods). This avoids the potential for seasonal reporting bias.
From the chart above, it is pretty obvious that total G-Score below 4 produce negative average excess returns versus the S&P 500 equal weight returns. While slightly negative, G-Score totals between 4 and 6 are fairly close to zero. G-Score 7 and 8 produce modest average excess returns. The average excess returns do increase in a somewhat linear trend from G-Score 0 to G-Score 8. Overall, this fundamental analysis does seem to separate out the winners from the losers.
Mohanram G-Score Returns (2002 – 2020)
While the G-Score performance is not amazing, one needs to note that this scoring system was designed to analyze high price-to-book value stocks. If I limit the universe of stocks to those in the top quintile sorted by price-to-book value and G-Score greater than or equal to 7, average excess returns versus the S&P 500 equal weight index increases to 2.29% with an average portfolio size of 210 positions. The average annual return for this group 13.59%.
If there is enough interest, I could create a part 3 to this series that looks at the performance of each individual G-Score component. Share your thoughts about this analysis in the comments section below.