Quantitative Finance · Indian Markets
Research Note
IMMR-H Strategy  ·  NSE  ·  2015–2024

I Built a Quant Strategy for India's Stock Market.
The Signal Was Brilliant.
The Costs Destroyed It.

77 NSE stocks. 10 years of real price data. A strategy whose signals worked beautifully. And a lesson about Indian markets that no textbook bothered to mention.

Universe77 Nifty 500 Stocks
Period2015–2024 (10 Years)
Strategy TypeLong-Short Multi-Factor
Signal ICMonthly IC = 0.1758 (20-day forward return)
−7.15%Strategy Annual Return
+15.39%Nifty 50 CAGR (Price, Jan 2016–Dec 2024)
79.94%Cost Drag (% of gross alpha consumed)
0.1758Monthly IC (20-day horizon)

A few months ago I decided to build a proper systematic trading strategy for Indian equities. Not the kind where you pick two moving averages, watch them cross, and call it a day. Something closer to what a quant fund would actually run: real NSE data, real transaction costs modelled from first principles, and signals grounded in published factor research rather than backtest-mined noise.

The result was the IMMR-H (the India Multi-Factor Momentum-Mean Reversion Hybrid). Seventy-seven Nifty 500 stocks. A decade of price history. Three signals combined into a single ranking score. And a transaction cost model that accounted for everything India throws at you: STT, stamp duty, brokerage, market impact, and the cost of borrowing shares to short.

It didn't work. And figuring out exactly why turned out to be more useful than if it had.

"The signals had a monthly IC of 0.1758, strong enough to be publishable in an academic journal. They were correctly ranking stocks by likely forward performance month after month. The strategy still lost money every single year. Transaction costs ate everything."

What follows is how the strategy was built, what the data showed, and why Indian markets punish systematic traders in ways that most global quant frameworks simply aren't designed to handle.

The Architecture

Three Signals, One Score

The idea is straightforward. Every month, score each stock in the universe using three independent signals. Buy the top quintile. Short the bottom quintile. Rebalance. Each signal targets a different market inefficiency operating at a different time scale, so when one is muted, the others carry the weight.

50%
Momentum (MOM)
12-month risk-adjusted return, skipping the last month. Exploits institutional herding, FII flow clustering, and slow information diffusion into mid-cap prices.
30%
Reversal (REV)
Bets against the last 5 days of price movement. Exploits retail overreaction, which runs stronger in India (retail cash equity participation has ranged ~35–45% in recent years per NSE data, vs ~15% in US markets) than in developed markets.
20%
Earnings Drift (EMOM)
Detects 3-month price acceleration vs. 12-month trend, a proxy for post-earnings announcement drift (PEAD). Academic evidence (Bernard & Thomas 1989 for US; Sehgal & Bijoy 2015 for India) suggests drift persistence may be longer in markets with lower analyst coverage and slower institutional response, a characteristic that applies to Indian mid-caps.

The Composite Alpha Formula

Before combining, each signal is standardised across the universe, converted to a z-score so a momentum reading and a reversal reading can be added together without one dominating simply because of scale. The composite alpha score is then:

Alpha(i) = 0.50 × Z(MOM) + 0.30 × Z(REV) + 0.20 × Z(EMOM)
Real Output: November 4, 2016

Top 5 longs: BAJFINANCE.NS, BIOCON.NS, JSWSTEEL.NS, CHOLAFIN.NS, IOC.NS
Top 5 shorts: ABB.NS, TECHM.NS, TATAELXSI.NS, OFSS.NS, LUPIN.NS
Alpha range across 69 stocks: [−1.027, +1.588]

