Trading Book · research / 27 September 2026

86 skipped trades.
Could entry filters improve the result?

A detailed audit of the ₹21.94L backtest: capacity failures, 59 entry rules, changed holdings, and what survives the cost and timing checks.

Superseded on 7 October. The ₹26.96L on this page allowed several ₹5L lots in one stock and applied no market entry gate. Under one lot per stock and the gate the same 127 opportunities give ₹13,11,539 — ₹7,01,272 realised, ₹6,10,267 open. The reasoning about ADR selection below still stands; every ₹26.96L and ₹24.12L figure on this page does not. See the corrected replay, 7 October.
Fixed ₹60 lakh127 historical opportunities1 April–22 September 2026Same no-breakeven exit policy
Original portfolio
₹21.94L
₹10.18L realized · ₹11.76L open
ADR 2%–5% · first screen
₹24.12L
₹11.06L realized · ₹13.06L open
ADR 2%–4% · explored afterward
₹26.96L
₹7.07L realized · ₹19.89L open

Research dated 27 September 2026. Yes: lagged ADR filters improve the marked historical result with the same ₹60L limit. The strongest first-screen result is ₹24.12L at ADR 2%–5%; a later, explicitly post-screening 2%–4% test reaches ₹26.96L. Neither is a verified future return. The tighter rule's increase is entirely driven by a larger open-profit component: realized profit falls to ₹7.07L.

This research changes no production code, parameters, trades or deployments. It studies admission to the previously verified historical entry stream. It does not run the complete current production scanner.

Why the original 86 were skipped

There were 127 opportunities, 41 accepted lots and 86 capacity rejections. The simulator records 76 slots and 10 cash because it tests the twelve-slot limit first. Reconstructing both conditions shows that all 76 slot rejections also lacked enough cash. The remaining ten had a spare slot but insufficient cash for the calculated whole lot. These were not quality-filter failures.

By 15 April, the original queue had filled all twelve slots, spending ₹59,97,018.39 and leaving only ₹2,981.61. It still held those same twelve lots when LAURUSLABS arrived on 23 April and CPPLUS on 5 May. That is why later desirable entries could not be added. In another example, KIRLOSENG on 15 May had eleven occupied slots and about ₹4.93L free, but the backtest required its calculated almost-₹5L lot; it does not automatically reduce quantity to the remaining cash.

The skips were concentrated early: April 40, May 27, June 2, July 5, August 9, September 3. Under the same standalone exits, 29 skipped opportunities finish positive and 57 negative. The 86 standalone outcomes sum to ₹7.71L, but that is unfunded, includes overlapping repeated stocks, and cannot be added to the baseline while claiming the ₹60L constraint.

Any workable filter must apply to every incoming opportunity, freeing cash before future winners arrive. It cannot see those future winners or cherry-pick the profitable 29. The complete before-entry cash and holdings for each decision are in baseline-decisions.csv.

Portfolio results, with the exits held fixed

Entry rule P&L Change Realized Open gains Taken Daily-close max drawdown
Original queue, no added filter ₹21.94L — ₹10.18L ₹11.76L 41 6.26%
ADR 2%–5% ₹24.12L +₹2.18L ₹11.06L ₹13.06L 34 5.07%
ADR ≤5% ₹24.04L +₹2.10L ₹11.06L ₹12.98L 36 5.25%
ADR 3%–5% ₹23.52L +₹1.59L ₹10.20L ₹13.32L 33 5.21%
Least MA20 extension first ₹22.97L +₹1.03L ₹11.21L ₹11.76L 40 6.19%
ADR 2%–4% — post-screening ₹26.96L +₹5.02L ₹7.07L ₹19.89L 25 5.24%

Daily equity and realized versus open P&L

All results start with ₹60L, use at most twelve simultaneous lots and ₹5L purchase cost per lot, and retain ₹40k initial structural risk sizing. No capital is added. The unchanged winning exit policy is: initial structural stop 8% below entry; disaster protection at 95% of that structural stop; close breach exits at the next open; ratchet to 97% of the 20 post-entry closes once available; no breakeven, target or eight-week hold. Entry-session exclusion, the historical entry prices and the September 22 terminal mark remain unchanged. Closed sales include 0.5% slippage; this headline table excludes other fees and terminal liquidation costs.

Results count repeated entries as separate lots, including multiple positions in the same stock. They are not annualized returns. Drawdown uses daily closing equity and does not capture worse intraday drawdown. Realized and open columns must be distinguished.

The first screen contained 59 declared simple policies, covering ADR, trend, momentum, relative strength versus NIFTYBEES, proximity to highs, extension, turnover, prior volume, dry-up, ETFs, duplicate positions and same-date ranking. The 2%–5% rule won that screen. Subsequent neighboring thresholds and combinations are saved separately as post-screening diagnostics; 2%–4% was discovered in those follow-ups. This sequence is explicit so that a later maximum is not presented as a rule chosen beforehand.

The actual filters

For an entry on date D, use only the twenty completed trading sessions strictly before D:

