I Backtested ETF Rotation. Doing Nothing Won.
Does ETF rotation or P/E timing beat Nifty after costs and Indian tax? Twelve honest backtests say no: simply holding did as well or better.
Does ETF rotation actually beat holding the index in India, once you pay costs and tax? I ran twelve backtests to find out, nine on momentum and three on valuation (P/E, P/B, dividend yield). The best-looking strategies won only in one period, the momentum signal did worse than simply holding the same ETFs in equal weights, and valuation timing bought a calmer ride but not more return.
This post covers how I set up an honest ETF rotation backtest, what the experiments showed, and the one comparison that settled it.
The strategy
ETF rotation is popular in India because it looks easy. Every month you rank a set of ETFs by recent returns, hold the top one or two, and switch when the leader changes. A typical version ranks sector ETFs (bank, IT, pharma, auto, FMCG, PSU bank, public-sector companies) by the average of their 3, 6 and 12-month returns, holds the top few, and sells one only when it drops a few places. The buffer keeps you from trading on every wiggle.
The appeal is obvious: sectors take turns leading, and momentum should catch the leader early.
Where backtests lie
A quick notebook with free data makes almost any rotation rule look great. These are the traps I designed around:
- Look-ahead in the universe. If you pick ETFs by today’s trading volume, you quietly pick the ones that grew popular because they went up.
- Overfitting. Try 20 parameter combinations, report the best, and you’ve measured luck.
- No costs, no tax. Rotation sells winners every few months. In India that is short-term capital gains at 20%, plus spreads, plus premiums over the fund’s real value on foreign ETFs.
- Dirty data. I hit all of these in free Yahoo prices: a 90% two-day crash around a unit split that never happened, a silver ETF stuck at one price for 228 days that then jumped 55% (momentum ranked it first), and 1:10 splits that were never adjusted and showed up as -87% losses.
None of these are exotic. They are the default.
The rules
One rule set for every experiment:
- No look-ahead. The signal uses the month-end close. Trades happen at the next day’s close. An ETF only counts once it has a year of history and trades at least ₹1 crore a day at that date.
- Pick on one period, judge on another. Settings are chosen on 2012-2019 only. The verdict is 2020 to now. Each period starts fresh.
- Dividends included. Where an ETF is younger than the test, its index stands in, with the index’s dividend yield from NSE’s daily file added back.
- After costs and tax. 0.1% per trade, more for foreign ETFs. Tax per Indian financial year: equity 20% short-term, 12.5% long-term above the yearly exemption; gold, foreign and debt ETFs by their own rules. Losses offset gains and carry forward.
- Two benchmarks. Nifty buy-and-hold, and 60/40 Nifty/gold rebalanced once a year, both paying the same costs and tax.
- Average over settings, not the best one. If one setting works and its neighbors don’t, it’s luck.
Nine momentum experiments, one table
Yearly returns after costs and tax, for a lump sum. Each row is the average over every parameter combination I tested in that experiment.
| Experiment | 2012-19 | 2020-26 | Worst drop 2020-26 |
|---|---|---|---|
| Nifty buy-and-hold | 12.3% | 11.1% | -36% |
| 60/40 Nifty/gold | 9.0% | 14.3% | -23% |
| 80 ETFs, monthly momentum | 5.8% | 19.6% | -45% |
| 7 sector ETFs, monthly | 10.4% | 15.5% | -39% |
| Sectors, momentum ÷ volatility | 9.9% | 20.3% | -23% |
| Sectors + trend filter | 6.6% | 16.6% | -22% |
| Sectors + gold as a sector | 8.5% | 17.6% | -28% |
| Sectors + gold + cash as sectors | 6.3% | 16.7% | -24% |
| Sectors, quarterly | 7.7% | 16.0% | -40% |
| Sectors + broad indices | 8.6% | 13.7% | -38% |
Read the columns, not the rows. From 2012 to 2019, no variant beat Nifty on its average setting. From 2020 to 2026, every variant did. Only 2 of 51 settings beat Nifty in the first period. All 51 beat it in the second.
When every version of an idea loses in one period and wins in the next, the market changed. The method didn’t get smarter.
The add-ons tell the same story. Gold, cash, volatility scaling and a trend filter cut the worst drop after 2020 from about -39% to between -22% and -28%. Before 2020, they cost up to 4 points a year against plain sector rotation.
The check that settled it
Sector rotation was the strongest candidate: its best setting beat Nifty in both periods. So I asked a simpler question. What if I hold the same 7 sector ETFs in equal weights, rebalance once a year, and never look at momentum at all?
| Same 7 sectors | 2012-19 | 2020-26 |
|---|---|---|
| Equal weight, rebalance yearly | 11.4% | 16.6% |
| Momentum rotation, average setting | 10.4% | 15.5% |
Doing nothing won in both periods. The edge after 2020 came from owning PSU banks and public-sector companies during their 2021-2024 run, not from picking them at the right moment.
I like this test because it is fair even with imperfect data. Both sides use the same prices, so missing dividends or rough index history hurt them equally. If a rotation signal can’t beat an equal-weight hold of its own universe, the signal isn’t adding anything.
Does valuation help?
Momentum looks at price. The obvious next idea is to look at value: hold less when the market is expensive, more when it’s cheap. NSE publishes P/E, P/B and dividend yield for every Nifty index daily, back to 2013. I set “cheap” and “expensive” as fixed levels from the 2013-2019 data (for Nifty’s P/E: about 21 and 25) and tested three ideas.
| Valuation idea | 2012-19 | 2020-26 | Worst drop 2020-26 |
|---|---|---|---|
| Nifty share by P/E band (100/80/50%), rest gold or liquid | 12.0% | 13.8% | -19% |
| Sectors ranked by cheap P/E or high dividend yield | 11.3% | 18.0% | -38% |
| Nifty buy-and-hold | 12.3% | 11.1% | -36% |
- Valuation allocation matched Nifty’s return before 2020 with a smaller worst drop, and kept about half of Nifty’s drawdown after. The extra return after 2020 came from gold in 2020 and 2025. Being half out of equity in 2021 cost 16 points that year. A calmer ride, not a better one.
- Sector value looked like the first sector strategy to beat equal weight. But valuation scores need a year of data, so in 2012 it ran plain momentum and made 49%. Over 2013-2019, when valuation actually picked the sectors, it compounded about 8.7% a year against 11.7% for Nifty. After 2020, half its gains came from PSU banks again.
- Pacing a monthly SIP by valuation (park new money in a liquid fund when expensive, deploy it all when cheap) trailed a plain monthly SIP in all 8 settings after 2020. Money waiting at 6% cost more than the cheaper entries earned.
One data warning: sector P/E is noisy. It explodes when a sector posts losses (Nifty Auto’s P/E hit 737), and Nifty’s own P/E dropped in 2021 when NSE switched to consolidated earnings. Dividend yield was the steadier measure.
What I’m doing with it
- The core stays buy-and-hold. It pays the least tax and needs no decisions. Nothing I tested beat it reliably.
- New money goes in as it arrives. Waiting for cheaper prices lost to a plain SIP.
- A valuation band only if I want a calmer ride. Nifty at 100/80/50% by P/E band, the rest in gold, checked once a quarter: about Nifty’s return with half the drawdown, at about 4 orders a year. It depends on gold behaving the way it did.
- No rotation sleeve. The quarterly sector version looked best at first, but once dividends were in the data it beat Nifty in only half of rolling 3-year windows. A coin flip doesn’t earn the tax.
Test your own rotation idea
Before any money goes into a rotation rule:
- Build the universe as it was on each date, from data you had then.
- Pick parameters on one period and judge on a later one you haven’t looked at.
- Charge real costs and your actual tax, every year, not just at the end.
- Report the average over nearby settings, not the best one.
- Compare against an equal-weight hold of the same ETFs, not just the index.
- Scan the data for flat prices, unadjusted splits and one-day spikes that reverse.
Step 5 is the one most backtests skip, and it is the one that answers the question.
Takeaways
- Every rotation variant lost to Nifty in 2012-2019 and beat it in 2020-2026. That is the market changing, not skill.
- Momentum ranking did worse than holding the same sectors in equal weights, in both periods.
- Valuation (P/E, dividend yield) and add-ons (gold, cash, trend filters) bought a smaller drawdown, not more return.
If you have a rotation rule that passes the equal-weight test after tax, I’d like to see it. Send it to me and I’ll run it through the same engine.
This is a personal research note, not investment advice. Backtests describe the past; they don’t promise anything.