Equity book · scanner study · 16 Mar – 31 Aug 2026

Should VCP Be Ported? A Measured No

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.

2,591 VCP setups foundvs 149 TIS same bhavcopy, same exits, same sizingverdict: do not port
VCP setups, 6 months
2,591
across 548 names — seventeen times the TIS count
mean return
+1.26%
against +5.66% for TIS
median return
-1.92%
against -1.27% for TIS
losses beyond −8%
459
TIS had 3
survive our 5% cap
111
of 2,591 — the stop is a median 10.1% away
worse than TIS
p=0.018
sign-flip permutation on mean return
The finding

VCP's stop is incompatible with a 5% cap

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%.

populationsetupsmean medianwinlosses <−8%
TIS, price gates only149+5.66% -1.27%40%3
VCP, all2,591+1.26% -1.92%37% 459
VCP, MarketSmith universe1,649+3.70% -0.86%44% 258
VCP, inside our 5% cap111-0.03% +0.16%70%0
The score

The 14-point quality score does not order returns

+3.36%score 8+3.78%score 9+4.59%score 10+1.45%score 11+2.23%score 12

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 synthesis

Even VCP's selection with our stop does not add

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% nmeanmedianwin
whole window144+2.62% -2.86%32%
first half72+5.13% -0.26%46%
second half72 +0.11% -4.12% 18%
TIS, same test149+5.66% -1.27%40%
The split decides it

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.

What was and was not tested

The port, and one bias worth naming

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.

The bias not to fall for

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.

So what does fix the admission rate

Not this — and the constraint is now named

The binding constraint is G4

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.

Worth testing next

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.

Or accept the rate

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.