ADR20 = 100 × mean((session_high − session_low) / session_close)

Candidate A: require 2 ≤ ADR20 ≤ 5
Candidate B: require 2 ≤ ADR20 ≤ 4     # explored after the initial screen

Both bounds are inclusive. Require twenty valid bars; reject when this feature is unavailable. Retain original arrival order for the primary ADR tests. This is the average high-low range divided by close, not ATR, not a close-to-close change proxy, and not the entry day's completed range. GSPCROP and RSL have fewer than twenty prior sessions and are rejected by these rules; the baseline retains them. A history-only rejection makes ₹15.29L, so the ADR result is not simply an IPO-history exclusion.

The broad result is driven more by the upper edge than the precise lower edge: ADR ≤5% alone makes ₹24.04L, only about ₹8,040 below 2%–5%. There is little evidence here that a precisely 2% floor is essential. A 3%–5% band makes ₹23.52L. The production snapshot already configured entry.adr_min_pct=3 and entry.adr_max_pct=5; the ₹21.94L winning exit backtest did not impose that entry gate. Testing one gate on the old book does not reproduce all the other production entry requirements.

A separate ranking rule sorts candidates available on the same date by ascending 100 × (prior_close / prior_SMA20 − 1), missing values last, and keeps the existing cash and slot checks. It returns ₹22.97L, but is sensitive to cash assumptions. This score is signed: stocks below the average rank earlier; it is not the absolute distance to the average. The date-only book cannot establish when candidates actually became available intraday, so this is a batch-ranking diagnostic.

Which missed trades became possible?

The 2%–5% portfolio keeps 23 original lots, newly admits 11 skipped lots (eight positive and three negative), and loses 18 original admissions. New lots contribute ₹3.24L; the displaced original lots had contributed ₹1.06L, producing the ₹2.18L net increase. Newly admitted positives include LAURUSLABS on 10 July (+₹1.53L), AVALON on 7 August (+₹0.84L), and LAURUSLABS on 28 July (+₹0.75L). Seventeen original lots fail the new gate; another loses capacity through the changed portfolio path. The rule still misses several of the largest early winners.

The 2%–4% portfolio keeps twelve original lots, newly admits thirteen skipped lots (seven positive and six negative), and displaces 29 original admissions. The new lots contribute ₹9.18L and the removed original lots had contributed ₹4.16L, giving the ₹5.02L net increase. It captures the earlier LAURUSLABS opportunity and SHILPAMED, but also rejects some profitable KIRLOSENG, INDSWFTLAB and TDPOWERSYS lots.

Skipped opportunity Hypothetical lot P&L ADR before entry Result with 2%–4% filter
LAURUSLABS · 2026-04-23 ₹3.92L 2.69% taken
ATHERENERG · 2026-04-27 ₹3.16L 5.50% filter
LAURUSLABS · 2026-05-08 ₹3.16L 2.69% slots
SHILPAMED · 2026-08-05 ₹2.95L 3.44% taken
CPPLUS · 2026-05-05 ₹2.07L 4.66% filter
KIRLOSENG · 2026-05-15 ₹1.94L 3.94% cash
KIRLOSENG · 2026-04-27 ₹1.67L 4.33% filter
LAURUSLABS · 2026-07-10 ₹1.53L 3.13% taken

This table is an after-the-fact explanation, not an input to selection. A positive missed trade can still be rejected by the improved portfolio, and a newly accepted trade can lose money.

The ₹26.96L result has ₹19.89L open in only three stock names: three LAURUSLABS lots, two WELCORP lots and one SHILPAMED lot. Its open-profit increase exceeds its total improvement because realized profit falls from ₹10.18L to ₹7.07L. Its best five lots contribute ₹22.88L. This remains a concentrated outcome, even though its daily-close drawdown is smaller than baseline.

Detailed substitutions: validation.json; adr_2_to_5-trades.csv; posthoc_adr_2_to_4-trades.csv.

Explore all 86 skipped trades

Sorted by hypothetical standalone outcome for explanation only. These outcomes include open marks and are not jointly fundable. “Slots” is the first recorded rejection; it can overlap a cash shortage. “Filter” means the new entry gate rejected the setup. A different admission path can keep a qualifying trade out for lack of capacity.

86 of 86 skipped trades shown.