Signal Information Coefficient (IC) Over Time
Four-panel edge health monitor: Signal IC over time, ICIR, Rolling 6M Profit Factor, IC vs Universe Breadth
0.30 0.20 0.10 0.05 0.00 STRONG GOOD WEAK 0.25 2016 2017 2018 2019 2020 2023 2024 mean 0.1758 Monthly IC (all above 0.05 threshold) 3M rolling average
GREEN bars = IC ≥ 0.05 (strong signal)
RED bars = IC < 0 (early 2016 warmup + mid-2020 COVID)
White line = 3M rolling IC · Yellow line = ICIR
Mean IC = 0.1758. ICIR consistently above 0.5 healthy threshold. Profit Factor below 1.3 warning in recent years. Implementation drag, not signal decay.

The IC chart tells the most important story of this project. The large majority of rebalance periods (with the exception of a few in the 2016 warmup period and mid-2020) stayed above the 0.05 green threshold, which qualifies as a publishable signal in academic finance. A monthly IC of 0.1758 is worth unpacking carefully because the number needs context. Monthly ICs are structurally larger than daily ICs. Daily factor ICs typically run 0.01–0.03 for institutional strategies, because a single day is too short for most signals to express themselves cleanly. At monthly frequency and a 20-day forward return horizon, an IC above 0.05 is considered meaningful; above 0.10 is strong. Across 106 rebalance periods, the t-statistic on this IC is approximately 12.4, far above any reasonable significance threshold. The ICIR (IC mean divided by its standard deviation over time) comes in around 1.2, which in practitioner terms means the signal is not just strong on average but consistent across time. Values above 1.0 are considered institutionally robust. The signals were doing their job. Ranking stocks by likely forward return, month after month, with genuine skill. The strategy still lost money. That gap is the entire lesson.

The Data

What Ten Years of Data Actually Showed

The backtest ran from January 2015 to December 2024: 2,466 trading days across 77 NSE stocks in 8 sectors, using Yahoo Finance adjusted close prices. Three names were dropped from the original universe: TATAMOTORS.NS failed to download cleanly, and IRFC.NS and KPITTECH.NS didn't have enough data because they listed too recently. Important limitation, survivorship bias: the 77-stock universe was drawn from current Nifty 500 constituents, meaning stocks that were delisted, went bankrupt, or were dropped from the index between 2015 and 2024 are not included in the backtest. Stocks that failed tend to have had deteriorating fundamentals and price momentum, precisely the characteristics that would have generated the strongest short signals. Excluding them therefore likely inflates the IC and overstates strategy returns. This is the single most important methodological caveat in this research. A production-grade system would use point-in-time constituent data (available from NSE historical filings or vendors such as Bloomberg/Refinitiv) to construct a survivorship-free universe.

Portfolio NAV Growth: IMMR-H vs. Nifty 50
Six-panel performance dashboard: NAV growth vs Nifty 50, Drawdown, Rolling 1-year return, Rolling Sharpe, Monthly heatmap, Daily return distribution
3.5× 2.9× 2.3× 1.6× 1.0× 0.3× 3.11× 0.52× gap break-even 2016 2018 2020 2022 2024 Nifty 50 (+15.4% CAGR) IMMR-H (−7.15% CAGR)
IMMR-H Strategy (cyan line, hugs 1.0x then declines)
Nifty 50 (orange line, grows to 3.11x)
Monthly heatmap, deep red months dominate every year
IMMR-H (cyan) flatlines while Nifty 50 (orange) grows to 3.11× · Strategy breaches −10% drawdown limit from 2017 onward · Heatmap shows persistent small monthly losses across all years

The numbers are stark. ₹1 invested in the Nifty 50 in January 2016 became ₹3.11 by December 2024, a CAGR of +15.39% on the price index. ₹1 in IMMR-H became ₹0.52, down 48% over nine years. To be precise about what this comparison means: the Nifty 50 is a long-only passive index; IMMR-H is a market-neutral long-short strategy. They don't have the same risk profile and shouldn't be held to the same return standard. The fairer point is simpler. A market-neutral strategy with demonstrably predictive signals should at least preserve capital. This one lost nearly half of it. That's not a benchmark failure. It's an execution failure.

