Does industry relative strength predict anything?

Tested 29 September 2026 · backtest_industry_rs · 879 symbols, 146 industries, 269 sessions from 26 August 2025 to 28 September 2026

The question

Money rotates by group; the strongest groups lead; so rank industries by relative strength and buy inside the top ones. It is the standard argument and it is worth taking seriously, because if it holds it is a filter we do not currently apply.

One thing to settle first, because it is not obvious. Ranking industries is benchmark‑free. Subtracting a common index return from every industry shifts them all by the same amount and cannot reorder them, so "RS against the Nifty" and "RS against smallcap" produce the same ranking. They differ only in where zero sits. So there are really two hypotheses, and they were tested separately: the rank reading ("is this among the strongest groups") and the benchmark reading ("is this group beating the index I could buy instead").

What would have made it true

Four conditions, because four gate proposals died here in a single week from clearing exactly one of them:

  1. Forward return rising across rank buckets, not just a good top bucket.
  2. A top‑versus‑rest spread that survives disjoint sampling — consecutive days share almost all of a forward window, so a day‑by‑day t‑statistic is inflated by roughly the square root of the horizon.
  3. The same sign in both halves of the window.
  4. A spread larger than shuffling the bucket labels within each day produces.

The rank reading: it fails

bucket (1 = strongest)nmean %median %win %disjoint mean %
122,8492.881.3256.12.49
224,1073.181.7657.12.44
320,0292.761.4855.92.36
418,6732.311.0154.21.99
510,9212.000.7053.91.99

Forward 20‑session return. The strongest bucket is not the best one — bucket 2 beats it on every column of the full sample.

Top bucket against the rest, on disjoint windows: +0.26pp, t = 0.61. Permutation p = 0.189. Halves: +0.77pp then +0.10pp. Nothing.

The 60-session horizon is the trap worth seeing

Stretch the forward window to sixty sessions and the spread becomes +1.69pp with a permutation p = 0.015. On that evidence alone it looks like a finding. Then split it:

halftoprestspreadt
to 19 Feb 2026126 @ 2.65%385 @ −4.56%+7.21pp4.37
from 19 Feb 2026231 @ 11.68%791 @ 12.33%−0.65pp−0.40

The sign flips. A permutation test answers "could chance produce this pattern"; it cannot answer "is this one regime". The split is what catches it, which is the whole reason it is run.

The benchmark reading: one survivor, and it is mostly size

Cutting on whether the industry beat an index over the same lookback, disjoint windows, both halves:

cuthorizonfirst halfsecond halfverdict
beats NIFTYBEES20+4.14pp (t 7.57)+0.70pp (t 0.45)degenerate — only 80 names below the line in the second half
beats SMALLCAP20+0.45pp (t 0.89)−0.20pp (t −0.41)sign flip
beats NIFTYBEES60+7.21pp (t 4.37)+5.00pp (t 3.92)survives both halves
beats SMALLCAP60+3.38pp (t 2.56)+1.33pp (t 1.02)same sign, second half not significant

Only one row survives everything: beating the Nifty, at a sixty‑session horizon. And the row beneath it is the reason to distrust it. Swap the largecap index for the like‑for‑like smallcap peer and the effect falls from +7.21/+5.00 to +3.38/+1.33, losing significance in the second half. What "beats the Nifty" mostly encodes, in a universe that is broad and smallcap‑heavy over a window when smallcaps crushed large caps, is not being a large cap.

The same confounder had already bitten once that day: the first build of the report's sector‑leadership section called 56 of 69 sectors "leaders" because it measured them against the Nifty. Against the smallcap peer it was 38.

On the population that matters

Restricted to the top third by price relative strength — the stand‑in for the RS rating every scanner here demands, and so the set a gate would actually rule on — the rank spread is +0.60pp, t = 0.90, permutation p = 0.085, with halves of +0.44pp and +1.19pp. Same sign in both halves, which is more than the full population managed, and still not significant in either.

The answer

No — do not gate on top‑ranked industries. It would refuse candidates for a spread that is statistically indistinguishable from zero at our horizon, and the one version that survives a split is largely a size factor we can get more cheaply and more honestly by simply not pretending the Nifty is our benchmark.

This is the second industry‑rotation axis to fail the same way. backtest_rotation found the RRG quadrant gate — G5, one of seven gates a candidate must clear — worth +0.16pp at t = 0.45 on disjoint samples, flipping sign between halves, with WEAKENING groups posting the highest forward return of the four quadrants. Two different measures of the same idea, two nulls.

What the sector work is still worth is as a map, not a filter: knowing that both insurance groups have zero names above water and that oil services and capex machinery lead tells you where the damage and the leadership sit. That is context for reading a candidate, and the evidence does not support turning it into a rule that refuses one.

Caveats, stated rather than buried

Reproduce with python manage.py backtest_industry_rs --days 400 --horizon 20 and --horizon 60, --strong-only. The permutation is seeded, so the p‑values above are checkable.