IDStockEntry dateBaseline reasonSlots usedCash beforePrior ADRStandalone P&LWith 2%–5%With 2%–4%
32LAURUSLABS2026-04-23slots12₹2,9822.69%₹3.92Lslotstaken
41ATHERENERG2026-04-27slots12₹2,9825.50%₹3.16Lfilterfilter
65LAURUSLABS2026-05-08slots12₹2,9822.69%₹3.16Lcashslots
113SHILPAMED2026-08-05slots12₹78,2223.44%₹2.95Lslotstaken
58CPPLUS2026-05-05slots12₹2,9824.66%₹2.07Lslotsfilter
73KIRLOSENG2026-05-15cash11₹493,1133.94%₹1.94Lcashcash
42KIRLOSENG2026-04-27slots12₹2,9824.33%₹1.67Lslotsfilter
99LAURUSLABS2026-07-10slots12₹124,9753.13%₹1.53Ltakentaken
62HONASA2026-05-07slots12₹2,9823.62%₹1.13Lcashslots
98RUBICON2026-07-10slots12₹124,9755.33%₹1.00Lfilterfilter
14CLEANMAX2026-04-16slots12₹2,9825.40%₹0.88Lfilterfilter
115AVALON2026-08-07slots12₹78,2224.73%₹0.84Ltakenfilter
108LAURUSLABS2026-07-28slots12₹143,0702.89%₹0.75Ltakentaken
53SUNFLAG2026-05-04slots12₹2,9824.92%₹0.67Lslotsfilter
39SENORES2026-04-27slots12₹2,9824.10%₹0.52Lslotsfilter
116AVALON2026-08-07slots12₹78,2224.73%₹0.50Lslotsfilter
112UNIPARTS2026-08-04slots12₹78,2223.91%₹0.50Lslotstaken
20AEQUS2026-04-17slots12₹2,9825.06%₹0.46Lfilterfilter
51BELRISE2026-04-30slots12₹2,9823.32%₹0.25Lslotsslots
15SYRMA2026-04-16slots12₹2,9824.16%₹0.24Ltakenfilter
89ADANIENSOL2026-06-05cash11₹496,1944.69%₹0.23Ltakenfilter
64CGPOWER2026-05-07slots12₹2,9823.17%₹0.23Lcashslots
76GVT&D2026-05-18cash11₹493,8053.84%₹0.22Ltakentaken
107VADILALIND2026-07-28slots12₹143,0703.25%₹0.16Ltakentaken
49MCX2026-04-28slots12₹2,9823.08%₹0.12Lslotsslots
97RPTECH2026-07-09slots12₹124,9756.18%₹0.06Lfilterfilter
70ADANIPOWER2026-05-14cash11₹493,1134.07%₹0.05Ltakenfilter
74ADANIPOWER2026-05-15cash11₹493,1134.14%₹0.04Lcashfilter
50SGMART2026-04-28slots12₹2,9824.96%₹0.01Lslotsfilter
126GOLDBEES2026-09-11slots12₹125,6411.12%₹-0.01Lfilterfilter
33KINGFA2026-04-23slots12₹2,9823.27%₹-0.01Lslotstaken
30NMDC2026-04-22slots12₹2,9822.98%₹-0.06Lslotstaken
29RISHABH2026-04-17slots12₹2,9826.33%₹-0.09Lfilterfilter
114AETHER2026-08-06slots12₹78,2223.82%₹-0.10Lslotsslots
18GMDCLTD2026-04-16slots12₹2,9824.13%₹-0.11Lslotsfilter
125MON1002026-09-10slots12₹125,6410.91%₹-0.11Lfilterfilter
124NIFTYBEES2026-09-07slots12₹125,6411.24%₹-0.12Lfilterfilter
26TENNIND2026-04-17slots12₹2,9823.97%₹-0.13Lslotstaken
57JUNIORBEES2026-05-05slots12₹2,9822.03%₹-0.15Lslotsslots
17QPOWER2026-04-16slots12₹2,9825.50%₹-0.15Lfilterfilter
83LLOYDSME2026-05-25slots12₹6,9383.31%₹-0.17Ltakentaken
36GLENMARK2026-04-24slots12₹2,9823.23%₹-0.17Lslotsslots
52ADANIPOWER2026-05-04slots12₹2,9824.13%₹-0.18Lslotsfilter
22EMMVEE2026-04-17slots12₹2,9826.01%₹-0.20Lfilterfilter
72LLOYDSME2026-05-14cash11₹493,1133.26%₹-0.21Lcashtaken
12SILVERCASE2026-04-15slots12₹2,9825.56%₹-0.21Lfilterfilter
16ICICIAMC2026-04-16slots12₹2,9824.62%₹-0.22Ltakenfilter
44TATASTEEL2026-04-27slots12₹2,9822.21%₹-0.27Lslotsslots
43GPIL2026-04-27slots12₹2,9823.67%₹-0.27Lslotsslots
28NATCOPHARM2026-04-17slots12₹2,9823.66%₹-0.27Lslotstaken
119PSUBNKBEES2026-08-14slots12₹78,2222.17%₹-0.37Lslotsslots
13LENSKART2026-04-15slots12₹2,9824.21%₹-0.39Ltakenfilter
67CHENNPETRO2026-05-08slots12₹2,9824.82%₹-0.41Lcashfilter
47IMFA2026-04-28slots12₹2,9824.67%₹-0.42Lslotsfilter
118ITBEES2026-08-14slots12₹78,2222.95%₹-0.42Lslotsslots
24SMSPHARMA2026-04-17slots12₹2,9825.19%₹-0.42Lfilterfilter
56BRITANNIA2026-05-05slots12₹2,9822.48%₹-0.43Lslotsslots
117BHARATFORG2026-08-07slots12₹78,2222.16%₹-0.43Lslotsslots
19CEINSYS2026-04-16slots12₹2,9827.42%₹-0.44Lfilterfilter
71JAYNECOIND2026-05-14cash11₹493,1135.02%₹-0.45Lfilterfilter
31PFOCUS2026-04-22slots12₹2,9826.49%₹-0.45Lfilterfilter
54MACPOWER2026-05-04slots12₹2,9825.98%₹-0.46Lfilterfilter
55LINDEINDIA2026-05-04slots12₹2,9823.06%₹-0.46Lslotsslots
37AUBANK2026-04-24slots12₹2,9823.25%₹-0.46Lslotsslots
48NATIONALUM2026-04-29slots12₹2,9823.14%₹-0.46Lslotsslots
25SHRIPISTON2026-04-17slots12₹2,9824.88%₹-0.47Lslotsfilter
121MOREALTY2026-08-20slots12₹122,1142.23%₹-0.47Lslotsslots
27GMDCLTD2026-04-17slots12₹2,9824.67%₹-0.47Lslotsfilter
60SANSERA2026-05-07slots12₹2,9824.47%₹-0.49Lcashfilter
46STEELCAS2026-04-28slots12₹2,9825.30%₹-0.50Lfilterfilter
23PFOCUS2026-04-17slots12₹2,9826.19%₹-0.50Lfilterfilter
66ARFIN2026-05-08slots12₹2,9824.63%₹-0.51Lcashfilter
35ABSLAMC2026-04-24slots12₹2,9824.39%₹-0.51Lslotsfilter
86BHEL2026-05-29cash11₹455,0463.83%₹-0.51Lslotscash
85VEDL2026-05-26slots12₹6,9384.12%₹-0.52Lslotsfilter
87VEDL2026-06-01cash11₹455,0463.99%₹-0.54Lslotscash
40SARDAEN2026-04-27slots12₹2,9823.33%₹-0.57Lslotsslots
84POCL2026-05-26slots12₹6,9385.41%₹-0.61Lfilterfilter
45ROSSTECH2026-04-27slots12₹2,9826.12%₹-0.65Lfilterfilter
69MACPOWER2026-05-14cash11₹493,1135.38%₹-0.65Lfilterfilter
21SAKAR2026-04-23slots12₹2,9825.62%₹-0.65Lfilterfilter
59JAINREC2026-05-07slots12₹2,9823.63%₹-0.65Lcashslots
34RHETAN2026-04-24slots12₹2,9823.33%₹-0.65Lslotsslots
63APEX2026-05-07slots12₹2,9825.99%₹-0.65Lfilterfilter
61APEX2026-05-07slots12₹2,9825.99%₹-0.65Lfilterfilter
38RHETAN2026-04-24slots12₹2,9823.33%₹-0.65Lslotsslots