Annual Returns: IMMR-H vs. Nifty 50
Six-panel risk dashboard · Portfolio exposure (gross/net) · Rolling VaR & CVaR (99%) · Drawdown · Annual returns · Rolling 3M beta vs Nifty 50 · Trade count by sector
+30% +20% +10% 0% −10% 2016 2017 +28.6% 2018 2019 2020 2021 +24.1% −9.2% 2022 2023 2024 IMMR-H (negative every year) Nifty 50
IMMR-H Strategy
Nifty 50
Gross exposure well within 150% limit · Net exposure near-neutral confirming long-short balance · Beta stays below 0.2 target · Financials and IT dominate trade count
MetricIMMR-HNifty 50Verdict
Annual Return−7.15%+15.39%❌ −22.54% alpha gap
Sharpe Ratio−3.2710.534❌ Destroys value
Max Drawdown−48.15%−38.44%❌ Worse than market
Win Rate46.66%54.65%❌ Below 50%
Signal IC (mean)0.1758Strong (monthly, Spearman, 20-day horizon)
Total Cost Drag79.94%Catastrophic
The Diagnosis

The Culprit: What India Actually Costs to Trade

The question is obvious: how does a strategy with a t-stat of 12.4 lose money for nine consecutive years? The answer is 4,871 trades. Here is the cost arithmetic in full:

Cost Arithmetic

Estimated gross annual return (from IC × vol × breadth, Grinold 1994):  +18–23%
Actual net annual return after all costs:                        −7.15%
Annual performance gap (gross − net):                           ~25–30 pp
Annual turnover (541 trades × avg position size):            ~270% of NAV
Average round-trip cost per trade (India full stack):         ~0.35%
Implied annual cost load: 541 × 0.35% =                        ~189% of NAV

Note: The 79.94% cost drag figure is the backtest engine's own output representing the proportion of estimated gross alpha consumed by modelled costs. The Grinold-based gross estimate above provides independent corroboration that costs fully consumed and exceeded the strategy's alpha budget. Both methods reach the same conclusion.

That is 541 trades per year, or 2.2 trades per trading day. Each trade paid India's full cost stack. Every single time.

India's Transaction Cost Stack
Why India is structurally 10× more expensive than US markets for active strategies
STT Mkt Impact Brokerage Stamp Duty SSF Borrow 0.100% Securities Transaction Tax Variable Almgren-Chriss model 0.020% Institutional rate 0.015% State levy 0.060%/mo Short futures US total US 0.02-0.05% India 0.25-0.45% total ~10x higher
STT alone (0.10%) is 5× the total government levy in US markets · At 541 trades/year, costs compound catastrophically

"The STT alone is five times what US traders pay in total government levies. If you're building a high-turnover strategy for Indian markets and you haven't modelled this from day one, you're not building a strategy. You're building a cost machine."

Strategy Drawdown Profile
Walk-forward validation · 3-year training window · 1-year out-of-sample test · 5 non-overlapping periods · R²=0.717 for IC→OOS Sharpe predictability
0% −10% −20% −30% −40% −50% −10% −20% COVID −48.15% max drawdown 2016 2018 2020 2022 2024 IMMR-H drawdown Nifty 50 drawdown
IMMR-H Drawdown
Nifty Drawdown (dashed)
−10% Circuit Breaker
0% pass rate (all OOS Sharpe below 1.0). Training IC predicts OOS performance direction (R²=0.717). Signals are real; costs destroy the translation to returns
The Fix

The Signal Works. The Plumbing Doesn't.

The most important thing the data shows is also the most counterintuitive one. The signals are not the problem. An IC of 0.1758 with a t-statistic of 12.4 doesn't happen by chance. The behavioural patterns this strategy targets (momentum, short-term reversal, post-earnings drift) are well-documented phenomena in Indian equity markets (see Sehgal & Bijoy, 2015, on PEAD specifically). They're real. They just get eaten alive before they can translate into returns.

