← Lab
S003

Volatility contraction → expansion (NR7 variant)

vol-contraction-expansion-v1
failed Stage 1 (Quick-screen) 2026-05-29
Share: Twitter / X LinkedIn
+0.0%+3.7%+7.4%+11.1%+14.8% 2,6700 Absolute 5-day return on compressed-ATR signals Absolute return
Random baseline 2.87% Signal mean 2.90%
Absolute 5-day return on compressed-ATR signals · n=25,334

ID: S003 Slug: vol-contraction-expansion-v1 Failed at: Stage 1 (Quick-screen) Fail reason: magnitude Date: 2026-05-29

What we tested

The textbook claim (associated with Toby Crabel's NR7 pattern and Larry Connors' work on compression): periods when a stock's recent trading range is unusually narrow tend to resolve into outsized moves. Mechanically, volatility is known to be mean-reverting at short horizons, so a stretch of low daily range should eventually "snap back" with a wider one. The signal doesn't predict direction — only magnitude. That makes it interesting for options strategies (long straddles benefit from large moves either way).

We measured a stock's recent daily range using the average true range (ATR) over 7 days, then compared it to the past year's distribution of 7-day ATRs for the same stock. Signal fires when current ATR sits below the 20th percentile of the past year's distribution — i.e., the stock is in the bottom fifth of its own recent volatility.

We then measured the absolute size of the 5-day and 10-day forward returns (direction-blind: a −3% move counts the same as +3%). The pre-set criterion: signal-day absolute returns needed to be 1.35× larger than a random baseline at the 5-day horizon, 1.25× larger at 10 days, with the effect getting stronger as compression got deeper.

What we found

Strategy failed on all magnitude-related criteria.

Criterion We needed We got
5-day absolute return uplift ≥ 1.35× baseline 1.010× (basically no uplift)
10-day absolute return uplift ≥ 1.25× baseline 1.017×
Effect grows monotonically with compression depth yes no — non-monotonic
Number of signals ≥ 800 25,352

