Nifty 50 Value-Momentum-Size Long-Short Strategy
Overview
Multi-factor investing asks whether observable stock characteristics — cheapness, past performance, and scale — help explain and predict returns beyond a single market beta. This project runs that workflow on Indian large caps: the Nifty 50 universe on the NSE, with prices and fundamentals from Yahoo Finance (*.NS tickers).
The pipeline mirrors a standard quant workflow (factor construction → Fama–MacBeth → IC/IR → long–short backtest), applied to up to fifty Nifty constituents that pass a minimum history filter.
With a broader cross-section, factor ICs and information ratios become more meaningful than in a four-stock demo, and the long–short book holds the top and bottom 20% of names each month (10 long / 10 short when 50 stocks qualify) rather than a fixed pair on each side.
Universe and data
Constituents are listed in nifty50_universe.json (NSE symbols with .NS suffix for yfinance). Daily adjusted closes are downloaded from 2015 onward, resampled to month-end prices, and filtered to names with at least five years of monthly history so 12–1 momentum is well defined.
Value uses trailing earnings yield from Yahoo fundamentals. Size uses each month when share count is available, otherwise log market cap. Momentum is 12–1: . Fundamentals are cached for 24 hours to limit API load.
Methodology
Fama–MacBeth regressions — Each month, a cross-sectional OLS regresses next-month stock returns on Value, Momentum, and Size exposures. The sequence of monthly coefficients estimates factor premia over time; t-statistics accompany each estimate.
Information Coefficient (IC) — For each factor and month, IC is the correlation between the factor score and the subsequent month’s return. Information Ratio (IR) is mean IC divided by the standard deviation of IC, summarising consistency of predictive power.
Long–short portfolio — Predicted return combines lagged Fama–MacBeth betas (prior month, no same-month look-ahead) with current factor scores. Each month the strategy goes long the top 20% and short the bottom 20%, equal-weight within each leg, dollar-neutral (50% long / 50% short notional).
Frictions — Brokerage and slippage applied to estimated one-way turnover; STT on sell legs; monthly short-stock borrow fee; excess returns vs a constant risk-free proxy; cross-sectional winsorisation and ±35% monthly return caps on single names.
Performance — Gross and net (after frictions) cumulative return, Sharpe, drawdown, hit rate, average turnover, and cumulative cost drag.
How to interpret the results
With roughly fifty Nifty names, cross-sectional regressions and IC series are far more stable than in a four-stock US demo. IR magnitudes and signs should be read as descriptive, not as guaranteed live alpha.
The long–short cumulative curve reflects Indian large-cap factor premia and regime shifts (e.g. COVID, rate cycles). Compare summary metrics and drawdowns across refresh dates when yfinance data updates.
Use the Fama–MacBeth and IC time-series panels to see when factor premia or predictive correlations shift. The latest cross-section table shows current factor scores used for ranking.
What you will see in the results
Summary metrics — Cumulative return, annualised Sharpe, and maximum drawdown for the long–short strategy.
Performance charts — Cumulative return and drawdown paths, plus monthly long–short returns.
Factor diagnostics — Information ratios and monthly IC series for Momentum, Size, and Value.
Fama–MacBeth premia — Time series of monthly cross-sectional coefficients and t-statistics.
Friction breakdown — Monthly trading and borrow cost drag stacked by rebalance.
Cross-section snapshot — Latest factor exposures by ticker.
| Universe | Nifty 50 · 49 stocks · NSE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Study period | 2015-01-31 → 2026-06-30 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Portfolio rule | Long 10 / Short 10 · β lag 1m | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Data source | yfinance (NSE .NS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Data as of | 2026-06-30 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Constituents |
|
| Commission (one-way) | 12 bps + GST |
| Slippage (one-way) | 8 bps |
| STT on sells | 10 bps |
| Short borrow (annual) | 8.00% |
| Risk-free (annual proxy) | 6.50% |
| Avg monthly turnover | 74.10% |
| Metric | Gross | Net |
|---|---|---|
| Cumulative | -8.80% | -63.50% |
| Sharpe | -0.07 | -1.16 |
| Max DD | -19.20% | -62.60% |
| Hit rate | 47.60% | 34.70% |
| Ann. vol | 8.20% | 8.10% |
Cumulative friction drag (trading + borrow): 91.20%
| Factor | IR |
|---|---|
| Momentum | 0.075 |
| Size | -0.407 |
| Value | -0.095 |
| Ticker | Value (z) | Momentum (z) | Size (z) |
|---|---|---|---|
| ADANIENT | -0.6270 | -0.5020 | 0.1340 |
| ADANIPORTS | -0.3890 | 0.5770 | 0.4150 |
| APOLLOHOSP | -0.9040 | 0.3180 | -1.3890 |
| ASIANPAINT | -0.8610 | 0.2180 | -0.3000 |
| AXISBANK | 0.4940 | 0.0660 | 0.4690 |
| BAJAJ-AUTO | -0.1730 | 0.7250 | -0.0540 |
| BAJAJFINSV | -0.3310 | -0.9710 | -0.0330 |
| BAJFINANCE | -0.4400 | -0.1650 | 1.0350 |
| BEL | -0.7660 | 0.4020 | 0.1430 |
| BHARTIARTL | -0.6480 | -0.1420 | 2.0560 |
| BPCL | 3.8070 | -0.2450 | -1.1620 |
| BRITANNIA | -0.7530 | 0.0030 | -1.0580 |
| CIPLA | -0.3820 | -0.7800 | -1.4560 |
| COALINDIA | 2.0290 | 1.2820 | 0.0550 |
| DRREDDY | -0.2500 | 0.0620 | -1.3840 |
| EICHERMOT | -0.5610 | 1.5590 | -0.5540 |
| GRASIM | -0.6590 | 0.2600 | -0.5960 |
| HCLTECH | 0.2960 | -1.5080 | 0.1850 |
| HDFCBANK | 0.3110 | -1.2970 | 2.0470 |
| HDFCLIFE | -0.9170 | -1.5410 | -1.1770 |
| HEROMOTOCO | 0.4160 | 0.9030 | -1.4950 |
| HINDALCO | 0.5030 | 1.5590 | -0.3020 |
| HINDUNILVR | -0.7410 | -0.3970 | 0.8800 |
| INDUSINDBK | -0.9980 | 0.3620 | -1.7660 |
| INFY | 0.8300 | -1.4880 | 0.7180 |
| ITC | 0.3300 | -1.4810 | 0.4300 |
| JSWSTEEL | 0.8480 | 1.1730 | 0.1120 |
| KOTAKBANK | 0.0990 | -0.6660 | 0.4190 |
| LT | -0.5300 | 0.2630 | 0.9430 |
| M&M | 0.1030 | -0.0170 | 0.3830 |
| MARUTI | -0.3260 | 0.2110 | 0.5550 |
| NESTLEIND | -0.9800 | 0.9270 | -0.0230 |
| NTPC | 1.1920 | 0.9150 | 0.4410 |
| ONGC | 2.8480 | 1.3970 | 0.4020 |
| POWERGRID | 0.7340 | 0.4320 | 0.0520 |
| RELIANCE | 0.0050 | -0.2150 | 2.4290 |
| SBILIFE | -0.9510 | -0.2460 | -0.6510 |
| SBIN | 1.2670 | 1.3780 | 1.7730 |
| SHRIRAMFIN | 0.1750 | 1.5590 | -0.3760 |
| SUNPHARMA | -0.6060 | 0.1900 | 0.6070 |
| TATACONSUM | -0.9510 | -0.0910 | -1.3560 |
| TMPV | — | -2.1040 | -1.2030 |
| TATASTEEL | -0.0050 | 1.5240 | -0.1460 |
| TCS | 0.5720 | -1.6390 | 1.6390 |
| TECHM | -0.2380 | -0.4650 | -1.1380 |
| TITAN | -0.9710 | 0.9690 | 0.4480 |
| TRENT | -1.0390 | -2.1040 | -0.9640 |
| ULTRACEMCO | -0.6390 | -0.0630 | 0.2560 |
| WIPRO | 0.7760 | -1.1070 | -0.4430 |