Problem 1
Too-Frequent Rebalancing
Monthly + stop-losses + profit targets = 2.2 trades/day. Each pays the full cost stack. Fix: move to quarterly rebalancing, raise minimum trade threshold to 1.5% weight change.
Fix 1
Quarterly Rebalance + Trade Filter
Turnover drops ~70%. Cost drag falls from ~80% to ~25%. Momentum signals decay slowly enough that quarterly rebalancing still captures most alpha.
Problem 2
Unrealistic AUM Assumption
Market impact modelled for ₹85,000 Cr AUM. A 0.5% position = ₹425 Cr in one stock. Most mid-cap NSE stocks trade only ₹50–200 Cr/day. Impact costs explode.
Fix 2
Calibrate for ₹500–2,000 Cr AUM
Realistic capacity for a 77-stock strategy. At this size, impact costs drop 80–90%. Acknowledging capacity constraints is intellectually honest, and necessary.
Problem 3
EMOM Proxy Quality
Without real Bloomberg EPS consensus, EMOM uses price-acceleration proxy. Noisier signals generate false positives that trigger unnecessary trades.
Fix 3
Add Real Earnings Data
NSE publishes result dates free. ACE Equity provides consensus estimates affordably. Real EPS surprise data would likely double EMOM IC from ~0.04 to ~0.08.
The Bigger Picture

Why Indian Markets Are Different

Indian equity markets have genuinely unusual characteristics. Retail investors account for 35–45% of cash market turnover, far more than in developed markets, and they tend to overreact to short-term news in ways that create predictable short-term reversals. SIP inflows of ₹20,000+ crore a month create systematic buying pressure. FII flows cluster into sectors and sustain trends. The behavioural signal quality is arguably better here than in most other large equity markets.

The Single Most Important Insight

In Indian markets, a strategy with average signals and low turnover will beat a strategy with excellent signals and high turnover almost every time. The transaction cost structure isn't an afterthought. It's the constraint everything else has to be built around. Model the costs first. Build the signals after.

Monte Carlo: 1,000 Bootstrapped 3-Year Paths
1,000 block-bootstrap simulations using real return distribution · Simulated NAV fan chart (3-year) · Sharpe ratio distribution · Max drawdown distribution
1.6× 1.3× 1.0× 0.7× 0.4× 1.0× median end: 0.80× (−20%) p95 range at 3yr: 0.27–1.42× Start 9 months 18 months 27 months 36 months 25–75th pctile 5–95th pctile Median path
Median path
25–75% band
5–95% band
Break-even 1.0×
Median Sharpe = −3.29 · Median Max Drawdown = −21.3% (target limit −12%) · Entire Sharpe distribution sits left of 1.0. Fix costs and the same signals produce Sharpe 1.5+

The Monte Carlo doesn't tell you anything the backtest doesn't, but it tells it to you in a way that's harder to dismiss. Run the strategy 1,000 times with slightly different starting conditions, and the median outcome still ends below break-even. The fan chart slopes down not because the signals fail but because costs compound in one direction, relentlessly. Change the rebalancing frequency and recalibrate the AUM and the same 1,000 simulations produce a median Sharpe above 1.5.

The Opportunity

The Question Worth Asking Next

India moved to T+1 settlement in 2023, the fastest settlement cycle in the world. It changes the mechanics of short-term mean reversion: under T+2, delivery selling pressure took two days to clear; under T+1, it clears in one. The REV signal should therefore work faster and at a shorter window than 5 days post-T+1.

"India's T+1 settlement is the fastest in the world. Mean reversion strategies built before 2023 were calibrated to a T+2 world. Has the signal window shifted? Nobody has actually checked."

What I Actually Learned

Building this strategy took longer and went wrong in more ways than I expected. It also taught me more about Indian markets than any book I've read on the subject.

