Tight Volatility

Find Stocks Coiling Before the Breakout — ATR(14) Below ATR(50)

Published: March 10, 2026  |  12 min read  |  Finmagine Trader Series — Article 8  |  v1.4.0

Following along? Install Finmagine Trader first

Free NSE momentum scanner — no account needed • Chrome, Edge, Brave

Install Free →

Multimedia Learning Hub

ATR Contraction • Tight Volatility Filter • Coiling Stocks • 35 interactive flashcards

One Filter. Three Tabs. Zero Guesswork.

The Tight Volatility filter added in v1.4.0 applies a single condition — ATR(14) < ATR(50) — to the Near 52W High scan. When a stock’s 14-day Average True Range is below its 50-day Average True Range, recent price swings are narrowing. That narrowing is the classic “coiling” behaviour that precedes breakouts in Minervini’s SEPA methodology.

📈 What it measures
  • ATR(14) = recent 14-day volatility
  • ATR(50) = medium-term 50-day volatility
  • ATR(14) < ATR(50) = contraction
  • Scale-independent — works for all stocks
✅ Tabs affected
  • 🎯 Near 52W High — directly filtered
  • 🚀 Stage 2 + Near High — via intersection
  • ⭐ All Three — via intersection
  • Other tabs: unchanged
💡 Why relative, not absolute
  • KPIT: 5% ATR → passes if ATR(50) is 8%
  • RVNL: 7% ATR → passes if ATR(50) is 10%
  • No calibration required
  • Works for large-caps and micro-caps alike

🃏 Test Your Knowledge — Tight Volatility Filter

Click any card to reveal the answer. Use the search to find specific concepts.

🔴 What Is the Tight Volatility Filter?

The Tight Volatility filter is an optional dropdown in Finmagine Trader v1.4.0. When set to Tight Volatility, it adds a single condition to the Near 52W High scan:

📐 The Condition

daily atr( 14 ) < daily atr( 50 )

A stock’s 14-day Average True Range must be below its 50-day Average True Range. In plain English: recent price swings are smaller than the stock’s recent historical average. The stock is coiling.

This filter is off by default. Your existing scans are unchanged until you select “Tight Volatility” in the dropdown. It is a precision tool for traders who specifically want setups with contracting volatility — the classic pre-breakout signature.

The filter applies server-side at the ChartInk scan level. This means the count shown on each tab is always accurate for the selected setting — not post-filtered from a larger set. Changing the filter triggers a fresh fetch.

🔥 The Coiling-Before-Breakout Thesis

Mark Minervini’s SEPA (Specific Entry Point Analysis) methodology and his Volatility Contraction Pattern (VCP) are both built on the same core insight: stocks that coil before breaking out produce more reliable and powerful moves than stocks that break out from wide, choppy ranges.

Here is why volatility contraction matters:

  1. Supply absorption in progress. When a stock’s range narrows, sellers are being absorbed. Each wave of selling is smaller than the last — institutions are quietly accumulating. The smart money is building a position before the catalyst arrives.
  2. Potential energy building. Think of it like compressing a spring. The tighter the coil, the more explosive the eventual release. A stock trading in a narrow 2% range for three weeks is storing energy for its next move.
  3. Better risk/reward. A tight base means your stop loss (below the base low) is close to your entry. That creates a favourable risk/reward ratio — you are risking a small amount to capture what could be a large move.
  4. Institutional patience. Large funds cannot buy a full position overnight without moving the price. When a stock coils, it is often because institutional buyers are accumulating slowly over weeks. The narrow range is evidence of disciplined accumulation, not disinterest.

“The tighter the pivot, the bigger the potential move. When price compresses into a very tight range and volume dries up, it’s a sign that supply has been exhausted. The next expansion in price has nowhere to go but up.”

Paraphrasing the SEPA methodology framework

The Tight Volatility filter captures this coiling behaviour quantitatively. When ATR(14) — the measure of how much a stock moves on a typical recent day — drops below ATR(50) (the medium-term average), the stock is demonstrating the mathematical signature of the coil.

⚖ Why ATR(14) < ATR(50), Not ATR < 3%

Many screening tools use an absolute ATR threshold: require that the stock’s ATR is below 3% of its price. This works reasonably well for US large-caps. For Indian stocks, it is the wrong approach.

The Indian Market Reality

Indian momentum leaders routinely trade at ATR(14) percentages that would fail an absolute 3% threshold — yet they go on to deliver exceptional returns:

Stock Typical ATR(14)% ATR < 3% passes? Actual outcome
KPIT Technologies 4–6% ❌ Fails Multi-year momentum winner, institutional darling
BSE Ltd 5–8% ❌ Fails Exchange stock, strong institutional accumulation phase
RVNL 6–10% ❌ Fails Infrastructure theme, powerful trend, multiple breakouts
Cochin Shipyard 6–9% ❌ Fails Defence supercycle, outsized moves from tight bases
Reliance Industries 1–2% ✓ Passes Massive liquidity — low ATR is structural, not a setup

An absolute threshold of <3% would eliminate KPIT, BSE, RVNL, and Cochin Shipyard — all genuine momentum winners — while keeping Reliance Industries, whose low ATR% reflects its size and liquidity rather than a coiling setup. That is a broken filter.

Why the Relative Comparison Works

The key insight is that what matters is not the absolute ATR level, but whether recent volatility is contracting relative to the stock’s own baseline.

✅ PASSES

KPIT: ATR(14) = 5%, ATR(50) = 8%

Recent volatility has contracted from the 8% medium-term baseline to 5%. The stock is coiling relative to its own history. This is a valid setup signal regardless of the absolute ATR%.

