No. of Recommendations: 15
G-score is a metric developed about 20 years ago to rank growth stocks, with one point given for 8 measures. I made a gtr1 screen based on Mohanram's G-score, and get similar results: stocks with higher G-scores had higher returns. Results from 19880302 to 20241107 for the screen {GscoreHigh_dv50p}:
Gscore CAGR GSD count
HIGH(6,7) 13 22 126
LOW(0,1) -3 32 40
HIGH-LOW 16
G-score is only calculated for the lowest 20% of Book-to-Market stocks. I calculated a new field [GAscore] that has no Book value criteria. This increases the number of passing stocks, with similar results:
GAscore CAGR GSD count
HIGH(6,7) 14 19 427
LOW(0,1) 3 28 183
HIGH-LOW 11
Combining GAscore with 5-year sales growth has good CAGR, but also high GSD.
Define {GAscoreSG}
step0: [Security Type] == 11
step1: [Mkt Days Since Security Opened] >= 63
step2: [Average dollar-volume over 63 days] > 0
step3: [Average dollar-volume over 63 days] Top 50%
step4: [SalesY1] > 0
step5: [SalesY6] > 0
step6: [GAscore] == 7
step7: [[SalesY1]/[SalesY6]] Top 10; Cash When Fewer
Holding period = 21 mkt days, 0.4% friction
Results from 19880302 to 20241107:
Screen CAGR GSD MDD Sharpe Beta AT
GAscoreSG 17 33 -61 0.59 1.3 3
SP1500EqualWeight 12 21 -60 0.54 1.1 0
===================
Details:
Mohanram backtested G-score from 1979 to 1999. From the abstract: "This paper tests whether a strategy based on financial statement analysis of low book-to-market (growth) stocks is successful in differentiating between winners and losers in terms of future stock performance. I create an index (G_SCORE) based on a combination of traditional fundamentals such as earnings and cash flows and measures appropriate for growth firms such as the stability of earnings and growth and the intensity of R&D, capital expenditure and advertising. A strategy based on buying high G_SCORE firms and shorting low G_SCORE firms consistently earns significant excess returns... The stock market in general and analysts in particular are much more likely to be positively surprised by firms whose growth oriented fundamentals are strong, indicating that the stock market fails to grasp the future implications of current fundamentals." (See Mohanram's 2005 paper "Separating Winners from Losers among Low Book-to-Market Stocks using Financial Statement Analysis".)
G-score has 8 parts, with one point given for each:
G1: Return on Assets (ROA) exceeding the industry median.
G2: Cash flow ROA exceeding the industry median.
G3: Cash flow from operations exceeding net income.
G4: Earnings variability (measured by the variance of ROA over the past five years) being less than the industry median.
G5: Sales growth variability (variance over the past five years) being less than the industry median.
G6: R&D intensity (R&D expenditure as a percentage of total assets) exceeding the industry median.
G7: Capital expenditure intensity exceeding the industry median.
G8: Advertising intensity exceeding the industry median.
Mohanram used the 2-digit SIC code as the industry. Medians were calculated using the lowest 20% of Book-to-Market stocks (including stocks with negative equity). Mohanram did not deblank the fields, but assigned 0 to the variability measures if less than three years of information was available. All firms with price and book value information were included. Returns for 1 year and 2 year holds were calculated from 1979 to 1999, with a 21% CAGR difference between HIGH and LOW G-score stocks.
G-score count pct MeanReturnY1 firm-years
ALL 994 100% 8.2% 20866
HIGH(6,7,8) 109 11% 17.4% 2290
LOW(0,1) 157 16% -4.0% 3295
HIGH-LOW 21.4%
G-score has many calculation steps, and so I separated the task into 2 parts: calculate G-scores, and then screen stocks. The gtr1 field [Gscore] is calculated uses SIP industry codes, and does not include G8.
step0 to step6: deblanking steps.
step7: Book-to-Market bottom 20%.
step8: calculate industry medians and [Gscore].
The gtr1 screen {GscoreHigh} imports the field [Gscore]
step0: Gscore = 6 or 7
(253 mkt days Holding period, 0.4% Friction)
Results from 19880302 to 19991231 (count is the average count of stocks passing the screen) are similar to Mohanram's results, with a 22% CAGR difference between HIGH and LOW Gscore stocks. (The time periods are different: Mohanram's backtest was 21 years ending in 1999, this {GscoreHigh} backtest was 12 years ending in 1999.)
Gscore count pct CAGR GSD
>=0 1215 100% 9.4 22
HIGH(6,7) 170 14% 20.0 19
LOW(0,1) 169 14% -1.9 26
HIGH-LOW 21.9
Results, with 24 years post-discovery, from 19880302 to 20241107 continue to show higher CAGR for higher Gscore:
Gscore count pct CAGR GSD
>=0 1053 100% 6.0 27
HIGH(6,7) 154 15% 13.4 22
LOW(0,1) 134 13% -4.1 32
HIGH-LOW 17.5
The screen {GscoreHigh_dv50p} uses the same [Gscore] calculation, but adds liquidity criteria to the screening stage.
import [Gscore] calculated using all stocks.
step0: no ETFs, CEFS, or LPs.
step 1 to step3: dollar volume top 50%
step 4: Gscore = 6 or 7
step 5: recent 10Q report.
step 6: no recent mergers.
(253 mkt days Holding period, 0.4% Friction)
Results from 19880302 to 20241107 continue to show higher CAGR for higher Gscore:
Gscore count pct CAGR GSD
>=0 579 100% 8.3 26
HIGH(6,7) 126 22% 12.8 22
LOW(0,1) 40 7% -3.2 32
HIGH-LOW 16.0
G-score is only calculated for the lowest 20% of Book-to-Market stocks. I calculated a new field [GAscore] that has no Book value criteria. ([GAscore] calculates industry medians using all stocks. In contrast, [Gscore] calculates industry medians using only Book-to-Market bottom 20% stocks.)
Results from 19880302 to 20241107 show higher CAGR for higher GAscore:
GAscore count pct CAGR GSD
>=0 2387 100% 10.4 23
HIGH(6,7) 427 18% 13.6 19
LOW(0,1) 183 8% 2.6 28
HIGH-LOW 10.9
links to screens:
{GscoreHigh}
https://gtr1.net/2013/?!!QlpoMTFBWSZTWX0CUwoAB7Dfg...{GscoreHigh_dv50p}
https://gtr1.net/2013/?!!QlpoMTFBWSZTWaewUKoACDXfg...{GAscoreHigh_dv50p}
https://gtr1.net/2013/?!!QlpoMTFBWSZTWSl0!2FLUAB47...{GAscoreSG}
https://gtr1.net/2013/?!!QlpoMTFBWSZTWciKjbcAB8jfg...