Every added and displaced lot

These are portfolio substitutions, not one-to-one swaps. Earlier decisions change which later lots can fit. Removed trades can be profitable; newly admitted trades can lose. Amounts use the same modeled exits and September 22 mark.

ADR 2%–5%: newly admitted — 11 lots, ₹3.24L contribution
StockEntry datePrior ADRLot P&LExit / mark statusNew decision
LAURUSLABS2026-07-103.13%₹1.53Lopentaken
AVALON2026-08-074.73%₹0.84Lclose_stoptaken
LAURUSLABS2026-07-282.89%₹0.75Lopentaken
SYRMA2026-04-164.16%₹0.24Lclose_stoptaken
ADANIENSOL2026-06-054.69%₹0.23Lclose_stoptaken
GVT&D2026-05-183.84%₹0.22Lclose_stoptaken
VADILALIND2026-07-283.25%₹0.16Lclose_stoptaken
ADANIPOWER2026-05-144.07%₹0.05Lclose_stoptaken
LLOYDSME2026-05-253.31%₹-0.17Lclose_stoptaken
ICICIAMC2026-04-164.62%₹-0.22Lclose_stoptaken
LENSKART2026-04-154.21%₹-0.39Lclose_stoptaken
ADR 2%–5%: displaced baseline — 18 lots, ₹1.06L contribution
StockEntry datePrior ADRLot P&LExit / mark statusNew decision
INDSWFTLAB2026-07-205.53%₹1.92Ldisasterfilter
CUPID2026-07-245.69%₹1.06Ldisasterfilter
ATHERENERG2026-08-034.29%₹1.04Lopenslots
BAJAJCON2026-05-205.23%₹0.47Lclose_stopfilter
AMAGI2026-07-086.72%₹0.44Lclose_stopfilter
GSPCROP2026-04-15Unavailable₹0.20Lclose_stopfilter
RSL2026-04-15Unavailable₹0.08Lclose_stopfilter
SENORES2026-06-245.07%₹0.01Lclose_stopfilter
JUNIORBEES2026-09-071.93%₹-0.07Lopenfilter
MOMENTUM502026-08-181.91%₹-0.18Lclose_stopfilter
AEQUS2026-07-036.52%₹-0.21Lclose_stopfilter
BUILDPRO2026-04-156.45%₹-0.30Lclose_stopfilter
GALAPREC2026-07-025.50%₹-0.44Lclose_stopfilter
POCL2026-05-255.33%₹-0.51Lclose_stopfilter
MARKSANS2026-06-235.39%₹-0.55Lclose_stopfilter
PRECWIRE2026-06-045.84%₹-0.58Lclose_stopfilter
SANDHAR2026-06-196.58%₹-0.65Ldisasterfilter
JAINREC2026-05-185.05%₹-0.65Ldisasterfilter
ADR 2%–4% (post-screening): newly admitted — 13 lots, ₹9.18L contribution
StockEntry datePrior ADRLot P&LExit / mark statusNew decision
LAURUSLABS2026-04-232.69%₹3.92Lopentaken
SHILPAMED2026-08-053.44%₹2.95Lopentaken
LAURUSLABS2026-07-103.13%₹1.53Lopentaken
LAURUSLABS2026-07-282.89%₹0.75Lopentaken
UNIPARTS2026-08-043.91%₹0.50Lclose_stoptaken
GVT&D2026-05-183.84%₹0.22Lclose_stoptaken
VADILALIND2026-07-283.25%₹0.16Lclose_stoptaken
KINGFA2026-04-233.27%₹-0.01Lclose_stoptaken
NMDC2026-04-222.98%₹-0.06Lclose_stoptaken
TENNIND2026-04-173.97%₹-0.13Lclose_stoptaken
LLOYDSME2026-05-253.31%₹-0.17Lclose_stoptaken
LLOYDSME2026-05-143.26%₹-0.21Lclose_stoptaken
NATCOPHARM2026-04-173.66%₹-0.27Ldisastertaken
ADR 2%–4% (post-screening): displaced baseline — 29 lots, ₹4.16L contribution
StockEntry datePrior ADRLot P&LExit / mark statusNew decision
KIRLOSENG2026-05-134.09%₹1.97Lclose_stopfilter
INDSWFTLAB2026-07-205.53%₹1.92Ldisasterfilter
TDPOWERSYS2026-04-154.66%₹1.46Lclose_stopfilter
CUPID2026-07-245.69%₹1.06Ldisasterfilter
ATHERENERG2026-08-034.29%₹1.04Lopenfilter
APARINDS2026-05-214.05%₹0.62Lclose_stopfilter
UTLSOLAR2026-04-154.43%₹0.53Lclose_stopfilter
BAJAJCON2026-05-205.23%₹0.47Lclose_stopfilter
AMAGI2026-07-086.72%₹0.44Lclose_stopfilter
GSPCROP2026-04-15Unavailable₹0.20Lclose_stopfilter
RRKABEL2026-07-274.48%₹0.17Lclose_stopfilter
TALBROAUTO2026-06-234.99%₹0.12Lclose_stopfilter
RSL2026-04-15Unavailable₹0.08Lclose_stopfilter
PHARMABEES2026-08-262.49%₹0.04Lopenslots
SENORES2026-06-245.07%₹0.01Lclose_stopfilter
JUNIORBEES2026-09-071.93%₹-0.07Lopenfilter
RPTECH2026-07-274.62%₹-0.13Ldisasterfilter
MOMENTUM502026-08-181.91%₹-0.18Lclose_stopfilter
AEQUS2026-07-036.52%₹-0.21Lclose_stopfilter
BUILDPRO2026-04-156.45%₹-0.30Lclose_stopfilter
GALAPREC2026-07-025.50%₹-0.44Lclose_stopfilter
BHEL2026-05-214.07%₹-0.47Lclose_stopfilter
POCL2026-05-255.33%₹-0.51Lclose_stopfilter
MARKSANS2026-06-235.39%₹-0.55Lclose_stopfilter
PSPPROJECT2026-07-144.39%₹-0.55Lclose_stopfilter
PRECWIRE2026-06-045.84%₹-0.58Lclose_stopfilter
SANDHAR2026-06-196.58%₹-0.65Ldisasterfilter
MARKSANS2026-07-154.16%₹-0.65Ldisasterfilter
JAINREC2026-05-185.05%₹-0.65Ldisasterfilter

