# VCP stock screener: the volatility contraction criteria this screen applies

A volatility contraction pattern is a base that tightens: each pullback inside
it is smaller than the one before, and volume dries up as the range narrows.
QM Screener screens the whole US equity market for that shape after every close
as the **VCP** screen — Volatility Contraction Pattern — using four arithmetic rules over
end-of-day bars rather than pattern recognition by eye. This page is those
rules, the level each one is set at, what the passing list carries, and how to
work through it.

## What a volatility contraction is

The pattern is defined by what the bars do after an advance: each pullback is
shallower than the one before, the range over a few weeks narrows, and the
volume behind the pullbacks falls away. The story told about that shape is
supply drying up, and its practical appeal is that a tight range puts the
level that would say you were wrong close to the level you would act at.

That is the idea. What a screen can do with it is narrower, because a screen
sees bars and not intent. This one measures whether the range is in fact
tightening, whether the last week of it is tight in absolute terms, and
whether volume has fallen off while that happened. Those are measurable; how
many pullbacks there were, and whether the shape is textbook, are not
measured here at all.

The **VCP** screen is an implementation of publicly documented criteria,
assembled from public sources. QM Screener is an independent product and is not
affiliated with, endorsed by, or sponsored by any trader, author, publisher or
firm.

## The rules this screen applies

Four rules, all of which a stock has to pass — five comparisons in total,
because the first rule is applied twice. Each range figure is the high of a
window minus its low, as a percentage of the latest close, and the windows
are nested rather than sequential: the 30-day window contains the 15-day
window, which contains the 5-day one.

- **Progressive contraction, twice.** The 30-day range must be at least
  **1.5 times** the 15-day range, and the 15-day range at least
  **1.5 times** the 5-day range. Both comparisons, not either, so a base
  that narrowed a month ago and has gone sideways since does not clear it.
- **A tight final range.** The 5-day range must be **8% of price or
  less**. This is the one absolute test in the screen, and it is what stops a
  very volatile name from passing on the ratios alone while still swinging in
  a wide band.
- **Volume drying up.** Average daily volume over the last 5 sessions must be
  no more than **0.7 times** the average over the 25 sessions before
  them. Volume contracting into a tightening range is the whole thesis; a
  range that narrows on rising volume is a different chart.
- **An uptrend to contract inside.** The close must be above the 50-day simple
  moving average. A tightening range below the 50-day is a stock going quiet
  in a downtrend, which is not what this screen is looking for.

Before any of that, a stock has to clear a base gate to be scored: enough
history for the three ranges and the two volume averages, and a 50-day average
dollar volume of at least **$5 million**. Recent listings fall out here
rather than being failed on a rule, and the liquidity floor is the same idea
as everywhere else on the site: a pattern you cannot get filled in is not
tradable, however tight it looks.

## What the screen outputs

The passing list is a table, one row per stock, and the row carries the values
that decided it. The two numbers this screen leads with — the ones the compact
list on a phone shows beside the ticker — are the **5-day range** and the
**relative-strength percentile**, in that order, because the first is the test
and the second is the context.

The list is sorted by the 5-day range **ascending**: tightest first. That is
this screen's own default sort, not the dashboard's, and it is the practical
difference between this list and a momentum list. Every row has already passed
the same four rules, so ranking by strength would say nothing about which of
them is the better example of the pattern; ranking by the final range says
exactly that.

Relative strength is computed for this screen too — each stock's three-month
return ranked against the others this screen scored, reported as a percentile
from 0 to 100 — but it is a column and a filter, not a rule. The screen does
not gate on it.

There is no near-miss list here. Beside the passing list the run writes a
universe file holding every stock it looked at, each with the rules it failed
written on it, so a name you expected to see can be looked up and read: which
of the two contraction ratios missed, by how much the final range was too
wide, or what the volume ratio actually was.