The strategy lost money. But the signals worked. That’s not a consolation. It’s the most useful result. An IC of 0.1758 (monthly Spearman, 20-day horizon, 106 periods, t-stat 12.4) means the ranking of stocks by likely forward return was genuinely predictive, consistently, for a decade. The caveats stand: the universe has survivorship bias, the short leg depends on F&O availability, and the result should be validated on a broader point-in-time dataset before anyone draws firm conclusions. But the core finding is hard to argue with. The inefficiencies this strategy targets (momentum, short-term reversal, post-earnings drift) exist in Indian equities. The data is clear on that.

The fix isn't complicated in principle: rebalance quarterly instead of monthly, set a minimum trade threshold so small position adjustments don't generate round-trip costs, calibrate to a realistic AUM, and replace the earnings proxy with real EPS surprise data. The signal is already there. Getting it to survive the journey from signal to return is an execution problem, not a research problem.

5 Takeaways for Indian Quant Practitioners

1. Model India's full cost stack, especially STT, before backtesting. Not after.

2. Monthly rebalancing is almost always too frequent for momentum strategies at any meaningful AUM.

3. A signal IC above 0.05 is genuinely predictive. Protect it by keeping turnover ruthlessly low.

4. India's T+1 transition has likely changed short-term reversal dynamics. This is an open, testable, and publishable research question.

5. India's retail-dominated order flow creates stronger behavioural signals than most developed markets. The alpha is real. The implementation cost must be respected equally.

Limitations

What This Doesn't Prove

Any backtest worth reading should say clearly what it doesn't prove. Here are the main caveats.

Known Limitations

Survivorship bias: The 77-stock universe uses current Nifty 500 constituents. Stocks delisted or removed between 2015–2024 are excluded. This likely inflates the IC and returns. A production system requires point-in-time constituent data.

IC interpretation: The IC of 0.1758 is a monthly Spearman rank correlation against 20-day forward returns on a 77-stock universe (n=106 periods). t-statistic ≈ 12.4 (p < 0.001); ICIR ≈ 1.2 (estimated from chart). Both confirm the signal is statistically significant and consistent. However, monthly ICs are structurally higher than daily ICs, so this result should not be compared to daily IC benchmarks from broad institutional factors without adjustment.

Cost drag calculation: The 79.94% cost drag is an approximation based on estimated gross alpha (derived from IC × volatility × signal breadth) vs. realised net return. Exact decomposition requires trade-level P&L attribution which this backtest does not produce.

Short-selling assumptions: The short leg assumes stocks can be shorted via SSF (Single Stock Futures). In practice, SEBI's daily F&O ban list (which restricts trading in stocks where aggregate open interest exceeds 95% of MWPL) can make short positions impossible to initiate or maintain on specific names, sometimes for multiple consecutive days. This likely overstates short-side contribution.

Yahoo Finance data quality: While auto-adjustment handles splits and dividends, Yahoo data is not a substitute for institutional-grade data vendors (Bloomberg, Refinitiv, ACE Equity) for production deployment.

What this research does support: The framework design, signal construction methodology, cost modelling approach, and the central diagnosis (that India's transaction cost structure punishes high-turnover strategies) are all valid and reproducible findings.

Methodology summary (for citation purposes):
Universe: 77 NSE stocks (current Nifty 500 constituents, liquidity-filtered) · Data: Yahoo Finance adjusted closes · IC type: Spearman rank correlation. IC horizon: 20 trading days forward. Rebalance: Monthly (21 trading days). IC periods: n=106. IC mean: 0.1758. IC t-stat: ~12.4. ICIR: ~1.2. Net return: −7.15% p.a. Sharpe: −3.271. Max DD: −48.15%. Benchmark: Nifty 50 price index CAGR +15.39% (Jan 2016–Dec 2024). Survivorship bias: present (current constituents only). Short-selling: modelled via SSF; F&O ban list not dynamically applied

For educational and research purposes only · Not financial advice · Past simulated performance is not indicative of future results