Costs, cash timing and entry order

Rule Original Same lots, modeled costs deducted Costs affect admissions Sale cash next date Both delayed cash and costs
Original queue, no added filter ₹21.94L ₹21.24L ₹18.90L ₹20.17L ₹17.90L
ADR 2%–5% ₹24.12L ₹23.50L ₹23.25L ₹19.94L ₹19.42L
ADR 3%–5% ₹23.52L ₹22.95L ₹20.84L ₹20.24L ₹18.79L
Least MA20 extension first ₹22.97L ₹22.29L ₹17.32L ₹14.80L ₹10.65L
ADR 2%–4% — post-screening ₹26.96L ₹26.40L ₹28.00L ₹23.28L ₹27.58L

The modeled cost is 0.25% of entry notional, plus a 0.5% liquidation haircut on remaining open holdings, in addition to the original closed-sale slippage. It is a sensitivity assumption, not a reconstructed broker fee bill. The same-lots column just deducts that drag. The next column charges it when sizing the funded portfolio and can change later admissions. Therefore the funded cost scenario can occasionally make more money by forcing a different selection, as happens for 2%–4%; costs themselves do not create that increase.

“Sale cash next date” disallows recycling any sale proceeds into another entry on the same calendar date. It is an execution-timing stress, not a claim about actual broker settlement rules. The 2%–5% advantage disappears in that scenario alone: ₹19.94L versus baseline ₹20.17L. The 2%–4% follow-up remains ahead at ₹23.28L. Ranking alone deteriorates sharply, so I would not combine it with the ADR filter and assume its benefits add. The tested 2%–5% + least-extension combination makes ₹23.77L, below the standalone ₹24.12L; 3%–5% + that ranking makes ₹21.42L.