Every row also carries a setup tag — BASE, TIGHT, TRENDING, EXTENDED or
PARABOLIC — which is a separate measurement from the rules above: it scores
how tightly the 10, 20 and 50-day exponential moving averages are bunched and
how far price sits from that band. The two are related questions asked with
different numbers, and a row where they disagree is worth looking at. The
tags are set out in [what the setup tags
mean](https://qmscreener.com/momentum-setup-tags).

## The controls on top of the list

The screen declares its own filter bar, and the numbers in it are the screen's
rather than the page's:

- **Final range** — any, ≤ 4%, ≤ 6% (sweet spot), ≤ 8%, ≤ 10%. It opens at
  **6%**, tighter than the 8% the rule itself allows, so
  the list you first see is already the tight end of what passed.
- **RS** — a relative-strength floor, or a custom band you type. The full
  range is live because the screen does not gate on it.
- **Setup** — the setup-tag presets.
- **Sector** and **Industry** — the sector or theme bucket a stock was mapped
  into from its filing, and a multi-select of industries.

All five, and the ticker search beside them, are cuts a reader applies on
top of a list that has already passed the four rules.

## How to use this in QM Screener

- **Open the dashboard** at [https://qmscreener.com/](https://qmscreener.com/) and pick **VCP** in the
  screen picker at the top. The list loads tightest first; the screen is
  chosen in the picker, not in the URL.
- **Decide how tight is tight.** The final-range control opens at
  **6%** — loosen it toward the 8% rule to see more
  names, tighten it to see fewer and quieter ones.
- **Chart what survives.** Every row opens a candlestick chart in place, drawn
  from the same end-of-day bars the screen used, so the contraction the rules
  measured can be looked at directly, with volume under it. A chart has its
  own link, `?view=chart&t=TICKER`.
- **Check the failures too.** A name you follow that is not on the list is in
  the run's universe file with the rules it failed, which is more useful than
  its absence.
- **Take the list with you.** Export it as a TradingView watchlist, a CSV, a
  PNG of the table or share text, or read the same result document over the
  [HTTP API and the MCP server](https://qmscreener.com/docs).

A free account — a verified email address, no card — sees the top
5 names of each screen every day and can chart them, and on this
screen those are the 5 tightest. The full list, the per-row values
and the exports are $10 a month or
$84 a year, each starting with a
7-day free trial. [Start there](https://qmscreener.com/signup), or [sign
in](https://qmscreener.com/login) if you already have an account.

## Frequently asked questions

### What counts as a contraction in this screen?

A shrinking high-low range measured over three nested windows: the last 30 sessions, the last 15 and the last 5, each expressed as a percentage of the current price. The 30-day range has to be at least 1.5 times the 15-day range, and the 15-day at least 1.5 times the 5-day. That is the whole definition of a contraction here — nested windows tightening by a fixed multiple, not pivot points identified on a chart.

### Is this real VCP pattern recognition?

No, and it is not presented as one. It is a published heuristic: four arithmetic rules over end-of-day bars, chosen so the same rules over the same data return the same names every time. A discretionary trader reading the pattern by eye counts the individual pullbacks and weighs their shape and their volume. This screen does not, so it will miss textbook examples the windows do not line up with and surface tight names that are not textbook anything.

### Why is the list sorted by the 5-day range instead of relative strength?

Because the pattern is the thesis. A wide-ranging name with a high relative-strength rank is not a contraction, so sorting by strength would put the least relevant rows on top. The list opens tightest first, and the relative-strength percentile travels beside it as the second column for context.

### Does the screen require a minimum relative strength?

No. Relative strength is computed and shown, and the dashboard offers it as a cut you can apply, but the screen itself does not gate on it — the whole 0 to 100 range is live in the passing list.

### Is there a near-miss list for this screen?

No. The run writes the passing list and a universe file that carries every stock it looked at with the rules that stock failed written on it, so a name that did not pass can be looked up and read rather than guessed at.

## Read next

- [How to screen for momentum stocks](https://qmscreener.com/how-to-screen-for-momentum-stocks) — the five
  measurements every screen here is built from, and an end-of-day routine.
- [The setup tags, one by one](https://qmscreener.com/momentum-setup-tags) — what BASE and
  TIGHT are measured from, and why they are a different question from this
  screen's rules.
- [Trend template stock screener](https://qmscreener.com/trend-template-stock-screener) — the
  8-point trend-confirmation checklist, a useful cross-reference for a
  contraction you want to see inside an established uptrend.
- [Compared with a filter builder](https://qmscreener.com/finviz-alternative) — the same four
  conditions can be assembled by hand in a scan builder; what differs is that
  here they are fixed, published and applied the same way every day.
- [All guides](https://qmscreener.com/guides) — everything published so far.

---

Educational content, not financial advice. QM Screener lists stocks that passed
published filters; it does not recommend trades, size positions or know
anything about your circumstances. US equities, end-of-day, refreshed once per
trading day after the close.
