Every scanner this service runs is one family — TIS and its weekly, ETF and STRIKE variants, plus REVERSAL. The replay showed the cost: about three admissions a month against twelve slots. The cheap fix is to loosen a gate. The better one is to add a different pattern, and the obvious candidate is the one the old system had and this one never ported: Minervini's volatility contraction, which fed 3 of our 132 trades for ₹51,524 — the best per-trade source in the book. So it was ported into the harness and measured before a line of scanner code was written.
The pattern is not the problem — the stop is. VCP places it under the last contraction's low, which on these names sits a median 10.1% below the pivot. Our book caps a stop at 5%. Only 111 of 2,591 setups fit inside that, and those that do are names so tight they do not move: 109 of 111 never hit a stop at all and were closed at the sixty-session horizon, with an average win of +0.29% against an average loss of −0.77%.
Left at its own stop width, VCP takes the losses that width implies: 459 losses beyond −8% against 3 for TIS over the same window, and a worst trade of -25.0%.
| population | setups | mean | median | win | losses <−8% |
|---|---|---|---|---|---|
| TIS, price gates only | 149 | +5.66% | -1.27% | 40% | 3 |
| VCP, all | 2,591 | +1.26% | -1.92% | 37% | 459 |
| VCP, MarketSmith universe | 1,649 | +3.70% | -0.86% | 44% | 258 |
| VCP, inside our 5% cap | 111 | -0.03% | +0.16% | 70% | 0 |
If the score measured setup quality, mean return would rise with it. It does not: 10 is the best bucket, 11 and 12 are the worst two. Score ≥ 10 against 8–9 is +0.76 points, p=0.518 — indistinguishable from chance. The sequenced ₹11.4L that slice appears to make is 53% one trade (KABRAEXTRU, +170%) and 99% three.
The obvious repair is to keep VCP's selection — the trend template and the contraction sequence — and give it our stop, the last pivot low × 0.98. That produces a population of comparable size to TIS (144 setups inside the 5% cap against 149), which is exactly the admission rate we are short of. It still does not work.
| VCP selection + TIS pivot stop, in universe, stop ≤5% | n | mean | median | win |
|---|---|---|---|---|
| whole window | 144 | +2.62% | -2.86% | 32% |
| first half | 72 | +5.13% | -0.26% | 46% |
| second half | 72 | +0.11% | -4.12% | 18% |
| TIS, same test | 149 | +5.66% | -1.27% | 40% |
First half +5.13%, 46% win. Second half +0.11%, 18% win. That is the same shape that killed the position-size finding, the ADR filter and the analyst-coverage signal — a period, not a rule. Against TIS over the whole window it is −3.04 points (p=0.135): no better, probably worse, certainly not additive.
The detection is ported line for line from
stocks_signals/angelone/services/vcp_screener.py: the eight-criterion trend template,
swing-pivot contraction pairs with the equal-segment fallback, the pivot at the last contraction's
high, the 14-point score, and the live gate that scanner used —
score ≥ 8 and in_buy_zone. Entry is the pivot, filled next session where the high
reaches it. Exits, sizing and sequencing are identical to the TIS replay, so only the pattern
differs.
Filtering this population by RS ≥ 90 produces a mean of +17.5% on 384 setups, which looks spectacular and means nothing: the RS is today's value, and the twelve months it measures contain the six being tested. Every figure on this page is therefore computed without an RS or EPS filter. The same trap sits under the TIS population and is why its own numbers are quoted on the price gates alone.
Roughly one candidate in five has a pivot low within 5% of the close. That single gate, not the momentum or strength tests, is what holds admissions to three a month.
A second stop rule — take the contraction low when it is tighter than the pivot low — would admit more names without widening risk. It is a change to one function and can be measured the same way this was.
Three admissions a month with twelve slots means the book is meant to be concentrated, not full. That is a decision, not a defect — but then the ₹60L deployment target should move, not the gates.