Verdict
Candidate: hold-out did not confirm profit
The sealed hold-out (2025-10 to 2026-10-16, opened once on 2026-10-19) did not confirm a profit: -1.4% at standard costs against -3.3% for the Nifty 500, with a 13.8% worst fall. It protected capital in a down year but did not make money. The forward paper run continues.
- Scope. Of your 14 ideas, ten were tested on weekly bars (momentum and 52-week highs, low volatility, trend following, a price-reaction stand-in for post-earnings drift, base breakouts, market structure, EMA support, anchored VWAP, fair-value gaps, RSI/MACD), plus the index-rebalancing event study and pairs. Four could not be tested honestly: quality and value factors (no fundamentals), true post-earnings drift (no results dates or earnings surprises), event-driven and merger arbitrage (no event list), and volatility dispersion (no stock option chains).
- Method. Nifty 500 point-in-time membership, jump-cleaned weekly prices, liquidity of at least ₹5 crore a day, decisions on Friday close and trades at the next open, delivery costs plus 0.2% slippage a side, stress at 1x, 2x, 3x, and a survivorship haircut of 0%, 4% and 8% a year because only 68% to 92% of past members have price history. Ranked on 2016 to 2021 and checked on 2022 to 2025-09. The hold-out from 2025-10 is sealed.
- Screen of 597 variant and market-filter combinations: CAGR above 10% and drawdown under 20% at 2x costs plus the 4% haircut on both periods. Only 1 combination passed in round 1. Every other family failed: best raw results of 15% to 30% a year came with 33% to 53% drawdowns, and base breakouts, low volatility and the RSI/MACD ideas made little or lost money.
- Round 2 (288 focused momentum combinations: ranking, number of names, market filter, stock stop, volatility scaling). 25 passed both periods. The plateau is risk-adjusted momentum (39 or 52 weeks, skip 4) with 10 to 20 names and the market filter on the 26- or 30-week average. Stops and volatility scaling added nothing, so the final rule has neither.
- Candidate (risk-adjusted 39-week momentum, top 15, monthly, Nifty 500 above its 26-week average, otherwise cash), at 2x costs and a 4% haircut: 24.8% a year, worst drop 16.7%, Sharpe 1.40. Train 25.3% and 16.7%; validation 23.3% and 15.3%. Random top-15 picks with the same filter made -0.1% a year, so the ranking, not the filter, carries the skill.
- Stress. At 1x costs with no haircut 32.4% and 13.8%. At 3x costs plus 4% haircut 20.5% and 21.9% (above the 20% limit). At 3x plus 8% 17.2% and 24.6%. At 5x plus 8% 8.3% and 38.0%.
- Weak spots. Calendar years: 2021 +128% and 2023 +81%, with 2018 -10.5%, 2022 -9.3% and 2019 +1.3%. Starting in 2017 or later the worst drop is 22%. Walk-forward (re-pick each year from earlier data): 22.8% a year with a 23.3% worst drop. White reality check over the 288 round-2 variants on the validation period: p = 0.047 (best t-statistic 2.85), borderline.
- Index rebalancing (Nifty 500 additions and deletions, 2016 to 2025-09, about 233 additions and 127 deletions). Buying additions 28 days before the effective date and selling on it gained 0.5% over the index (t 0.7); the larger run-up from 42 days before mostly happens before NSE announces. After the effective date, additions and deletions both beat the index by 1.4% to 1.7% over five days (unclustered t about 3 to 4). Net of about 0.8% round-trip costs and with few events a year, that is roughly 2% to 3% a year at best: not a stand-alone strategy.
- Pairs. Weekly Engle-Granger tests on 300 highly correlated liquid pairs (formation to 2019) found 70 cointegrated; traded 2020 to 2025-09 the 40 tested had a median total of +5.6% at 1x, +1.9% at 2x and -1.9% at 3x. Your named pairs: ICICIBANK/HDFCBANK +18.7% over 5.75 years at 1x (+9.7% at 3x, drawdown 24% to 27% of notional), TATAMOTORS/M&M -46%, INFY/TCS -11%. No edge after realistic friction; shorting needs futures and margin.
- HOLD-OUT RESULT (opened once, 2026-10-19, on the frozen specification, one continuous run from 2016 with positions carried across): 55 weeks to 2026-10-16. Standard costs (paper settings): -1.4%, worst fall 13.8%. At 2x costs plus a 4% haircut: -7.0% (15.8%). At 3x plus 8%: -12.5% (18.4%). Nifty 500 price index: -3.3% (13.1%). Random top-15 picks with the same filter: -14.1% on average (sd 4.5%); the candidate beat 98% of 40 random runs. The market filter was ON in only 56% of weeks, so the account sat in cash 44% of the time. Reading: the ranking showed skill against random picks and the filter limited the fall, but there was no profit; 55 weeks cannot separate skill from luck either way.
- Forward paper run started 2026-10-19 at the owner's instruction, with the specification frozen. It re-simulates from the start date each evening with the same engine as the back-test (a replay of 2024 to 2025-09 reproduced the research equity to the rupee). The hold-out stays sealed. Paper results use real prices with modelled fills, so they exclude real execution.
- CORRECTION (2026-10-20): the hold-out total depends on the rebalance calendar. The -1.4% above is for the cycle phase set by a 2016 start. The same rule with the four-week cycle shifted by one, two or three weeks gave +5.3%, +0.6%, +1.5% and -1.4% over the same 55 weeks (standard costs), all better than the index's -3.3%. The honest summary is 'between -1.4% and +5.3% depending on phase', which is still not a clear confirmation of profit, but it is less negative than first reported. The forward paper run uses one fixed phase; a four-sleeve version that removes phase luck would be a new strategy version.
- Recommendation. Keep the forward paper run as the only clean out-of-sample test left. Do not use real money on this evidence. Use the decision guide in research/weekly/README.md: judge after 26 and 52 weeks, require drawdown under 20% and a return clearly above cash and the index after costs, and do not change the rules during the run. The full documentation, with the exact rules, pass/hold/stop criteria written before the paper results, and the weekly routine, is at /docs/longbow-weekly.html.
Promotion gates
Random top-15 with the same filter: -0.1% a year, against 24.8%.
25.3% and 16.7% (train), 23.3% and 15.3% (validation).
17.2% a year but a 24.6% worst drop.
2021 +128% and 2023 +81%; starting after 2016 the worst drop is 22%.
Reality check p = 0.047 across 288 variants (borderline).
Opened once on 2026-10-19: -1.4% at standard costs for the 2016-start phase (+0.6% to +5.3% for other phases) against the index's -3.3%; negative at 2x and 3x stress for the first phase. Beat random picks; no clear confirmation.
Explain the strategy
Every week we ranked the liquid stocks in the Nifty 500 by how steadily they had been rising over about nine months, bought the top 15 once a month, and went to cash when the overall market was weak. Over ten years, with generous allowances for fees and for stocks missing from our records, it grew about 25% a year with its worst fall near 17%, against 13% and 34% for the index. We do not yet trust it because two years did most of the work.
Report
All ten tested ideas: best variant on train and the family median, 2x costs and 4% haircut
| idea | regime filter | variants | best on train (Sharpe) | train CAGR | train max DD | validation CAGR | validation max DD | median validation CAGR (all variants) | median validation DD |
|---|---|---|---|---|---|---|---|---|---|
| 1 Cross-sectional momentum / 52-week high | none | 108 | mom 39w skip 4 N=10 k=4 adv>=5 | 30% | 35% | 22% | 37% | 13% | 34% |
| 1 Cross-sectional momentum / 52-week high | Nifty 500 above 30-week average | 108 | mom 52w skip 0 N=20 k=4 adv>=5 | 25% | 33% | 21% | 24% | 17% | 22% |
| 10 EMA support | none | 6 | EMA50w hold | 15% | 48% | 21% | 33% | 20% | 33% |
| 10 EMA support | Nifty 500 above 30-week average | 6 | EMA50w hold | 20% | 36% | 24% | 19% | 24% | 19% |
| 11 Anchored VWAP | none | 4 | above AVWAP from Election results | 14% | 50% | 24% | 29% | 21% | 33% |
| 11 Anchored VWAP | Nifty 500 above 30-week average | 4 | above AVWAP from Election results | 18% | 39% | 28% | 16% | 24% | 19% |
| 12 Weekly fair-value gaps | none | 4 | FVG>2% retest | 15% | 53% | 17% | 35% | 20% | 33% |
| 12 Weekly fair-value gaps | Nifty 500 above 30-week average | 4 | FVG>2% retest | 20% | 37% | 23% | 20% | 25% | 19% |
| 13 RSI / MACD / divergence | none | 5 | RSI14 crosses up 40 in uptrend | 5% | 6% | 4% | 5% | 5% | 26% |
| 13 RSI / MACD / divergence | Nifty 500 above 30-week average | 5 | MACD histogram cross up | 14% | 41% | 22% | 18% | 9% | 18% |
| 2 Low volatility and blend (quality, value parked) | none | 16 | momentum+low-vol blend 52w N=20 k=13 | 10% | 27% | 9% | 26% | 6% | 25% |
| 2 Low volatility and blend (quality, value parked) | Nifty 500 above 30-week average | 16 | momentum+low-vol blend 26w N=20 k=13 | 10% | 14% | 12% | 15% | 6% | 14% |
| 3 Time-series trend (SMA, Donchian, SuperTrend) | none | 36 | Donchian 26/26 N=20 vol-parity | 17% | 53% | 26% | 30% | 23% | 27% |
| 3 Time-series trend (SMA, Donchian, SuperTrend) | Nifty 500 above 30-week average | 36 | Donchian 52/26 N=20 vol-parity | 20% | 36% | 24% | 19% | 23% | 17% |
| 4 PEAD (price-reaction proxy only) | none | 8 | proxy z>3.0 vol>3.0x hold 8w | -7% | 47% | 13% | 17% | 5% | 26% |
| 4 PEAD (price-reaction proxy only) | Nifty 500 above 30-week average | 8 | proxy z>3.0 vol>3.0x hold 8w | -3% | 36% | 18% | 14% | 11% | 17% |
| 8 Multi-month base breakouts | none | 8 | base<30% vol>2.0x exit SMA10 | -9% | 53% | -3% | 31% | -24% | 78% |
| 8 Multi-month base breakouts | Nifty 500 above 30-week average | 8 | base<30% vol>2.0x exit SMA10 | -5% | 42% | 1% | 19% | -11% | 42% |
| 9 Market structure (BOS / CHoCH) | none | 4 | BOS/CHoCH pivot=2w with SMA30 filter | 15% | 51% | 23% | 32% | 22% | 32% |
| 9 Market structure (BOS / CHoCH) | Nifty 500 above 30-week average | 4 | BOS/CHoCH pivot=2w with SMA30 filter | 19% | 39% | 25% | 18% | 25% | 19% |
Rules and parameters
Rules
- Universe: Nifty 500 members on the decision date with liquidity of at least ₹5 crore a day and at least 60 weeks of history.
- Score: (price 4 weeks ago / price 39 weeks ago - 1) divided by the 26-week standard deviation of weekly returns. Hold the top 15 at equal weight, with a held name kept while it stays in the top 22.
- Rebalance every 4 weeks; decisions at Friday close, trades at the next open. Exits happen when a name drops out of the top 22 or the filter turns off.
- Market filter: hold stocks only while the Nifty 500 index is above its 26-week average; otherwise hold cash earning repo less 1.5%.
- Costs: delivery brokerage, STT, stamp, exchange fee and DP charge plus 0.2% slippage a side; stress 2x and 3x. Survivorship haircut 4% a year of invested capital (stress 8%).
Parameters
- capital
- ₹5,00,000
- names
- 15
- rebalance
- every 4 weeks
- window
- 2016-01 to 2025-09
- train
- 2016-2021
- validation
- 2022-2025-09
- hold-out
- opened once 2026-10-19 (spent)
- code
- research/weekly/
- documentation
- https://strategyreview.tradetechanalytics.com/docs/longbow-weekly.html (rules, data, costs, results, decision criteria, routine)
Instrument
Nifty 500 stocks (point-in-time membership, liquid names) · capital ₹500,000
Known limitations
- Survivorship: names that were index members but are delisted have no price history (coverage 68% to 92%). The haircut is an estimate, not a measurement.
- Prices are as delivered by Dhan; split and bonus jumps over 35% a day are removed, which also removes true crashes of that size.
- Index data is a price index (no dividends). Costs use delivery charges; real fills for small-caps can be worse.
- The post-earnings test is a price-reaction stand-in, not earnings surprise; quality, value, event-driven and volatility-dispersion ideas were not tested.
- About 900 variants were examined across the study; the reality check covers only the 288 round-2 variants.
Logs and raw data
Downloads appear once a data window is loaded.
Files are plain CSV so results can be re-computed independently. Trade dates are IST sessions; returns are net of modelled costs and slippage.