Compression-depth sweep (the deeper the compression, the larger the expansion we'd expect):

Compression percentile Signal count Mean absolute 5-day return
Bottom 30% (mildly compressed) 32,932 2.877%
Bottom 20% (our chosen threshold) 25,352 2.896%
Bottom 10% (more compressed) 16,471 2.919%
Bottom 5% (most compressed) 10,868 2.878%

The numbers barely move and they're non-monotonic — at the deepest compression level (bottom 5%) the effect actually drops back to the level of mildly-compressed signals. This is what "no effect" looks like in a sweep.

Why this matters / what surprised us

This was supposed to be the strongest setup in the batch. Vol-mean-reversion is one of the most robust facts in quantitative finance and is the foundation of multiple successful options strategies. We pre-registered a ~70% expectation of passing. The flat result is therefore the biggest surprise.

  1. Wrong universe scale. The Crabel and Connors work came from 1990s markets with many smaller, less-followed names where genuinely "quiet" stretches were rare and diagnostic. In a 2026 mega-cap pool (AAPL, MSFT, JPM, etc.) a low-ATR week often just means "an unremarkable week in a stock that gets traded around the clock by algorithms" — not a coiled spring.

  2. The gate measured the wrong thing. We compared signal-day absolute returns to a matched random baseline drawn from the same month and pool. Because both groups share the same market regime, market-wide volatility cancels out — which is correct for isolating the signal, but it also means we're asking "does compressed-ATR add edge above what calendar coincidence alone provides?" The honest answer in this universe: barely, if at all.

  3. The literature's "NR7" is a pattern, not a percentile. Crabel's original signal is "today's range is the narrowest of the last 7 days" — a discrete bar-pattern. We tested a percentile-based version (in the bottom 20% of the past year's ATR distribution). These correlate but aren't equivalent; the pattern version captures genuinely unusual single-bar contraction.

What this doesn't tell us yet

  1. Small-cap behaviour might differ. Extending the test to Russell 2000-style names (with deeper Tiingo ingest) might reveal the effect there — that would be a separate setup.
  2. Pattern-based NR7 wasn't tested here. A different operationalisation (today's range < min of last 6 bars) could be pre-registered separately.
  3. Direction-aware variants weren't tested. The setup was explicitly direction-blind. A pattern that conditions compression on trend direction (compression in an uptrend → upward expansion) is a different setup.

What happens next

This specific operationalisation is closed. Lessons for future setups in this family:

For the specialist — methodology details (click to expand)

Setup (verbatim from spec)

Stocks whose 7-day average true range has compressed to below the 20th percentile of their own 1-year ATR distribution predict above-average absolute returns (in either direction) over the next 5-10 trading days in the liquid US equity universe over 2010-present, because realized volatility is mean-reverting at short horizons and periods of unusually compressed range tend to resolve into expansion.

Test setup

  • Universe: SP500+NDX top-200 monthly point-in-time snapshot.
  • Data: Tiingo Power EOD, 2010-01-04 → 2026-05-28, 1.98M bars.
  • Signal: ATR_7[t] < 20th percentile of ATR_7[t-252:t-1], dedupe one signal per ticker per 10 trading days.
  • True range: max(high − low, |high − prev_close|, |low − prev_close|).
  • Forward measure: |(close[t+H] − close[t]) / close[t]| for H=5 and H=10 (direction-agnostic absolute return).
  • Baseline: 5 matched random (ticker, date) per signal, from the same monthly eligible pool, with identical absolute-return measurement.

Pre-registered gate (all required)

ratio_5d ≥ 1.35     mean |signal_ret_5d|  / mean |baseline_ret_5d|  ≥ 1.35
ratio_10d ≥ 1.25    mean |signal_ret_10d| / mean |baseline_ret_10d| ≥ 1.25
monotonicity        mean |ret| at percentile P is non-decreasing as P decreases
sample_size         n ≥ 800 signals

Detailed numbers

| Group | Trades | Mean |return|_5d | Trades | Mean |return|_10d | |-------|--------|-------------------|--------|--------------------| | Signal | 25,334 | 2.896% | 25,324 | 4.216% | | Baseline | 126,623 | 2.868% | 126,554 | 4.147% | | Ratio | | 1.010 | | 1.017 |

Welch t-tests on |signal_ret| vs |baseline_ret|: - p(5d) = 0.518 (no significance) - p(10d) = 0.145 (no significance)

Dual-period absolute returns: - 2010-2017: n=12,360, mean 5d-abs 2.521% - 2018-2026: n=12,974, mean 5d-abs 3.253%

The half-period gap (h2 > h1) is driven by post-pandemic vol regimes, not by the compression signal — it appears equally in the baseline.

Operational note

The compression-depth sweep was implemented as four full re-runs of the signal generation pipeline, which made the wall-clock unusually long (944s). Future sweep-style analyses should compute the signal once and slice afterwards.

Artifacts

  • Trades: lab/postmortem/vol-contraction-expansion-v1/trades_5d.parquet and trades_10d.parquet
  • Baselines: baseline_5d.parquet and baseline_10d.parquet
  • Histogram bins: chart_data.json in same directory
  • Setup spec: lab/setups/vol-contraction-expansion-v1.md
  • Pre-registered gate: lab/setups/gates.md §vol-contraction-expansion-v1

Rewritten 2026-05-30 for broader accessibility. No claims, gates, or methodology changed — only presentation.

← Oldervol-contraction-expansion-v1 Newer →rs-leadership-rotation-v1

Mechaniq provides information, not investment advice. We do not execute trades. Past results are no guarantee for future performance. You are solely responsible for your trading decisions.

Lab · Methodology · Greeks Lab · About · FAQ · Glossary · Privacy · Terms · mechaniq.trade © 2026

07 Jul 2026, 07:07