Every breakout comes out of a range, but not every range is worth watching. The difference between a coiled market and aimless chop is measurable — and this lesson gives you three ways to measure it, plus the uncomfortable finding about what the measurement actually buys you.


What is happening while price goes nowhere

A range is a temporary agreement. Buyers will not pay above one price, sellers will not sell below another, and price rotates between them.

Three things accumulate while that agreement holds:

  • Resting limit orders at both boundaries, from participants happy to trade at those prices.
  • Stop orders just beyond both boundaries — from everyone positioned inside the range. A short filled near the top puts its stop above the range high, because anything tighter gets hit during normal rotation.
  • Breakout orders from traders waiting for the level to give way.
ℹ️ INFO
This is why the boundary is not just a price. It is a **concentration of fuel**. The stops sitting above the range are the buy orders that will fire the moment price gets there — and they are the reason an impulse exists at all.

Volatility contracts during this because neither side is forcing anything. Bar ranges narrow, pullbacks get shallower, and the market coils — not mystically, but because the distance between where buyers and sellers are willing to act is shrinking.


Three ways to measure compression that you can code

Feelings do not survive contact with a live chart. Pick one of these and use it consistently.

Measure 1 — the ATR ratio. The cleanest single number.

compression_ratio = ATR(5) / ATR(20)

  < 0.70   meaningful contraction
  < 0.55   tight
  > 0.90   not compressed

Measure 2 — range width contraction. Compare the width of the last twenty bars against the twenty before them. Under about 60% is a genuine narrowing.

Measure 3 — pullback depth decay. Measure how far price retreats from the boundary on each test, as a fraction of the range width. If those depths shrink monotonically across three or more tests, one side is being pushed:

pullback_depth[i] = (boundary − swing_low[i]) / range_width

depths falling across 3+ tests  →  directional compression
depths random                   →  neutral range

That third one is worth more attention than it usually gets: it is the difference between a range that is merely quiet and a range where one side is steadily losing ground.


Good compression versus random chop

Score the range in front of you. Each condition is worth a point, and two of them subtract:

compression_quality = 0

+1  boundary touched 3 or more times
+1  range width contracting
+1  pullback depths decreasing
+1  volume at or above the session baseline
+1  no closes outside the boundaries
−2  three or more wick violations of the boundary
−1  wick extremes scattered far from the body cluster
⚠️ WARNING
The volume condition surprises people. A range that goes quiet on **dead volume** is not coiling, it is being abandoned — nobody is there. Compression worth trading has participation inside it; the narrowing comes from agreement, not absence.

Score a range and see where it lands:


What compression actually buys you — measured

Here is where we part company with most breakout teaching, and with the tidier version of this method.

We took 490 SPY sessions and the first breakout of each, then split them by how much the range had contracted beforehand.

Comparison showing compressed and non-compressed breakouts both failing 74 percent of the time, with the compressed group producing a larger impulse
490 first-of-day SPY breakouts split by prior contraction. The failure rate is identical; the impulse is not.
74%
Failure rate, compressed
74%
Failure rate, not compressed
0.33W
Median impulse, compressed
0.25W
Median impulse, not compressed

The failure rate is identical. The difference in outcome at +30 minutes was −0.137 range widths with a 95% interval of [−0.330, +0.056] — straddling zero, with the point estimate slightly against compression. Sorting the compressed group further by the quality score above did not separate them either: failure rates ran 71–77% across score buckets.

What compression does change is the size of the first move. 0.33W against 0.25W — about a third bigger.

🚨 DANGER
Read those two findings together and the conclusion is precise: **compression enlarges the part you harvest, not the part you hold.** It is a reason to expect a bigger impulse and to size your first tranche accordingly. It is not a reason to believe this breakout will work, and it is not a filter that raises your hit rate.
Why does this contradict what everyone teaches?

Partly because the usual claim is never tested, and partly because of what gets remembered. A tight coil that explodes into a trend day is vivid and gets screenshotted; a tight coil that breaks, fails, and chops sideways for an hour is forgotten. Our sample contains both in their real proportions. It is also worth being clear about the limits: this is SPY, one-minute bars, one breakout per session, 490 sessions, measured over a 30-minute horizon. A different instrument, a longer horizon or a different definition of compression could move it. What the test does rule out is a large effect — the interval excludes anything better than about +0.06W.


What you should take from this lesson

  1. Measure it. ATR(5)/ATR(20) under 0.70, or a 20-bar range under 60% of the previous window. Pick one and be consistent.
  2. Demand participation. Narrowing on dead volume is absence, not coiling.
  3. Watch pullback depth. Shrinking retreats from one boundary tell you which side is losing.
  4. Expect a bigger impulse, not a better outcome. Set your harvest target from the compression quality; set your expectations from the 74%.
Lesson 2 in one line
Compression tells you how big the first move should be. It does not tell you whether the breakout will hold — and 490 sessions say it never did.

Next: the boundary — why a single line is the wrong model, and where the trigger and the invalidation actually belong.