Compression and expansion are one cycle
Markets alternate between two states. In compression, price coils into a tightening range: each swing is smaller than the last, volatility falls, and buyers and sellers settle into a standoff. In expansion, that balance breaks — price leaves the range on a burst of range and volume, and the quiet becomes a move.
A squeeze is the compression phase; a breakout is the expansion that follows. They are not two separate events but two halves of one cycle, and the whole skill of reading them is knowing which half you are in.
A worked example
Take a generic broad-ETF session — call the instrument GENCO. Early on, the candles shrink: narrow bodies, overlapping ranges, a coil. That is the squeeze, and it tells you energy is building. It does not tell you which way the release will go — compression is direction-blind.
Then the coil releases. Price pushes past the range's edge; the candles grow; volume steps up. That is the expansion. The test that separates a real breakout from a fakeout is simple to state: a genuine move holds beyond the edge and carries volume behind it, while a fakeout pokes out and snaps back inside the range within a candle or two. Later in the same session the move gives some of it back — expansion is not a straight line, and the give-back is part of the shape.
See it in kestrel
Read the cycle off a real recorded session instead of taking anyone's word for the shape:
npx kestrel.markets sim s-p-500-etf-pandemic-volatility-crashThat runs a deterministic simulation over a generic broad-ETF session with a genuine compression-then-expansion sequence — managed licensed data, no wall time, no signup, no card — and prints a certified proof URL. Recompute the whole record on your own machine, byte for byte:
npx kestrel.markets certify https://kestrel.markets/proof/art_66d7dda7f0466f69c123463cKeep the tool one command away: drop the kestrel.markets MCP server into your client, and the next session you want to read is already wired up.