12-Month Momentum on Indian Stocks: 22.74% CAGR Over 25 Years

Growth of $1 invested in 12-Month Price Momentum India vs S&P 500 from 2001 to 2025.

Pure price momentum is supposed to work in emerging markets. India confirms the theory. Buying the top 30 Indian stocks by 12-month trailing return, semi-annually, delivered 22.74% annually from 2001 to 2025. That's +15% per year over the S&P 500 benchmark, one of the largest factor premiums documented in this study. What makes India different is how it performs in downturns: down capture was 43.55%, meaning the portfolio fell less than half as much as SPY in bad markets.

Contents

  1. Method
  2. What We Found
  3. Backtest Methodology
  4. Limitations
  5. Takeaway
  6. Part of a Series
  7. References
  8. Run This Screen Yourself

Method

Parameter Value
Universe BSE, NSE (combined)
Rebalancing Semi-annual (January, July)
Signal 12-month return, skip last month (12M-1M)
Selection Top 30 by momentum, equal weight
Cash rule Fewer than 10 qualifying stocks
Data source FMP via Ceta Research warehouse
Benchmark S&P 500 (SPY)
Period 2001–2025
Market cap filter > ₹20B (~$240M USD, point-in-time, 45-day lag)

India started with 0% invested in 2001 and 2002 due to insufficient qualifying stocks, the combination of market cap threshold and momentum data requirements excluded the full universe in those early periods. The live backtest ran from the first period with 10+ qualifying stocks.


What We Found

25-year summary (2001–2025):

Metric 12M Momentum S&P 500 (SPY)
CAGR 22.74% 7.75%
Total Return 18,494.6% 570.3%
Sharpe Ratio 0.450 0.382
Max Drawdown -69.75% -36.65%
Down Capture 43.55% 100%
Up Capture 215.95% 100%
Cash Periods 7 of 51 (14%)

The total return difference is striking. $1 invested in the strategy in 2001 became $185.9 by 2025. The same dollar in SPY became $6.70. The 18,494% vs 570% comparison illustrates what compounding 15% annual excess return does over 25 years.

The down capture of 43.55% is the surprising part. In years when SPY fell, this portfolio typically fell far less. Momentum in Indian equities has, historically, been concentrated in domestic consumer, financial, and infrastructure sectors that are less correlated with global risk-off episodes than the SPY.

The 2008 exception. Momentum couldn't protect against the global financial crisis. The strategy fell -69.8% in 2008 vs SPY's -34.3%, the worst single-year performance in the dataset. This is also the only year where down capture was severely above 100%. Indian equities were caught in the same forced-selling wave as global risk assets. The subsequent recovery was fast: +68.2% in 2009.

Year-by-year standouts:

Year 12M Momentum SPY Notes
2003 +85.6% +24.1% Post-bear market surge
2005 +95.7% +7.2% India structural growth peak
2007 +68.1% +4.4% Pre-crisis momentum
2008 -69.8% -34.3% Global crisis — worst year
2009 +68.2% +24.7% Fast recovery
2017 +78.4% +21.6% Domestic consumption boom
2021 +68.0% +31.3% Post-COVID recovery
2022 +14.3% -19.0% Best relative year — protected
2023 +83.2% +26.0% Infrastructure/domestic rally

2022 is the clearest demonstration of the down capture story. While SPY fell 19%, the India momentum portfolio gained 14.3%. The portfolio was concentrated in domestic-facing Indian sectors that were insulated from the global rate shock and Fed tightening that hurt US equities. The 34-point outperformance in a single year is real.

2022 vs 2008. These two crisis years tell different stories. In 2008, India had significant global exposure in IT and financial sectors with foreign institutional ownership, forced selling hit them. In 2022, the portfolio was concentrated in domestic sectors with limited global correlation. Momentum adapts to what's working. In 2022, domestic India was working.

The bull market magnification. Up capture of 215.95% means the portfolio amplified Indian bull markets. The years 2003, 2005, 2007, 2017, and 2023 all show the strategy running at 2-4x the magnitude of SPY. Indian equity bull markets have been concentrated in specific sectors, and momentum captures that concentration.


Backtest Methodology

  • Data: FMP financial data via Ceta Research warehouse. Price data from stock_eod (adjusted closes).
  • Point-in-time: Market cap filter uses annual key_metrics filings with 45-day lag. No look-ahead bias. Indian filings typically arrive April-May for fiscal year ending March.
  • Signal: Price at T-12M to T-1M. The 1-month skip avoids short-term reversal contamination.
  • Data quality: Stocks with adjusted close < $1 at either lookback date excluded. Momentum capped at 500% per stock.
  • Cash periods: 14% of semi-annual periods had fewer than 10 qualifying stocks. These periods contribute 0% return (no positions taken). This applies to early data periods when FMP coverage of Indian markets was thinner.
  • Equal weight: 30 positions when invested. No intraperiod rebalancing.
  • Transaction costs: Modeled as size-tiered. Indian liquidity is lower than US, so costs are higher in the model.
  • Benchmark: SPY ETF total return. Note: SPY measures USD returns. India momentum CAGR is in USD terms (INR exposure). Currency effects are embedded in the return.