I also used 200 paired random permutations of opportunities within each entry date. Every pair uses the same ordering for its filtered and unfiltered portfolio:

Rule Median P&L 10th–90th percentile Beats matched baseline queue
Original queue, no added filter ₹17.51L ₹13.48L–₹22.57L —
ADR 2%–5% ₹23.51L ₹22.16L–₹23.96L 189/200
ADR 3%–5% ₹21.42L ₹20.94L–₹23.25L 145/200
Least MA20 extension first ₹22.97L ₹22.97L–₹22.97L 194/200
ADR 2%–4% — post-screening ₹26.96L ₹26.96L–₹26.96L 200/200

These permutations only stress admission order on the same historical path. They are not 200 independent market samples, confidence intervals or a probability of future success. The 2%–4% outcome is identical across these shuffles because the tested same-date permutations do not change its admitted set. Deterministic ranking also removes most ordering variability by definition.

Concentration sensitivity reruns the funded ledger after removing a stock's opportunities, allowing other entries to replace it. Without WELCORP, baseline is ₹11.91L, ADR 2%–5% is ₹13.88L, and ADR 2%–4% is ₹15.06L. Without LAURUSLABS, the last strategy is ₹20.37L. Prohibiting simultaneous duplicate stocks changes 2%–4% to ₹16.47L; that is a different position policy, not a free improvement.

Temporal checks and what they establish

ADR band Full-period P&L Apr–Jun P&L, marked June 30 Jul–Sep new entries, fresh account
2%–4% ₹26.96L ₹7.37L ₹5.50L
2%–4.5% ₹22.57L ₹8.91L ₹6.73L
2%–5% ₹24.12L ₹11.25L ₹6.74L
2%–5.5% ₹23.07L ₹10.11L ₹4.35L
2%–6% ₹13.56L ₹7.35L ₹5.78L

The later-entry column starts a fresh ₹60L account on July 1. The first column carries all holdings continuously. The separate cohorts cannot be added to reconstruct the full-period result. All training marks were truncated at the training cutoff; no eventual September profit was used to rank a June strategy.

Using April–June data alone selected least MA20 extension, not the full-period winning ADR band. Freezing that selected rule for new July-onward entries while retaining the existing holdings leaves the account at ₹21.94L, identical to baseline. Monthly rule selection from prior data and continuous holdings returns ₹22.40L, only about ₹45,940 above baseline. The 2%–4% follow-up would not have looked superior at June 30: its ₹7.37L was below baseline ₹10.08L and 2%–5%'s ₹11.25L.

So there is evidence for testing a volatility filter, but no untouched forward validation of the exact 4% threshold. The sample had already been examined before this work, and the original exit policy itself was selected on it. Selecting the best of many backtests risks fitting this particular history; see the primary research on backtest overfitting. No PBO statistic or independent significance test is claimed here.

Practical conclusion

Use ADR ≤5% as the clearest broad finding from the initial screen; the existing 3%–5% band and the wider 2%–5% band are both sensible candidates for a fixed forward comparison. Treat 2%–4% as the higher-return challenger, with its materially lower realized profit and concentrated open gains visible alongside total P&L. Freeze the alternatives before collecting new outcomes, and evaluate actual fees, fill timing, available cash and per-stock exposure using the same versioned no-breakeven exit policy.

I would not tighten production to 4% solely to obtain the historical ₹26.96L number. There is also no evidence here for adding every familiar quality gate: trend-stack filtering returned ₹14.59L, prior-volume ≥1× returned ₹6.84L, prior-volume ≥1.5× returned ₹5.20L, and RS60 above the benchmark returned ₹14.73L. Those are results on this supplied book, not universal judgments about those factors.

The research cannot assess historical fundamental, earnings, market-regime or sector/RS-percentile filters without their point-in-time inputs. It also cannot value trades absent from the supplied historical book. The full production scanner must be replayed on an archived universe before any of these numbers can be called a production expectation.

