Earnings Growth Consistency on Indian Stocks (NSE): 25-Year Backtest
Screened NSE for 3-year net income growth streaks, ROE > 8%, D/E < 2.0. Result: 10.06% CAGR vs 12.06% Sensex (-1.99%). Strong absolute returns but underperforms local benchmark. 2009: +48.9% excess, 2014: +47.4% excess. 7 cash years (2000-2006), 18 invested years.
Earnings Growth Consistency on Indian Stocks (BSE + NSE): 25-Year Backtest
India delivers strong absolute returns — 10.06% CAGR — but doesn't beat the local Sensex benchmark, which returned 12.06% over the same period. -1.99% underperformance per year vs the Sensex. This is the honest result when comparing Indian equity returns to the Indian market, not to a USD benchmark like SPY.
Contents
- Method
- The Signal
- The Screen (SQL)
- What We Found
- Strong absolute returns but underperforms the Sensex.
- Annual returns (July-to-July)
- 2007: First invested year shows underperformance
- 2008-2009: Strong absolute returns but mixed vs Sensex
- 2014: The Modi election year
- 2018: The worst year
- Why India Doesn't Beat the Sensex
- Backtest Methodology
- Limitations
- Takeaway
- Part of a Series
Two important caveats before going further. First: the first seven years of the backtest (2000-2006) show no invested periods. NSE data coverage in FMP for that era is insufficient to run the screen. The reported CAGR reflects 18 invested years (2007-2024), not 25. Second: this backtest uses NSE only (not BSE+NSE as in prior studies) to avoid dual-listing bias.
With those caveats stated: the 2007-2024 results are clean. India's equity market was in a secular bull market over this period, and the Sensex outperformed. The earnings consistency filter delivers 10.06% absolute, but the broad market delivered more.
Data: FMP financial data warehouse, 2000–2025. Updated March 2026.
Method
Universe: NSE-listed stocks with market cap > ₹5B, actively trading Period: July 2000 to July 2025 (25 annual periods; 7 uninvested due to data coverage, 18 invested) Rebalancing: Annual, each July. Top 30 by ROE, equal weight. Benchmark: Sensex (BSE Sensex index, INR) Execution: Next-day close (MOC) Cash rule: Hold cash if fewer than 10 stocks qualify. Data: Ceta Research (FMP financial data warehouse, 45-day point-in-time lag)
The Signal
Earnings streak: Net income grew year-over-year in each of the last three fiscal years. Four data points required. All must be positive.
ROE > 8%: Filters for capital efficiency. India has a large number of profitable micro-caps; the ROE screen combined with the MCap threshold keeps the portfolio in investable quality businesses.
D/E < 2.0: Screens out financially distressed or excessively leveraged issuers. Indian infrastructure and public sector enterprises often carry high debt; this filter removes them.
Portfolio: top 30 by ROE descending, equal weight.
The Screen (SQL)
WITH
fy_income AS (
SELECT symbol, netIncome, dateEpoch,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
FROM income_statement
WHERE period = 'FY'
AND netIncome IS NOT NULL
AND symbol IN (SELECT DISTINCT symbol FROM profile WHERE exchange IN ('NSE'))
),
streak AS (
SELECT y1.symbol
FROM fy_income y1
JOIN fy_income y2 ON y1.symbol = y2.symbol AND y2.rn = 2
JOIN fy_income y3 ON y1.symbol = y3.symbol AND y3.rn = 3
JOIN fy_income y4 ON y1.symbol = y4.symbol AND y4.rn = 4
WHERE y1.rn = 1
AND y1.netIncome > y2.netIncome
AND y2.netIncome > y3.netIncome
AND y3.netIncome > y4.netIncome
AND y4.netIncome > 0
)
SELECT
s.symbol,
p.companyName,
p.sector,
ROUND(k.returnOnEquityTTM * 100, 1) AS roe_pct,
ROUND(f.debtToEquityRatioTTM, 2) AS debt_to_equity,
ROUND(k.marketCap / 1e9, 2) AS market_cap_b
FROM streak s
JOIN key_metrics_ttm k ON s.symbol = k.symbol
JOIN financial_ratios_ttm f ON s.symbol = f.symbol
JOIN profile p ON s.symbol = p.symbol
WHERE k.returnOnEquityTTM > 0.08
AND f.debtToEquityRatioTTM >= 0
AND f.debtToEquityRatioTTM < 2.0
AND k.marketCap > 5000000000
AND p.exchange IN ('NSE')
ORDER BY k.returnOnEquityTTM DESC
LIMIT 30
Run this query on Ceta Research
What We Found

