24 September update: Read the fixed ₹60L / ₹5L comparison of all 132 opportunities. It separates closed profit, open marks, ordering sensitivity and missing-stop assumptions. Earlier figures below use different experiments and must not be treated as interchangeable.
The book made ₹4.16 lakh over these six months on rules that have since changed in five places. This replays the window on the reconstructed candidate population under the rules as they stand today — pivot-low stops inside a flat 5% cap, the best-of-best shortlist, a breadth gate, close-based exits with a disaster line, breakeven at +8%, and twelve slots at a ₹40,000 risk budget.
The new rules take 19 positions over the same six months — and they are not the 132 the book took; only two of those clear all four price gates, so this is a different set of names, not a filtered version of ours (see the reconciliation below) — 16 of the 19 that cleared the gate fell in June to September, and only 3 in April and May, because breadth was below its own mean for most of that stretch. Every one of them is a name that cleared all four price gates, carried RS ≥ 90 and EPS growth ≥ 25%, ranged 3–7% a day, and had a pivot low close enough to put the stop inside 5% — and each was entered only on a session when universe breadth was above its prior five-session mean.
Median hold 14 sessions. The left tail is bounded by construction: the gate refuses a stop more than 5% below the close it was judged on, and the exit is taken at the next open after a close beneath it. The worst trade in the replay lost -6.5% and every loss is inside 7% — against a book whose six-month record contains losses of 11% and 45%.
Why 10 rows show a stop wider than the cap. The gate is judged on the signal close; the fill is the next session's open, which can gap above it. The stop stays where the chart put it, so the distance measured from the fill is wider than the distance the gate approved. That is not a breach — it is the gap risk the disaster line at stop × 0.95 exists for, and it is why an entry more than a few percent above the signal close is worth refusing.
The single best trade is 36% of the net and the best three are 74%. Strip the best one out and the replay makes ₹4.15L — still ahead of the ₹3.64L the book actually made, on a seventh of the trades, but the distance narrows sharply.
Eighteen trades is not a sample that settles anything. What it shows is a shape: small bounded losses, a handful of long holds carrying the result, and a market gate that kept the book out for most of April and May.
| stage | setups | what removed them |
|---|---|---|
| candidate population | 152 | G1–G4 on the RS≥85 universe, Mar–Aug |
| best of the best | 64 | RS≥90, EPS≥25%, ADR 3–7% |
| market gate open | 19 | breadth above its prior five-session mean |
| actually placed | 18 | twelve slots, filled in date order — never all twelve at once |
| still open at 22 Sep | 1 | took a slot, contributes no realised P&L |
| symbol | entry | exit | days | stop% | RS | qty | deployed | return | P&L |
|---|---|---|---|---|---|---|---|---|---|
| INDSWFTLAB | 31 Jul | 15 Sep | 31 | 5.8% | 98 | 2,207 | 499,914 | +46.21% | +230,995 |
| TBZ | 06 Jul | 11 Aug | 26 | 5.1% | 99 | 2,629 | 499,832 | +31.37% | +156,819 |
| VINDHYATEL | 26 Aug | 22 Sep | 18 | 3.8% | 93 | 206 | 498,657 | +18.37% | +91,615 |
| IOLCP | 17 Jun | 22 Jul | 24 | 3.0% | 96 | 3,957 | 499,971 | +16.55% | +82,737 |
| QUESS | 15 Jul | 07 Sep | 38 | 5.4% | 91 | 1,687 | 499,830 | +14.75% | +73,750 |
| MARINE | 20 May | 07 Jul | 32 | 3.3% | 94 | 2,189 | 499,968 | +11.54% | +57,680 |
| RRKABEL | 22 May | 07 Jul | 30 | 6.0% | 90 | 252 | 498,708 | +10.66% | +53,172 |
| AETHER | 21 Jul | 15 Sep | 39 | 4.2% | 93 | 341 | 499,291 | +8.46% | +42,217 |
| CPPLUS | 17 Jun | 21 Jul | 23 | 5.4% | 93 | 147 | 497,107 | +3.24% | +16,099 |
| UNIVCABLES | 20 Aug | 21 Aug | 1 | 3.7% | 92 | 301 | 499,853 | -1.13% | -5,671 |
| VINDHYATEL | 02 Jul | 03 Jul | 1 | 5.3% | 93 | 239 | 499,653 | -1.98% | -9,894 |
| INDSWFTLAB | 29 Jul | 30 Jul | 1 | 5.6% | 98 | 2,212 | 499,912 | -2.31% | -11,525 |
| MACPOWER | 13 Jul | 28 Jul | 11 | 5.7% | 96 | 367 | 499,292 | -3.31% | -16,541 |
| SYRMA | 03 Jul | 20 Jul | 11 | 4.7% | 95 | 359 | 498,924 | -3.52% | -17,577 |
| JGCHEM | 26 Aug | 07 Sep | 8 | 4.1% | 91 | 827 | 499,450 | -3.63% | -18,136 |
| SEDEMAC | 13 Jul | 15 Jul | 2 | 4.9% | 94 | 182 | 499,917 | -4.54% | -22,695 |
| GLAND | 12 Jun | 16 Jun | 2 | 7.0% | 91 | 216 | 499,651 | -4.90% | -24,494 |
| ARROWGREEN | 06 May | 12 May | 4 | 5.7% | 94 | 918 | 499,657 | -6.46% | -32,298 |
| net realised | +646,253 | ||||||||
The replay above asks what today's rules would have bought. This asks something different and, for a book that already exists, more useful: keep every name we actually bought — including the ones the entry gates would now refuse — and change only the two things that are not about selection. Size each position to a ₹40,000 risk budget under a ₹5 lakh cap, and exit on a close beneath the stop at the next open, with the disaster line at stop × 0.95 and breakeven at +8%.
Selection is held constant, so the whole difference is sizing and exit. Our picks made ₹3.64L as traded and ₹13.75L re-run — the close-based stop stops handing back gains on intraday shakeouts, and the ₹5 lakh cap puts the same money behind every name instead of concentrating it.
The parameters move it. With no slippage and no horizon the same book makes ₹16.59L; at 0.5% exit slippage with positions closed at the sixtieth session it makes ₹13.75L. Both are in the table below. An earlier run of this comparison reported ₹21.9L under a harness whose exact settings could not be reproduced here; treat the range ₹13–17L as the finding and the single number as a point in it.
Four names carry it. RUBICON, HFCL, WELCORP and KIRLOSENG are most of the gain, and three of them ran for two months or more — which is the six-month review's own conclusion (holding period explains the book) arriving again by a different route.
This page says the ₹21.9L harness could not be reproduced and asks you to treat ₹13–17L as the finding. That was wrong. Replayed against the real bars of all 132 trades, the figure comes back at ₹23.8L — a 3.4% gap that is slippage and horizon assumptions, not a different result.
What was never true is that it came from sizing, or from a different entry rule, or from a shortlist. The same 132 fills at ₹40,000 of risk and a ₹5,00,000 cap give:
| same trades, same sizing | total |
|---|---|
| the exits actually taken | ₹12.44L |
| close-based exits | ₹23.8L |
| difference | ₹11.4L |
Every rupee of that gap is the exit rule: stop on a close below structure rather than a touch, sold at the next open, breakeven at +8%, a 20-day trail at 0.97, and the disaster line at stop × 0.95. It is the single largest measured effect in this system, and for a day it was being reported as an unexplained discrepancy between two harnesses.
Both figures are now pinned in tests/regressions/test_the_book.py against the real fills and 10,705 real bars, so a change to sizing moves one number, a change to the exits moves the other, and neither can drift unnoticed again. The missing-stop caveat below still stands: 39 of the 132 have no recorded entry stop and both figures assume 5% for them.
Two things above need qualifying. Neither is an arithmetic error — the ₹12.44L → ₹23.8L pair is properly paired, same fills, same sizing, same 60-session horizon, and it still reproduces.
First, it assumes capital we do not have. Both rows size every one of the 132 trades independently at ₹40,000 of risk capped at ₹5L, with no cash pool and no slot limit. Measured afterwards, that book needs a peak of ₹242.5L across 49 simultaneous positions on 8 May. The account is ₹60L. Sequenced through one ₹60L pool with twelve slots — so that a full account simply misses the next signal — the same exit rule returns ₹12.60L, or 21.0%, taking 47 of 127 signals and missing 80. The ₹23.8L is the right number for the question "what are these exits worth per trade"; it is not an amount this account could have made.
Second, "the single largest measured effect in this system" is no longer true. Holding sizing fixed at the book's own quantities, the exit rule is worth +3.4 points over what the book actually did (6.1% → 9.4% on ₹60L). Holding the exit rule fixed and changing only the sizing — ₹40,000 of risk, ₹5L a name, twelve slots, against the 35 thin positions the book really ran at its April peak — is worth +11.6 points (9.4% → 21.0%). Position sizing is roughly three and a half times the exit rule. The exit rule remains the largest thing we have measured about exits, which is what the sentence should have said.
Correction · 26 Sep — the figure is ₹23.8L, not ₹21.16L. Two faults, found in that order. The bar fixture these replays read held split-adjusted prices for TDPOWERSYS (2:1) and POCL (2.5:1), while the trade book beside it holds the prices actually traded. Those two symbols were replayed across two price scales — their entries read 1.97× and 2.48× their own bars. Correcting the bars to the book's raw scale moves the close-based replay from ₹21.16L to ₹23.2L. No rule changed; two symbols' bars were wrong.
Then to ₹23.8L on 26 Sep, after the broker's own contract-note trail was recovered. WELCORP's second lot was carrying the first lot's fill price: the P&L statement shows 270 shares in two lots for ₹355,605.30, and with the 21 May lot at 1348.81 confirmed by that day's GTT alert, the 22 May lot works out at ₹1,285.30 — a price that session actually traded, where 1348.81 never did. A lower entry buys a larger position for the same ₹40,000 of risk, which is why the sizing row moved further than the replay: ₹11.16L → ₹12.44L. The exit rule's edge over the recorded exits is ₹11.4L, not ₹10.25L.
The figures above have been restated in place, so nothing on this page needs reading through a substitution; the tables and the tally say ₹23.8L and ₹12.44L directly. Three further entry dates were corrected the same day from the tradebook and the GTT alerts (SAKAR, GOLDBEES, NATIONALUM). All of it is now pinned by tests/regressions/test_book_fills_are_possible.py, which fails if any recorded fill sits outside the bar of the session it claims.
Both corrections come from cortex/india_strategy/retrospectives/2026-09-25_ms_vs_ours_v3.py, which runs every arm through a single ₹60L pool. See MarketSmith's Exits Against Ours for the full study and for two superseded versions of it that got this wrong in the other direction.
An independent audit of this work found an assumption this page never stated, and it is a
material one. 41 of the 134 closed trades carry no initial_stop_price at
all — 39 of the 132 in the research sample. Checked directly against production:
count(*) filter (where initial_stop_price is null) on trading_trade
returns 41. Twenty-eight of those rows say explicitly that they were backfilled from broker fills,
and the audit inspected five database backups from May to September without finding a single
original entry stop.
Every number on this page treats those trades as having a 5% stop, because that is the convention the reconstruction adopted. That was never disclosed here, and the result is sensitive to it. The audit’s cash-constrained replay puts the range at:
| how the 39 missing stops are handled | modeled total |
|---|---|
| assume 5% — what this page did, silently | ₹16.87L |
| use six provisional pre-entry scan stops, assume the rest | ₹17.16L |
| reject every trade with a missing stop | ₹8.88L |
The audit’s primary figure of ₹16.87L sits inside the ₹13–17L range this page already published, which is the one thing here that holds up unchanged. What does not hold up is the silence: a result that halves under a different treatment of a third of its inputs needs that treatment on the page, not in a script. The missing stops should stay recorded as unknown rather than filled in.
The audit also separates the effect of the new exits from the effect of sizing and selection, which this page does not: at equal sizing, limits and admission rules it puts the exit change at +₹46,430, far below the headline improvement. Most of the gain here is sizing and selection, not the exit rule itself.
They are not the same measurement, and the first version of this page did not say so.
| figure | what it actually asks | window | trades | net |
|---|---|---|---|---|
| Book A | our own 132 fills, kept exactly as they were, re-sized to ₹40k/₹5L and re-exited on the close-based rule. No new entry gate applied. Reported as ₹21.9L yesterday under a harness not reproducible here. | Mar–Sep | 54 | ₹13.7L |
| ₹13.0L | the candidate population, best-of-best, without the breadth gate | Nov 2025–Aug | 57 | ₹11.5L |
| — | same, cut to this six-month window | Mar–Aug | 41 | ₹9.6L |
| ₹6.5L | same, with the breadth gate — the rule as it actually ships | Mar–Aug | 18 | ₹6.5L |
So the ladder is: −₹1.9L from measuring six months instead of ten, and −₹4.3L from the breadth gate, which removes roughly seven of every ten setups that clear the shortlist. The ₹21.9L is a different exercise altogether — it keeps every name we actually bought, including the ones the entry rules would refuse, and only changes the sizing and the exit.
Eighteen against 132 invites the reading "the new rules rejected 114 of our trades". That is not what happened. Measured at entry, our own 132 fills fail the gates like this:
| gate | passed | failed | what it means for the old book |
|---|---|---|---|
| G1 ext from 10MA ≤ 2% | 78 | 54 | two in five entries were extended |
| G2 ext from 20MA ≤ 8% | 98 | 34 | — |
| G3 30-day momentum ≥ 25% | 41 | 91 | the book mostly bought things that had not moved yet |
| G4 pivot stop ≤ 5% of fill | 13 | 119 | the scanner then used a different stop entirely (fixed-window low, fixed 21 Sep) |
| G7 RS ≥ 90 | 44 | 88 | — |
| G6 EPS growth ≥ 25% | 48 | 84 | — |
| G8 ADR 3–7% | 109 | 23 | — |
| all four price gates | 2 | 130 | only 22 of our 99 names appear anywhere in the population |
Seventy-two of the 132 came from paths the TIS gates never touched — manual picks, tradebook imports, the ETF sleeve, canslim, sideways, ORB. And of the 60 that did come from the scanner, the stop it used at the time sat a median 14.7% below the fill on the pivot definition, because the scanner was then using a fixed-window low — the bug fixed on 21 September.
So we have almost no live evidence about the rules we are now running. One of 132 fills matches a setup this population contains. The replay is not our book improved; it is a book we have never traded.
The rules as shipped admit about three setups a month. Twelve slots at ₹5L each is a ₹60L book. At this admission rate the book peaks at six positions and spends most of the window under three — the capital is not the constraint and never becomes one.
Either the deployment target or the admission rate has to move. The two candidates are the momentum gate (G3 refuses 91 of our 132 and is the single largest filter) and the breadth gate (it removes 70% of an already-short shortlist). Neither should move without the same grid, permutation and split test the others were held to.
Survivorship. The population is built against today's universe — names dropped or delisted since March are absent, and they are disproportionately the ones that fell.
Fills are modelled. Entry at the next session's open where the trigger was met, with no slippage beyond that, and exits at the following open after a close below the stop.
One path. This is a single sequencing of one population. The earlier work
(2026-09-23_entry_conditions_reconstructed.md) ran the grid, the permutation test and
the within-period split that this page does not repeat.
The number to take from it is the comparison, not the level: far fewer positions, each sized to the same risk, with the left tail bounded by a cap the old book did not enforce.