All 59 first-screen results

Every declared candidate is shown, including weak and negative results. Rows are sorted by full-period P&L; this ordering was not known before testing. “Later cohort” uses a fresh ₹60L account for July–September entries and cannot be added to the first-period result.

#Entry rule (all inputs lagged)Full P&LTakenFilteredApr–JunLater cohort
1ADR20 (%) ≥ 2; ADR20 (%) ≤ 5₹24.12L3442₹11.25L₹6.74L
2ADR20 (%) ≤ 5₹24.04L3637₹11.25L₹6.66L
3ADR20 (%) ≥ 3; ADR20 (%) ≤ 5₹23.52L3357₹10.18L₹6.41L
4Rank signed MA20 extension, lowest first₹22.97L400₹11.56L₹5.61L
5No extra entry filter; original row order₹21.94L410₹10.08L₹5.39L
6Rank relative 60-session return, highest first₹21.86L380₹9.00L₹5.39L
7Rank 60-session return, highest first₹21.86L380₹9.00L₹5.39L
8ADR20 (%) ≥ 3; ADR20 (%) ≤ 6₹21.57L3633₹7.51L₹6.27L
9ADR20 (%) ≥ 3; ADR20 (%) ≤ 6; 60-session return minus NIFTYBEES (pp) ≥ 0₹21.47L3437₹7.86L₹6.27L
10ADR20 (%) ≥ 3; ADR20 (%) ≤ 6; Rank relative 60-session return, highest first₹21.32L3633₹8.17L₹6.27L
11Close / 60-session high (%) ≥ 90₹20.66L3816₹6.67L₹5.39L
1260-session return (%) ≥ 0₹20.55L3913₹6.99L₹5.39L
1360-session return minus NIFTYBEES (pp) ≥ 10₹20.32L3925₹6.99L₹5.26L
14Extension above SMA20 (%) ≥ 0; SMA20 > SMA50 required; Rank relative 60-session return, highest first₹20.19L4031₹8.83L₹5.90L
15Close / 20-session high (%) ≥ 90₹19.67L4011₹6.80L₹5.39L
1620-session return (%) ≥ 0₹19.45L4113₹6.80L₹6.22L
1760-session return (%) ≥ 20₹18.94L4048₹6.99L₹5.89L
18ETF excluded; Rank relative 60-session return, highest first₹18.89L3714₹8.26L₹5.73L
19Rank 20-session return, highest first₹18.50L400₹8.03L₹5.39L
2060-session return minus NIFTYBEES (pp) ≥ 5₹18.21L3920₹7.49L₹5.26L
21Extension above SMA20 (%) ≥ 0; Extension above SMA20 (%) ≤ 15₹18.06L3921₹8.06L₹5.32L
22Extension above SMA20 (%) ≥ 0; Extension above SMA20 (%) ≤ 10₹18.01L3641₹6.37L₹5.37L
23One held lot per stock₹17.99L410₹8.96L₹5.80L
24Extension above SMA20 (%) ≤ 15₹17.74L427₹9.58L₹5.39L
25ADR20 (%) ≥ 3; ADR20 (%) ≤ 8₹17.71L3822₹7.41L₹5.61L
26ADR20 (%) ≥ 3₹17.71L3822₹7.41L₹5.61L
27ETF excluded₹17.55L3914₹7.15L₹5.73L
28Extension above SMA20 (%) ≥ 0₹17.41L4016₹7.41L₹5.32L
29Rank turnover, highest first₹17.31L420₹10.44L₹5.61L
30ADR20 (%) ≥ 3; ADR20 (%) ≤ 6; Extension above SMA20 (%) ≥ 0; SMA20 > SMA50 required₹17.31L3751₹5.02L₹6.27L
31Extension above SMA50 (%) ≥ 0₹16.59L4111₹6.73L₹5.40L
3220-session return (%) ≥ 5₹15.74L4030₹4.95L₹6.82L
33Rank proximity to 20-session high, highest first₹15.51L430₹8.70L₹5.61L
3420-session median turnover (₹Cr) ≥ 1₹15.29L412₹7.91L₹5.39L
35Close / 20-session high (%) ≥ 95₹15.13L3550₹3.48L₹6.80L
36ADR20 (%) ≥ 2₹15.07L407₹7.91L₹5.30L
3760-session return minus NIFTYBEES (pp) ≥ 0₹14.73L418₹7.58L₹5.39L
38Extension above SMA20 (%) ≥ 0; SMA20 > SMA50 required; SMA50 rising over 20 sessions required₹14.60L4133₹4.50L₹5.32L
39Extension above SMA20 (%) ≥ 0; SMA20 > SMA50 required₹14.59L4231₹4.49L₹5.32L
4020-session median turnover (₹Cr) ≥ 10₹14.52L4221₹7.75L₹6.43L
41ADR20 (%) ≥ 2; ADR20 (%) ≤ 6₹13.56L4118₹7.35L₹5.78L
42ADR20 (%) ≤ 6₹13.48L4313₹7.35L₹5.70L
4320-session return (%) ≥ 10₹13.46L3846₹-0.16L₹5.67L
4460-session return (%) ≥ 10₹13.06L4131₹3.89L₹5.26L
45Extension above SMA20 (%) ≥ 0; SMA20 > SMA50 required; Extension above SMA20 (%) ≤ 10₹12.88L3449₹5.42L₹5.37L
46Close / 60-session high (%) ≥ 95₹12.76L3557₹1.61L₹6.80L
47Extension above SMA20 (%) ≤ 10₹12.56L4227₹8.54L₹5.16L
4820-session median turnover (₹Cr) ≥ 5₹11.80L4514₹8.25L₹5.11L
49Extension above SMA20 (%) ≤ 5₹10.86L3069₹5.89L₹7.91L
5060-session return minus NIFTYBEES (pp) ≥ 0; Extension above SMA20 (%) ≤ 10₹10.11L4131₹6.31L₹5.16L
51Extension above SMA20 (%) ≥ 0; Extension above SMA20 (%) ≤ 5₹8.30L2883₹3.32L₹8.40L
52Prior volume / preceding 20 mean ≥ 1₹6.84L2091₹1.75L₹5.10L
53Close / 20-session high (%) ≥ 98₹6.06L21102₹0.79L₹3.29L
545-session mean volume / 20-session mean ≤ 0.8₹5.88L3667₹4.70L₹3.95L
55Prior volume / preceding 20 mean ≥ 1.5₹5.20L18105₹1.34L₹4.19L
56ADR20 (%) ≥ 4; ADR20 (%) ≤ 8₹4.17L4058₹2.28L₹5.04L
57ADR20 (%) ≥ 4₹4.17L4058₹2.28L₹5.04L
58Prior volume / preceding 20 mean ≥ 2₹1.58L14113₹-1.67L₹3.58L
595-session mean volume / 20-session mean ≤ 1₹-1.84L4447₹-1.60L₹5.52L