Strong absolute returns but underperforms the Sensex.
| Metric | Earnings Consistency | Sensex |
|---|---|---|
| CAGR | 10.06% | 12.06% |
| Excess CAGR | -1.99% | - |
| Sharpe Ratio | 0.152 | - |
| Max Drawdown | -18.4% | - |
| Down Capture | 24.3% | 100% |
| Win Rate (annual vs Sensex) | 52% | - |
| Avg Stocks when invested | 25.2 | - |
| Cash Periods | 7 of 25 (2000-2006) | - |
The strategy's 10.06% CAGR is solid. But India's broad equity market, as measured by the Sensex, delivered 12.06% over the same period. The earnings consistency filter doesn't beat the market in India — it underperforms by 2% per year. This is the opposite of what we see in Anglo-Saxon markets, where the same filter beats local benchmarks.
Annual returns (July-to-July)

| Year | Portfolio | Sensex | Excess | Note |
|---|---|---|---|---|
| 2000 | 0.0% | -29.3% | +29.3% | Cash (data coverage) |
| 2001 | 0.0% | -4.1% | +4.1% | Cash (data coverage) |
| 2002 | 0.0% | +9.6% | -9.6% | Cash (data coverage) |
| 2003 | 0.0% | +35.2% | -35.2% | Cash (data coverage) |
| 2004 | 0.0% | +49.4% | -49.4% | Cash (data coverage) |
| 2005 | 0.0% | +47.0% | -47.0% | Cash (data coverage) |
| 2006 | 0.0% | +37.1% | -37.1% | Cash (data coverage) |
| 2007 | -11.3% | -6.8% | -4.5% | First invested year |
| 2008 | +6.5% | +7.3% | -0.7% | Both positive in this July-July period |
| 2009 | +68.0% | +19.1% | +48.9% | Strong recovery year |
| 2010 | +14.5% | +7.8% | +6.7% | |
| 2011 | -6.3% | -7.5% | +1.3% | |
| 2012 | +9.7% | +11.9% | -2.1% | |
| 2013 | +41.9% | +32.8% | +9.1% | |
| 2014 | +55.5% | +8.1% | +47.4% | Modi election rally |
| 2015 | -0.2% | -2.4% | +2.1% | |
| 2016 | +21.5% | +14.4% | +7.1% | |
| 2017 | +8.0% | +12.9% | -5.0% | |
| 2018 | -15.7% | +12.9% | -28.6% | Worst miss |
| 2019 | +3.2% | -10.0% | +13.2% | |
| 2020 | +62.5% | +46.4% | +16.1% | COVID recovery |
| 2021 | -18.4% | +1.4% | -19.8% | |
| 2022 | +22.1% | +22.5% | -0.4% | |
| 2023 | +37.0% | +21.8% | +15.2% | |
| 2024 | +5.4% | +5.0% | +0.4% |
2007: First invested year shows underperformance
2007: portfolio -11.3% vs Sensex -6.8% (-4.5% excess). The first year the strategy had enough NSE data to invest immediately showed the filter underperforming the broad market.
2008-2009: Strong absolute returns but mixed vs Sensex
2008 (July 2008 to July 2009): portfolio +6.5% vs Sensex +7.3%. Both positive. This period includes the Oct 2008 crash and the early 2009 recovery. By July 2009, both the earnings portfolio and the Sensex had recovered to slightly positive for the 12-month period. The portfolio barely underperformed (-0.7%).
2009: +68.0% vs Sensex +19.1% (+48.9% excess). India's recovery year. Companies that had grown earnings consistently entered 2009 with intact balance sheets and accelerated as domestic demand surged and global risk-on flows returned to emerging markets. This is the single best excess year in the India study vs the Sensex.
The 2009 year is the defining positive data point. No other year shows +48.9% excess vs the local benchmark.
2014: The Modi election year
+55.5% in 2014 vs Sensex +8.1% (+47.4% excess). This was the year Narendra Modi's BJP won a decisive parliamentary majority. Indian equity markets surged. The earnings consistency portfolio participated fully — the +55.5% absolute return is the second-best year in the study. And vs the Sensex, +47.4% excess is the second-best relative year after 2009.
This is a real result. But it's also a concentration of political risk. A single election outcome created +47% excess in one year.
2018: The worst year
2018: -15.7% vs Sensex +12.9% (-28.6% excess). The single worst miss in the India study. India's equity market suffered from rising US interest rates (which pulled capital from emerging markets), rupee depreciation, and IL&FS Infrastructure's debt crisis. The Sensex still gained +12.9%. The earnings consistency portfolio fell -15.7%. A 28-point gap.
Why India Doesn't Beat the Sensex
The earnings consistency signal delivers 10.06% CAGR but underperforms the Sensex by -1.99% per year. Three structural reasons explain this:
- India's broad bull market. The Sensex itself returned 12.06% per year from 2007-2024 (the invested period). India's equity market as a whole was in a secular bull driven by domestic growth, foreign inflows, and corporate earnings expansion. A quality filter that narrows the universe to consistent earners missed some of the highest-growth companies.
- Growth beats quality in India. Indian markets reward growth more than defensive quality. The Sensex includes high-growth financials, energy, and technology companies whose earnings are lumpy but whose returns are driven by multiple expansion. The earnings consistency filter excludes these companies and selects steady earners — IT services, pharma, FMCG. Those sectors underperformed India's growth sectors over the period.
- High-volatility years favor the Sensex. India's 2004-2006 bull run (cash years for this portfolio but huge for the Sensex), 2018 NBFC resilience (+12.9% Sensex vs -15.7% portfolio), and 2021-2022 recovery all show the Sensex participating in high-amplitude moves that the quality filter missed.
The caveat: the Sharpe of 0.152 is low. The strategy's returns are volatile, and the Sensex's returns were both higher and more consistent over this period. India is the one major market where the earnings consistency filter doesn't add value vs the local benchmark.
Backtest Methodology
| Parameter | Choice |
|---|---|
| Universe | NSE, Market Cap > ₹5B |
| Signal | 3-year net income growth streak, ROE > 8%, D/E < 2.0 |
| Portfolio | Top 30 by ROE, equal weight |
| Rebalancing | Annual (July) |
| Execution | Next-day close (MOC) |
| Cash rule | Hold cash if < 10 qualify |
| Benchmark | Sensex (BSE Sensex index, INR) |
| Period | 2000-2025 (7 cash years: 2000-2006, 18 invested years: 2007-2024) |
| Data lag | Point-in-time, 45-day lag |
Limitations
7 cash periods (2000-2006). The CAGR of 10.06% is computed over all 25 annual periods, but the portfolio was invested in only 18 of them. The 2000-2006 cash years missed India's early bull run (Sensex returned +49.4% in 2004 alone, +47.0% in 2005). This understates the strategy's underperformance vs the Sensex over the full market cycle.
NSE only, not BSE+NSE. This backtest uses NSE-listed stocks only, not both exchanges. BSE was excluded to avoid dual-listing bias (38% of stocks trade on both exchanges). Prior studies used BSE+NSE and showed different results.
Political event concentration. The 2014 +55.5% year reflects the Modi election rally. That single year contributes meaningfully to the multi-year CAGR but is inseparable from political timing.
Emerging market volatility. The Sharpe of 0.152 is low. India's return stream has high standard deviation, and the Sensex delivered better risk-adjusted returns. High absolute return, yes. Risk-adjusted alpha, no.
Takeaway
India's earnings consistency portfolio delivers strong absolute returns (10.06% CAGR) but underperforms the Sensex by -1.99% per year. The strategy doesn't beat the local market. This is the opposite of what we see in Anglo-Saxon markets, where the same filter generates clear alpha.
The defining years tell the story clearly: - Wins: 2009 (+48.9% excess), 2014 (+47.4% excess), 2020 (+16.1%), 2023 (+15.2%) - Losses: 2018 (-28.6% excess), 2021 (-19.8%), 2007 (-4.5%)
The wins are large and infrequent. The losses are equally large. Over 18 invested years, the Sensex delivered higher and more consistent returns.
The earnings consistency filter doesn't work in India the way it works in the US, UK, or Canada. India's broad market rewards growth over quality, and the Sensex — which includes high-growth companies with episodic earnings — outperformed a quality-filtered subset.
Part of a Series
- Earnings Growth Consistency: US Results — 11.61% CAGR, flagship study
- Earnings Growth Consistency: Canada Results — best Sharpe globally
- Earnings Growth Consistency: UK Results — best max drawdown globally
- Earnings Growth Consistency: Germany Results — European result
- Earnings Growth Consistency: Global Comparison — 17 exchanges
Data: Ceta Research, FMP financial data warehouse. Universe: NSE. Annual rebalance (July), equal weight (top 30 by ROE), 2000-2025. Benchmark: Sensex (INR). Note: 7 cash periods in 2000-2006 due to data coverage; invested periods are 2007-2024.