| Window | Costs | Net CAGR | Nifty 200 CAGR | Max drawdown | Sharpe | Alpha t | Years ahead | Trades | Avg deployed |
|---|---|---|---|---|---|---|---|---|---|
| Development 2006-03 to 2016 | 1x | 8.4% | 9.1% | 50.5% | 0.46 | -0.23 | 55% | 150 | 87% |
| Development 2006-03 to 2016 | 2x | 8.0% | 9.1% | 50.7% | 0.45 | -0.30 | 55% | 150 | 87% |
| Development 2006-03 to 2016 | 3x | 7.5% | 9.1% | 50.9% | 0.43 | -0.38 | 55% | 151 | 87% |
| Validation 2017 to Sep 2025 | 1x | 10.5% | 14.0% | 45.3% | 0.57 | -0.46 | 44% | 122 | 98% |
| Validation 2017 to Sep 2025 | 2x | 9.9% | 14.0% | 45.9% | 0.54 | -0.57 | 33% | 124 | 98% |
| Validation 2017 to Sep 2025 | 3x | 9.6% | 14.0% | 46.3% | 0.53 | -0.64 | 33% | 122 | 98% |
| Full 2006-03 to 2025-09 | 1x | 9.4% | 11.3% | 50.5% | 0.52 | -0.46 | 50% | 272 | 92% |
| Full 2006-03 to 2025-09 | 2x | 8.9% | 11.3% | 50.7% | 0.50 | -0.58 | 45% | 274 | 92% |
| Full 2006-03 to 2025-09 | 3x | 8.5% | 11.3% | 50.9% | 0.48 | -0.69 | 45% | 273 | 92% |
| Fresh start 1 Jan 2017 | 1x | 10.8% | 14.0% | 46.8% | 0.59 | -0.28 | 44% | 118 | 98% |
| Fresh start 1 Jan 2017 | 2x | 10.5% | 14.0% | 47.4% | 0.57 | -0.35 | 33% | 118 | 98% |
Selected on development data only, at 2x costs, by the pre-registered rule: highest Sharpe among 17 configurations passing the gates (at least 60 trades, drawdown at most 35%, CAGR above the index, at least 60% of capital deployed on average). It is the best of 211 configurations, so its development figure is optimistic by construction.
| Window | Costs | Net CAGR | Nifty 200 CAGR | Max drawdown | Sharpe | Alpha t | Years ahead | Trades | Avg deployed |
|---|---|---|---|---|---|---|---|---|---|
| Development 2006-03 to 2016 | 1x | 17.5% | 9.1% | 30.0% | 0.89 | 0.98 | 64% | 113 | 61% |
| Development 2006-03 to 2016 | 2x | 17.0% | 9.1% | 30.2% | 0.87 | 0.92 | 64% | 114 | 61% |
| Development 2006-03 to 2016 | 3x | 16.5% | 9.1% | 30.3% | 0.85 | 0.86 | 64% | 114 | 61% |
| Validation 2017 to Sep 2025 | 1x | 15.6% | 14.0% | 34.7% | 0.86 | 0.39 | 56% | 125 | 82% |
| Validation 2017 to Sep 2025 | 2x | 15.9% | 14.0% | 30.8% | 0.89 | 0.42 | 56% | 126 | 82% |
| Validation 2017 to Sep 2025 | 3x | 14.8% | 14.0% | 35.4% | 0.83 | 0.25 | 56% | 128 | 82% |
| Full 2006-03 to 2025-09 | 1x | 16.6% | 11.3% | 34.7% | 0.89 | 1.01 | 60% | 238 | 70% |
| Full 2006-03 to 2025-09 | 2x | 16.5% | 11.3% | 30.8% | 0.89 | 0.98 | 60% | 240 | 70% |
| Full 2006-03 to 2025-09 | 3x | 15.7% | 11.3% | 35.4% | 0.85 | 0.83 | 60% | 242 | 70% |
| Fresh start 1 Jan 2017 | 1x | 13.4% | 14.0% | 34.6% | 0.81 | 0.03 | 33% | 127 | 79% |
| Fresh start 1 Jan 2017 | 2x | 13.0% | 14.0% | 35.3% | 0.79 | -0.05 | 33% | 127 | 79% |
| Measure | Value |
|---|---|
| CAGR (time-weighted = money-weighted; no external flows) | 16.6% |
| Final equity from ₹50 lakh | ₹10.17 crore |
| Volatility (annualised, monthly) | 19.5% |
| Maximum drawdown / longest time under a prior peak | 34.7% / 2.1 years |
| Worst month / worst year | -22.4% / -20.9% |
| Longest losing streak (months) | 5 |
| Trades / win rate / profit factor | 238 / 45% / 3.43 |
| Average win / average loss / expectancy per trade | ₹1,136,085 / ₹-275,200 / ₹365,215 |
| Average holding period | 287 calendar days |
| Capital deployed: average / maximum | 70% / 100% |
| Cash held: average | 30% |
| Positions: average / maximum | 9.7 / 20 |
| Open risk (stop distance × value ÷ equity): average / maximum | 20.3% / 34.1% |
| Largest single stock / largest sector at a month-end | 33% / 57% |
| Measure | Value |
|---|---|
| CAGR (time-weighted = money-weighted; no external flows) | 9.4% |
| Final equity from ₹50 lakh | ₹2.91 crore |
| Volatility (annualised, monthly) | 21.2% |
| Maximum drawdown / longest time under a prior peak | 50.5% / 4.5 years |
| Worst month / worst year | -20.8% / -49.0% |
| Longest losing streak (months) | 4 |
| Trades / win rate / profit factor | 272 / 42% / 2.17 |
| Average win / average loss / expectancy per trade | ₹298,896 / ₹-99,506 / ₹67,471 |
| Average holding period | 435 calendar days |
| Capital deployed: average / maximum | 92% / 100% |
| Cash held: average | 8% |
| Positions: average / maximum | 17.7 / 20 |
| Open risk (stop distance × value ÷ equity): average / maximum | 23.5% / 31.6% |
| Largest single stock / largest sector at a month-end | 25% / 61% |
| Strategy | Brokerage, STT, exchange, stamp, DP (₹) | Slippage incl. spread (₹) | Gap loss on intramonth stops (₹) | Costs as share of final equity | Round trips |
|---|---|---|---|---|---|
| Finalist | ₹1,259,312 | ₹1,025,438 | ₹0 | 2.2% | 238 |
| Baseline | ₹365,637 | ₹298,418 | ₹0 | 2.3% | 272 |
The finalist uses month-end stops, so it has no intramonth gap loss; the intramonth ATR variants in section 5 show gap losses of ₹6 lakh to ₹25 lakh over the whole path. Slippage tiers: 0.05% a fill at ₹100 crore a day traded or more, 0.10% from ₹20 crore, 0.25% below (spread included), × 1, 2 and 3 in the stress rows.
| Check (pre-registered reading) | Result | Value |
|---|---|---|
| Validation net CAGR above Nifty 200 at 2x costs (continuous run) | PASS | 15.9% vs 14.0% |
| Same, fresh start from cash on 1 Jan 2017 | FAIL | 13.0% vs 14.0% |
| Alpha t above 1.5 in validation | FAIL | t = 0.42 |
| Validation drawdown within index's + 10 points | PASS | 30.8% vs index 38.2% |
| Development CAGR above the random-entry 90th percentile | PASS | 17.0% vs 9.3% |
| Reality check p below 0.10 over 211 configurations | FAIL | p = 0.70 |
| Plateau: at least 60% of neighbours ahead of the index in both periods | PASS | 78% |
| Shifted sample (first 3 years dropped) keeps the sign | PASS | 16.0% vs 15.1% |
| Walk-forward re-selection ahead of the index | FAIL | 13.6% vs 14.0% |
Random entries (same number of positions each month, drawn from the same eligible stocks, same exits and sizing) earned a median of 5.1% in development and 9.3% in validation (90th percentiles 9.3% and 14.8%). The finalist's development result is above the 90th percentile; its validation result is above the 90th percentile of 14.8%. The sign-flip reality check asks whether the best of 211 configurations is better than the best you would get from noise: it is not (p = 0.70). Walk-forward re-selection each January gave 13.6% a year against 14.0% for the index.
| One-step change from the finalist | CAGR dev | CAGR val | Excess dev | Excess val | Drawdown val |
|---|---|---|---|---|---|
| RSI 65 | 14.3% | 18.3% | 5.2% | 4.3% | 33.5% |
| RSI 60 | 13.2% | 16.7% | 4.1% | 2.6% | 32.7% |
| body 50% | 13.0% | 14.5% | 3.9% | 0.5% | 39.9% |
| body 70% | 14.5% | 8.6% | 5.4% | -5.4% | 33.4% |
| range/ATR 1.618 | 11.9% | 15.9% | 2.8% | 1.8% | 30.4% |
| range/ATR none | 16.4% | 15.4% | 7.3% | 1.4% | 35.0% |
| ATR k 1.5 | 16.4% | 15.7% | 7.3% | 1.7% | 35.1% |
| ATR k 2.0 | 14.9% | 14.7% | 5.8% | 0.7% | 33.7% |
| N 15 | 17.3% | 14.7% | 8.2% | 0.7% | 34.6% |
| N 30 | 17.0% | 15.9% | 7.9% | 1.9% | 30.8% |
| cap 5% | 12.3% | 13.1% | 3.2% | -0.9% | 25.7% |
| cap 15% | 17.4% | 15.7% | 8.3% | 1.7% | 33.9% |
| risk 0.5% | 17.0% | 14.8% | 7.9% | 0.8% | 33.9% |
| risk 1.5% | 17.3% | 15.0% | 8.2% | 0.9% | 33.3% |
| regime SMA20 | 15.9% | 12.8% | 6.8% | -1.2% | 35.5% |
| regime SMA10 exit | 13.4% | 13.7% | 4.3% | -0.3% | 28.8% |
| FILL sizing | 17.1% | 14.6% | 8.0% | 0.6% | 35.2% |
| any-direction candle | 17.0% | 15.9% | 7.9% | 1.8% | 30.8% |
78% of the neighbours beat the index in both periods. Start-date sensitivity (fresh start from cash, 2x costs, full path to 2025-09): 2006: 16.5% against 11.3%, 2008: 12.5% against 8.2%, 2010: 15.6% against 10.7%, 2012: 17.0% against 13.9%, 2014: 17.9% against 13.3%, 2016: 15.6% against 12.9%. Other sensitivities: look-back counts only filtered breakouts: 12.0%, drawdown 34.9%, ATR through t-1 for the range filter: 16.5%, drawdown 30.8%, random signal order (mean of 10): 16.3%, drawdown 32.9%, slippage x1: 16.6%, drawdown 34.7%, slippage x3: 15.7%, drawdown 35.4%.
| Stage | Configurations | Contents |
|---|---|---|
| A entry filters | 81 | baseline; RSI 60/65/70; body 50/60/70 (bullish, any); range/ATR 1.0/1.618/2.0/2.618/3.0; pairs; triples |
| B exit variants | 23 | baseline; SMA-only; Supertrend-only; ATR stops k 1.0-3.0 intramonth and month-end, as addition and as replacement |
| C portfolio-wide exit | 10 | threshold T 100/50/30/20/10 × share 75%/50% |
| D sizing and risk | 62 | EQ/FILL/RISK/RISKFILL × N 10/20/30/50 × cap 5/10/15%; risk 0.5/1.0/1.5%; sector cap 25/35%; drawdown control 15/20%; regime SMA10/SMA20 (entry-only, entry+exit) |
| E combinations | 9 | top 3 entry sets × top 3 exit sets (by development Sharpe) |
| F, G finalists | 26 | E-best × sizing × regime; then drawdown control, portfolio exit, risk sizing, sector cap |
Every configuration, with returns, drawdown, win rate, profit factor, expectancy, holding period, capital deployed, positions, open risk, recovery time, worst month and year, losing streak, costs, gap loss and missed signals, is in configs.csv on the strategy page. The ten best by development Sharpe among the combinations (selection data) and how they did afterwards:
| Stage | Configuration | CAGR dev | DD dev | Sharpe dev | CAGR val | DD val | Sharpe val | Deployed |
|---|---|---|---|---|---|---|---|---|
| G | rsi70+body60+rng1.0 | ATR month-end + base k1.0 + FILL N20 cap10 + regime sma10 entry + RISKFILL 1% N20 cap10 | 17.0% | 30.2% | 0.87 | 15.9% | 30.8% | 0.89 | 70% |
| F | rsi70+body60+rng1.0 | ATR month-end + base k1.0 + FILL N20 cap10 + regime sma10 entry | 17.1% | 30.2% | 0.87 | 14.6% | 35.2% | 0.82 | 70% |
| G | rsi70+body60+rng1.0 | ATR month-end + base k1.0 + FILL N20 cap10 + regime sma10 entry + pwx T20 share75 | 17.1% | 30.2% | 0.87 | 14.6% | 35.2% | 0.82 | 70% |
| G | rsi70+body60+rng1.0 | ATR month-end + base k1.0 + FILL N20 cap10 + regime sma10 entry + pwx T100 share75 (spec) | 17.1% | 30.2% | 0.87 | 14.6% | 35.2% | 0.82 | 70% |
| G | rsi70+body60+rng1.0 | ATR month-end + base k1.0 + FILL N20 cap10 + regime sma10 entry + pwx T10 share50 | 17.1% | 30.2% | 0.87 | 14.6% | 35.2% | 0.82 | 70% |
| F | rsi70+body60+rng1.0 | ATR month-end only k1.0 + FILL N20 cap10 + regime sma10 entry | 16.8% | 30.2% | 0.86 | 12.3% | 35.3% | 0.71 | 73% |
| F | rsi70+body60+rng1.0 | ATR month-end + base k1.5 + FILL N20 cap10 + regime sma10 entry | 16.6% | 34.1% | 0.86 | 15.1% | 35.5% | 0.84 | 76% |
| G | rsi70+body60+rng1.0 | ATR month-end + base k1.0 + FILL N20 cap10 + regime sma10 entry + RISK 1% N20 cap10 | 10.1% | 19.6% | 0.84 | 10.6% | 21.2% | 0.84 | 48% |
| G | rsi70+body60+rng1.0 | ATR month-end + base k1.0 + FILL N20 cap10 + regime sma10 entry + sector cap 25% | 16.5% | 30.2% | 0.84 | 15.4% | 32.0% | 0.83 | 69% |
| E | rsi70+body60+rng1.0 | ATR month-end + base k1.0 | 15.6% | 30.2% | 0.80 | 13.8% | 36.8% | 0.72 | 75% |
Baseline 8.0% in development and 9.9% in validation (2x costs). 79% of the 81 entry sets beat the baseline in validation but only 15% did so in development: the filters mostly helped in 2017-2025 and not in 2006-2016, so no filter is robustly better. Strong-candle filters and wide-range filters cut trade counts and capital use (a range of at least 2.618 × ATR leaves average deployment near 66%). The best filter set on development, RSI ≥ 70 with a bullish body of at least 60%, and range ≥ 1.0 × ATR, is the one carried into the combinations; its development lead over the baseline is not matched in a stable way across neighbouring filter values.
Month-end ATR stops with k = 1.0 (previous close minus one ATR) are the only exit change that improves both periods materially (10.0% development, 16.1% validation as an addition to the baseline exits). Intramonth stops monitored on daily bars were worse at tight k: whipsaw exits at k = 1.0 produce 722 round trips instead of 274, higher costs and a gap loss of about ₹17.8 lakh in the run; wider k (2.5-3.0) rarely trigger and change little. Stop-only exits with wide k (2.0-3.0) leave positions in falling trends too long (drawdown 39-68%) and trade very little (12-90 round trips).
| Threshold T and share | Times triggered | CAGR (2x) | Max drawdown | Round trips |
|---|---|---|---|---|
| T100 share75 | 0 | 8.9% | 50.7% | 274 |
| T100 share50 | 0 | 8.9% | 50.7% | 274 |
| T50 share75 | 0 | 8.9% | 50.7% | 274 |
| T50 share50 | 0 | 8.9% | 50.7% | 274 |
| T30 share75 | 1 | 8.3% | 50.7% | 288 |
| T30 share50 | 1 | 8.3% | 50.7% | 288 |
| T20 share75 | 4 | 10.9% | 45.9% | 321 |
| T20 share50 | 4 | 10.9% | 45.9% | 321 |
| T10 share75 | 6 | 6.3% | 58.8% | 359 |
| T10 share50 | 12 | 12.2% | 42.6% | 407 |
As specified (T = 100, 75%) the rule never fires: with the first-breakout-in-six-months condition, the most qualifying signals in any month was 54 across the whole universe (43 among the 200 largest). Lower thresholds do fire (T = 20: 4 times; T = 10: 6 to 12 times) but the effect is inconsistent (CAGR from 6% to 12% across the ten settings) and not distinguishable from noise. Exits execute at the next month's open, so the gap between the month-end close and that open is borne by the account; it is inside the trade-level exit prices.
Position sizing mostly trades return for utilisation: pure risk-based sizing (stop distance from the SMA or Supertrend, clipped to 5-35%; 0.5-1.5% of equity at risk) deploys 46%-91% of capital across the settings, generally with lower drawdown and lower return than the equal-slot rules (chart); scaling the risk-sized positions up pro rata to use the idle cash (RISKFILL), capped per stock, brings deployment to 56%-93%. Equal-slot sizing with 50 slots deploys most capital at a lower drawdown than 10 slots (diversification), at the cost of more small positions. The per-stock cap rows (5-15%) and the sector cap rows (25%, 35%) are in the configuration table; sector classification covers only names in the current index list, so the sector cap cannot constrain delisted names. Portfolio drawdown controls (no new entries below −15% or −20% until the drawdown halves) kept the account out of the market for long stretches (average deployment 23%-36%) and gave up most of the return: not recommended.
Method. (1) Equity E = cash + positions at the prior close. (2) Stop distance d = (signal close − max(SMA20, Supertrend line)) ÷ signal close, clipped to 5-35%. (3) Risk-based amount = 1% × E ÷ d, capped at 10% × E. (4) RISKFILL multiplies the risk-sized amounts by one factor so that the month's new positions together use the available cash, never exceeding the 10% cap. (5) Shares = floor(amount ÷ (open × (1 + slippage) × (1 + charges))), at the raw open price. (6) Rupee risk = cost × d. Examples taken from the finalist's actual signals:
| Month | Stock | Equity | Signal close | Stop ref | Stop dist. | Risk-sized | 10% cap | Target | Open | Shares | Cost incl. fees | % of equity | ₹ at risk (% equity) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2018-02 | LT | ₹38,150,677 | 1,282 | 1,016 | 20.8% | ₹1,837,418 | ₹3,815,068 | ₹1,837,418 | 1,458.90 | 677 | ₹989,635 | 2.6% | 0.54% |
| 2018-03 | CHOLAFIN | ₹36,721,400 | 273 | 211 | 22.8% | ₹1,607,571 | ₹3,672,140 | ₹3,672,140 | 1,461.10 | 2507 | ₹3,672,080 | 10.0% | 2.28% |
| 2023-01 | IOB | ₹45,685,309 | 33 | 21 | 35.0% | ₹1,305,295 | ₹4,568,531 | ₹1,305,295 | 32.40 | 13 | ₹422 | 0.0% | 0.00% |
Example reading: with E = ₹50,00,000, a stock whose stop reference is 12% below the signal close gets 1% × 50,00,000 ÷ 12% = ₹4.17 lakh; if only two signals appear and cash is plentiful, RISKFILL scales both up (up to the 10% cap = ₹5 lakh each), so about 20% of capital is deployed rather than about 17%. When many signals compete for few free slots, the liquidity ranking decides and the rest are counted as missed (278 of 562 signals in the finalist run at 2x).
Using the Nifty 200 against its 10-month average as the regime: in 169 bullish months the finalist earned 30.2% a year against 28.2% for the index (positive in 70% of months); in 65 bearish months -16.9% against -27.3% (49% positive). The finalist's regime filter holds back entries in bear regimes but does not exit open positions (the 'exit' variants are in the search table).
The best 10 names produced 78% of net trading P&L across 198 names traded; breakout strategies make money from a small share of large winners (win rate 45%). Net P&L by sector (names with a current classification):
| Sector | Trades | Net P&L | Average trade |
|---|---|---|---|
| Capital Goods | 15 | ₹29,907,916 | 59.3% |
| Consumer Services | 5 | ₹20,671,877 | 111.0% |
| Chemicals | 11 | ₹8,455,449 | 46.7% |
| Healthcare | 18 | ₹8,240,703 | 30.8% |
| Fast Moving Consumer Goods | 15 | ₹5,221,355 | 33.0% |
| Oil Gas & Consumable Fuels | 9 | ₹4,811,159 | 47.1% |
| Financial Services | 31 | ₹2,361,868 | 10.5% |
| Construction | 6 | ₹2,233,141 | 23.7% |
Files: research/bbm/ (prep.py, sim.py, run_search.py, final.py, export_bbm.py, report_bbm.py, results/), data/research/panel_sf.parquet.
Research and education only. Hypothetical and back-tested results have inherent limitations and do not guarantee future results. Not investment advice; the publisher is not presented as a SEBI-registered investment adviser or research analyst.