❌ FAILS

KPIT: ATR(14) = 7%, ATR(50) = 6%

Recent volatility (7%) is expanding beyond the medium-term baseline (6%). The stock is widening, not coiling. Not a setup worth filtering for.

❌ FAILS

Reliance: ATR(14) = 1.5%, ATR(50) = 1.2%

ATR is expanding even at tiny absolute levels. Reliance’s low ATR% is structural — not a coiling setup. The relative comparison correctly identifies this.

✅ PASSES

Reliance: ATR(14) = 1.0%, ATR(50) = 1.8%

Reliance is genuinely coiling here — recent range is tighter than its own baseline. ATR(14) < ATR(50) correctly identifies this as a potential setup.

The relative comparison is self-referential and scale-independent. It judges every stock against its own normal volatility range, not against a fixed threshold that only fits one market cap tier.

📄 Which Tabs Are Affected — and Why

The filter is applied to the Near 52W High scan only. It then propagates automatically to Stage 2 + Near High and All Three through the existing set intersection logic — no extra code needed.

Tab Directly filtered? Effect when Tight Volatility ON Why
⭐ All Three No (intersection) Narrows allThree = stage2 ∩ nearHigh ∩ highVol. A tighter nearHigh = smaller intersection.
🚀 Stage 2 + Near High No (intersection) Narrows stageAndHigh = stage2 ∩ nearHigh. Same propagation logic.
📈 Stage 2 No Unchanged Stage 2 scan is independent — ATR filter not injected here.
🎯 Near 52W High Yes — directly Narrows ATR condition injected directly into this scan clause.
📊 High Volume No Unchanged Volume signal has no relationship with ATR contraction.
💎 VCP Breakout No Unchanged VCP already has structural contraction embedded in its price criteria.
🌟 IPO Breakout No Unchanged Recently listed stocks often lack sufficient ATR(50) history for reliable comparison.
💡 The Elegance of Propagation

The ATR filter is applied in exactly one place (the nearHigh API call), yet it narrows three tabs simultaneously. This is because stageAndHigh and allThree are computed as intersections of nearHigh with other sets — a smaller nearHigh automatically means smaller intersections. No special handling required.

🌟 How to Use the Tight Volatility Filter

When to Turn It On

The filter is most useful when:

When to Leave It Off

The Extended Morning Workflow (with Tight Volatility)

1

Read the raw All Three count (no filters)

Open the extension with all filters off. This is your market health pulse. 0–3: quiet/down. 4–8: normal. 9+: broad strength.

2

Set Index: Nifty 500

Apply the quality baseline. This eliminates thinly traded micro-caps from every tab simultaneously.

3

All Three — Score = 4

Identify the highest-conviction setups of the day (all four signals firing in the Nifty 500 universe).

4

Enable Tight Volatility

Switch to “Tight Volatility” in the dropdown. Now All Three and Stage 2+Near High show only stocks that are coiling — potentially the best setups of the ones already on your list.

5

Compare the two lists

Stocks that appear in both the standard list AND the tight volatility list are the strongest candidates — near their high, in Stage 2, AND coiling.

6

Open TradingView — verify the chart

ATR contraction confirms the statistical signal. Now look at the actual chart: is the base tight and constructive? Is volume drying up during the consolidation? This is your final check before acting.

⚠ When the Filter Shows 0 Stocks

On many days — especially quiet or down-market sessions — enabling Tight Volatility on the All Three tab will show 0 stocks. This is the correct and expected behaviour, not a bug.

⚠ Zero Stocks = No Setup Today

For a stock to appear in All Three with Tight Volatility ON, it must simultaneously: (1) be in a Minervini Stage 2 uptrend, (2) be within 2% of its 52-week high, (3) have volume above its 20-day average today, AND (4) have ATR(14) below ATR(50). On most days, no stock meets all four conditions. When zero appears: the setup simply isn’t there. The right response is not to lower your standards — it’s to turn off the filter and use the standard All Three list.

The Meaningful Count

On strong market days when 3–5 stocks appear in All Three with Tight Volatility ON, those are worth close examination. You are looking at stocks that are:

Four independent checks. One stock. That is the highest possible signal density in the extension.

🔧 Technical Note: How It Works Under the Hood

For traders interested in the implementation: the ATR condition is injected into the ChartInk scan clause before the API call, using the same pattern as the MCap filter:

Near 52W High clause (Tight Volatility ON):

( {cash} (
  daily close > weekly max(52, 1 week ago high) * 0.98
  and daily close >= 20
  and market cap > 500
  and daily atr( 14 ) < daily atr( 50 )
) )

The ATR condition is appended before the final ) ). This is valid ChartInk DSL — confirmed both by the precedent of existing indicator comparisons in the scan clauses (daily rsi(14) > 50 in VCP, daily sma(close,50) > daily sma(close,150) in Stage 2) and by live testing.

🧪 Why Server-Side Matters

Because the filter runs at ChartInk’s server before results reach your browser, the stock count displayed is always the true count for the selected setting — not a post-filtered view of a larger result. This is the same reason the Index and MCap filters are also server-side: the numbers you see are real.

Free Chrome Extension

Ready to scan your first momentum list?

Install Finmagine Trader and scan 2,000+ NSE stocks for Stage 2 uptrends, VCP breakouts, near 52-week highs, and volume surges — in one click.

Install from Chrome Web Store →

No account required • Works on Chrome, Edge, Brave • NSE stocks only

Join Finmagine WhatsApp Community
← Back to Finmagine Trader ← Back to Blog Hub