Limitations

Currency risk is embedded. Returns are in USD terms. A weakening INR reduces the USD CAGR. From 2001 to 2025, the INR depreciated roughly 50% against the USD. The local-currency returns are higher than the USD figures shown. This means real Indian investors capturing this strategy would see higher numbers in rupee terms.

2008 shows the tail risk. A -69.75% max drawdown is severe. The fast recovery is historically documented, but a drawdown that large requires patience most investors don't have.

14% cash periods in early data. Coverage of Indian markets in FMP's database is thinner before 2004. The strategy was in cash for several early periods. This partially explains the outsized early-year returns, the portfolio was concentrated in only the highest-quality momentum names when it did invest.

Emerging market structural risks. FPI limits, SEBI regulatory changes, and market access restrictions are real ongoing factors that can change the investability of this strategy. The historical backtest doesn't account for these.

No transaction costs in emerging market context. The model uses size-tiered costs, but Indian mid-cap liquidity can be thin. Actual execution costs for a large position would be higher than modeled.


Takeaway

12-month momentum on Indian stocks delivered 22.74% CAGR from 2001 to 2025. The +15% excess over SPY compounds to transformational differences in terminal wealth. The 43.55% down capture is unusual for a strategy this aggressive, it means India momentum has historically been a high-return, lower-downside combination.

The explanation likely involves market structure. Indian equities are driven by domestic growth cycles, consumer expansion, and infrastructure investment. Momentum in this environment captures real economic trends that persist for 6-12 months. The market is also less saturated with systematic momentum traders compared to US equities.

The 2008 risk remains the main caution. Any globally correlated crash will hit India momentum hard. But the evidence from 2022, 2011, and other non-global-crisis downturns suggests the strategy has genuine downside protection in the scenarios that matter most.

Part of a Series

This is part of a multi-exchange 12-month momentum study:

References

  • Jegadeesh, N. & Titman, S. (1993). Returns to Buying Winners and Selling Losers. Journal of Finance, 48(1), 65-91.
  • Asness, C., Moskowitz, T. & Pedersen, L. (2013). Value and Momentum Everywhere. Journal of Finance.
  • Daniel, K. & Moskowitz, T. (2016). Momentum Crashes. Journal of Financial Economics.

Run This Screen Yourself

The current 12-month momentum screen for Indian stocks is live on Ceta Research:

cetaresearch.com/data-explorer?q=TDZ3OQ5hBA

-- 12-Month Momentum India Screen
-- Live at: cetaresearch.com/data-explorer?q=TDZ3OQ5hBA
WITH universe AS (
 SELECT p.symbol, p.companyName, p.exchange, k.marketCap / 1e9 AS market_cap_billions
 FROM profile p JOIN key_metrics_ttm k ON p.symbol = k.symbol
 WHERE k.marketCap > 20000000000 AND p.isActivelyTrading = true
 AND p.exchange IN ('BSE', 'NSE')
),
price_12m_ago AS (
 SELECT symbol, adjClose AS price_12m,
 ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY ABS(CAST(dateEpoch AS BIGINT) -
 CAST(EXTRACT(EPOCH FROM (CURRENT_DATE - INTERVAL '365' DAY))::BIGINT AS BIGINT))) AS rn
 FROM stock_eod
 WHERE CAST(date AS DATE) BETWEEN CURRENT_DATE - INTERVAL '395' DAY
 AND CURRENT_DATE - INTERVAL '335' DAY
 AND adjClose > 0
),
price_1m_ago AS (
 SELECT symbol, adjClose AS price_1m,
 ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY ABS(CAST(dateEpoch AS BIGINT) -
 CAST(EXTRACT(EPOCH FROM (CURRENT_DATE - INTERVAL '30' DAY))::BIGINT AS BIGINT))) AS rn
 FROM stock_eod
 WHERE CAST(date AS DATE) BETWEEN CURRENT_DATE - INTERVAL '45' DAY
 AND CURRENT_DATE - INTERVAL '15' DAY
 AND adjClose > 0
)
SELECT u.symbol, u.companyName, u.exchange,
 ROUND(u.market_cap_billions, 2) AS market_cap_billions,
 ROUND((p1m.price_1m - p12.price_12m) / p12.price_12m * 100, 1) AS return_12m_1m_pct
FROM universe u
JOIN price_12m_ago p12 ON u.symbol = p12.symbol AND p12.rn = 1
JOIN price_1m_ago p1m ON u.symbol = p1m.symbol AND p1m.rn = 1
WHERE p12.price_12m > 1.0 AND p1m.price_1m > 1.0
 AND (p1m.price_1m - p12.price_12m) / p12.price_12m <= 5.0
ORDER BY return_12m_1m_pct DESC NULLS LAST
LIMIT 30;

Read more