Relative strength here is the difference between two 60-session percentage returns, not a point-in-time universe percentile. Volume and turnover use completed prior sessions. Missing required features fail a gate and rank last. Multiple conditions in a row are ANDed. The exact machine-readable definitions are in candidate-library.json.

Reproduction and verification

The public evidence package includes all 127 pre-entry feature rows, frozen exits, policy definitions, decisions, ledgers and results. Download this directory from the repository and run the standard-library verifier:

python3 replay.py

This public verifier reproduces the funded allocation for all 59 first-screen policies and the post-screening 2%–4% rule from the supplied features and exits. It does not independently reconstruct the indicators or stop exits. The original offline analysis and independent ledger checks described below used the raw historical panels and service code; those local dependencies are not bundled here. The raw market-data panel has not been redistributed.

The baseline reproduces ₹21,93,571.011622429, 41 accepted, 76 slot-labeled skips and ten cash-only skips. All 127 singleton exits match the earlier source replay by date and price. Every feature timestamp is strictly before entry; all available ADR values were independently recomputed from the raw OHLC frame. Known splits are normalized. No entry-day high, low, close or volume is used in selection.

The separate prior-audit ledger independently verifies all 59 first-screen portfolios and 17 uniquely named post-screening checks, including their accepted-trade order for the first screen. Selected fee scenarios also match. In every funded run, cash stays nonnegative, simultaneous lots never exceed twelve and purchase-cost exposure stays within ₹60L. Maximum exposure is a cost-basis constraint; account market value can exceed ₹60L through gains.

Data has not been re-fetched or independently authenticated against an exchange in this follow-up. Historical fills and the known entry-price/data-quality limitations from the prior audit remain. The original analysis used local trusted historical inputs and test settings with no broker/database/network calls. The public package contains source filenames and hashes, with machine-specific paths removed. Provenance and missing-history cases are in validation.json.

Files: declared first-screen rules; all 59 results; post-screening sensitivities; cost, timing and concentration checks; all 127 lagged features and outcomes; all 86 skips, ranked retrospectively.

For context only, the unfunded ADR-bucket diagnostics below show every supplied opportunity without cash constraints. Repeated stocks and overlapping holdings mean these sums are not executable portfolios:

Prior ADR bucket Opportunities Positive terminal outcomes Standalone P&L sum, unfunded
<2% 5 0 ₹-0.50L
2%–<3% 15 6 ₹5.44L
3%–<4% 36 19 ₹20.34L
4%–<5% 34 18 ₹6.26L
5%–<6% 24 8 ₹0.82L
≥6% 11 2 ₹-2.99L
Missing 20 sessions 2 2 ₹0.28L

Download the evidence

Download the complete evidence package (ZIP) Read the package notes

The package contains the 127 frozen feature/outcome rows, all decision and trade ledgers, daily equity, all filter results, costs and timing checks, the public allocation verifier, and file hashes. It does not contain raw historical OHLC panels, credentials, account identifiers or private service source code.

Browse individual files