About Experience Practice Qualifications Skills Tools Reading Contact

Tools  /  Relative Measured Volatility (RMV)

Relative Measured Volatility (RMV)

A tightness oscillator for spotting compression before breakouts - any tight setup, not just VCP.

Published Volatility Last updated: May 2026

Overview

What it is

RMV is a 0-100 oscillator that measures how loud today's bar is versus the strongest of the last few prior bars. Lower values mean compression; higher values mean expansion. The reading is purely about price tightness - it does not look at trend, momentum, or relative strength.

The gap it fills is narrow but real. Standard ATR or range readings tell you absolute volatility; they don't tell you whether today is compressed relative to its own recent character. Percentile-rank tightness oscillators answer that question, but they have a structural blind spot - a single quiet bar inside a wild stretch can read as "tight" purely because of where it lands in the distribution, not because the bar itself is genuinely small.

RMV addresses that by anchoring today's bar against the loudest of the last few prior bars, not the typical one. Today is compared to the strongest recent context - and crucially, today's own value is excluded from that baseline so an expansion bar can't dilute itself. The result is a reading that stays honest through both calm and volatile regimes.

Built for spotting tightness before breakouts - VCP being the canonical case, but it works on any setup where price compression is the precondition: cup-and-handle, flat bases, ascending triangles, post-IPO bases, anywhere the breakout is preceded by a quiet stretch.

Inspired by the broader concept of tightness oscillators; formula and methodology independently designed and validated against NSE data.

Reading Guide

Value scale & signals

The 0-100 scale

  • RMV ≤ 20 - very tight. Today's effective size is under 40% of the recent loudest bar.
  • RMV ≈ 50 - neutral. Today is roughly equal to the recent loudest.
  • RMV ≥ 75 - expanding. Today is materially larger than recent context.
  • RMV = 100 - full expansion. Today is at least 2× the recent baseline; the formula caps at 100.

What to look at on the pane

Three layers carry information at once:

  • The histogram shows the raw RMV value, drawn only when RMV is in the viable zone (≤ warm level). Above warm, the bar is hidden - that's deliberate; expansion regimes are not the indicator's domain.
  • The smoothed line (5-bar SMA of RMV) tells you whether tightness is structural or noise. When the smoothed line stays below the tight level for several bars, you have real compression - not just one quiet bar inside a noisy stretch.
  • The background colour and rank digit (➊➋➌➍) at the top of the pane encode the four-tier signal layer - see Signals below.

The live label on the right edge shows the current RMV value plus, when in the tight regime, how many consecutive bars the regime has lasted and the lowest reading during that streak.

Methodology

Formula in plain English

RMV is the ratio of today's effective size to a recent-loudest baseline, scaled and capped onto 0-100.

numerator = today's effective size (body or range, per ladder below) denominator = max( ATR(N)[1] , MAX(H − L, N)[1] ) // today excluded ratio = numerator / denominator RMV = min( ratio × 50 , 100 )

The two halves - numerator and denominator - each do specific work.

The numerator - what counts as "today's size"

A naive choice would be today's full range (high − low). That works most of the time, but it misclassifies two specific bar shapes: bars that are small in absolute terms (a genuinely quiet day with a small range), and rejection bars (a long lower wick that closes near the top - bullish action that the day's range overstates). For both of those, the body is a more honest measure of how much the market actually moved.

So the numerator is selected by a three-rule ladder. Evaluated top-down. The first matching rule wins.

StepConditionNumerator
1 Absolute-tightness gate. Today's range is smaller than multiplier × ATR(N) over the prior N bars (default 0.75 × ATR(5)). The bar is small in absolute terms; the body reflects that without being inflated by minor wicks. BODY
2 Strong-rejection bar. Evaluated only if step 1 didn't match. Both the open and the close land in the upper portion of the day's range - above the strong rejection threshold (default 50%). A long lower wick with a strong close is intraday rejection, not real volatility - but the rule requires the open to be up there too, so a "rally from the bottom" (open low, close high) is correctly classified as expansion, not tightness. BODY
3 Otherwise. Evaluated only if neither 1 nor 2 matched. Real expansion bars and ordinary trending bars both fall here. RANGE

The denominator - and why "today excluded" matters

The baseline is the maximum of two prior-N-bar measurements: the average true range over the last N bars, and the largest single-bar high-minus-low over the last N bars. Both are computed with a one-bar offset - today's bar is not part of either calculation.

That offset is load-bearing. An earlier today-inclusive formulation produced a clear failure mode: a real expansion bar in the test data scored zero on RMV - flagged as "tightest in window" - because its own large range inflated the baseline it was being compared against. With today excluded, the expansion bar is anchored against pre-expansion context, and the reading lands where intuition says it should (around 60+).

Taking the max of ATR and the highest H − L (rather than just ATR) makes the baseline conservative on purpose. Today is compared to the loudest recent bar, not the average one, so the formula doesn't get fooled when the prior window mixes calm and noisy days.

Final scaling

The ratio is multiplied by 50 (so a ratio of 1.0 - today equals the recent loudest - maps to RMV = 50) and capped at 100 (a ratio of 2.0+ maps to a full-expansion reading without the value running away).

Inputs

Configurable inputs

Core RMV engine

InputDefaultWhat it controls
ATR baseline length 3 Window for the tightness baseline, computed over the last N prior bars (today excluded). 3 = matches a tight-scan ATR(3) horizon. 5 = one trading week, smoother. 8 = broader context.
Strong rejection threshold 50% A bar qualifies as a strong rejection only when both the open and the close land above this percentage of the day's range. Raise to 60-70% for stricter qualification.
Absolute-tightness ATR length 5 Window for the absolute-tightness check - long enough to track regime changes, short enough to stay responsive.
Absolute-tightness ATR multiplier 0.75 Strictness of the absolute-tightness gate. Today's range must be ≤ multiplier × ATR(N) prior to qualify. Lower = stricter; 0.5 only counts sharply small bars, 1.0 counts anything at or below recent ATR.

Thresholds & zones

InputDefaultWhat it controls
Very-tight level 10 Threshold for the "very tight" crossunder alert.
Tight level 15 Upper bound of the tight zone. Used for the A+ eligibility gate, trough/streak tracking, and the tight-zone-entry alert.
Warm level 20 Upper bound of histogram visibility and the rank ➍ background. Above warm: no histogram bar, no background fill.

A+ setup

InputDefaultWhat it controls
Show A+ setup marker On Toggles the A+ background and rank digit.
A+ trigger mode OR (either scan) Which scan combination must hit for A+ to fire. Options: AND (both scans), OR (either scan), Tightness only, VDU only. A+ also always requires RMV ≤ tight level - the RMV gate is built in.

Tightness recognition aids

InputDefaultWhat it controls
RMV smoothing (bars) 5 SMA length applied to RMV for the smoothed line. Filters single-bar dips so only structural compression shows.
Show smoothed RMV line On Plots the SMA(RMV) overlay. When it stays below the tight level you have structural tightness.
Show tight-streak label On Adds streak info to the live label - bars in the tight regime, plus the lowest RMV during the streak.
Trough lookback (bars) 5 Window for the "lowest RMV in N bars" trough detection - drives rank ➌.
Enable trough detection On Toggles rank ➌ entirely. When off, deepest-compression bars fall to rank ➍.
Show rank labels (1/2/3/4) On Plots a single digit at the top of the pane on each tier-1-4 bar. Useful for screenshots, colour-blind reading, and quick scanning.

Colours

InputDefaultWhat it controls
Theme preset + per-tier swatches Dark Theme preset switches the entire palette between Dark and Light. The Dark theme exposes individual swatches for histogram, smoothed line, the four background tiers, and the rank digit. Light theme uses a fixed coordinated palette and ignores the custom swatches.

Signals

Tiers, setups & alerts

The four-tier rank system

Every bar where RMV is in the viable zone (≤ warm level) gets one of four tier classifications, encoded as a background colour and a rank digit at the top of the pane. The tiers are mutually exclusive and prioritised top-down.

RankNameColourConditionWhat it means
Confluence Coral A+ and trough fire on the same bar. The rarest tier. Compression has reached its deepest reading in N bars and the scan layer is passing.
A+ only Butter yellow The chosen scan combination passes and RMV is within the tight gate. Setup is firing without an accompanying trough. Watch-list candidate.
Trough only Mint RMV is the lowest reading over the trough lookback window. Marks the deepest compression of each cycle. Troughs frequently lead a breakout by 1-3 bars.
Viable Light grey RMV ≤ warm level but neither A+ nor trough is firing. The regime is right; nothing is firing yet.

RMV > warm level produces no fill and no rank digit - the indicator deliberately stops talking once the regime becomes expansion.

The A+ trigger and its mode dropdown

A+ is built on two embedded scans - a Tightness scan and a Volume Dry-Up (VDU) scan - both implemented bar-by-bar inside the indicator. The mode dropdown controls how they combine:

  • AND (both scans) - strictest. Both Tightness and VDU must pass on the same bar. Rare confluence; treat hits as serious.
  • OR (either scan) - default. Either scan passes. Most lenient combination.
  • Tightness only - only the Tightness scan must pass.
  • VDU only - only the VDU scan must pass.

Regardless of mode, A+ also requires RMV ≤ tight level - the RMV-tightness gate is built into the trigger, not optional. Both scan formulas are scoped to the bar-level conditions only; universe filters (price, market cap, liquidity) belong in the screener layer, not the indicator, and have been intentionally omitted.

Alerts

Three alert conditions are exposed for use in TradingView's alert dialog:

  • RMV - tight zone entry - fires on the bar RMV crosses down through the tight level. The "we just entered compression" signal.
  • RMV - very tight - fires on the bar RMV crosses down through the very-tight level. Compression is now deep.
  • RMV - A+ setup formed - fires on the bar A+ first prints (rising edge), per the chosen mode. Doesn't re-fire on subsequent A+ bars in the same streak.

Pine Screener

Screener exports

The indicator exposes ten boolean conditions as 1/0 columns to TradingView's Pine Screener and Data Window. They don't add anything to the chart pane - they exist purely for screening across a watchlist or universe. In Pine Screener, filter on the column's value > 0 to find names matching the scan.

ColumnFires when
Scan: RMV ≤ very tightCurrent RMV is at or below the very-tight level (default 10).
Scan: A+ setupA+ trigger passes (per the chosen mode) and the built-in RMV ≤ tight gate is satisfied.
Scan: Rank 1 (confluence)A+ and trough fire simultaneously on the current bar.
Scan: Rank 2 (A+ only)A+ fires without an accompanying trough.
Scan: Rank 3 (trough only)RMV is the lowest reading over the trough lookback, with no A+ on the bar.
Scan: Rank 4 (viable, no signal)RMV ≤ warm level but neither A+ nor trough is firing.
Scan: Smoothed bottom + breakoutThe smoothed RMV recently bottomed inside the tight zone and the current RMV has crossed into expansion (≥ 50). Useful for catching the moment compression releases.
Scan: Tightness passThe embedded Tightness scan passes - independent of A+ mode.
Scan: VDU passThe embedded VDU (Volume Dry-Up) scan passes - independent of A+ mode.
Scan: Both scans passBoth Tightness and VDU pass simultaneously, regardless of the A+ mode setting.

How I Use It

How I use it

Daily timeframe, NSE liquid names. RMV does its best work on instruments where daily bars are statistically meaningful. Illiquid names produce noisy compression that doesn't tell you much; the indicator's value comes from clean baselines, and clean baselines need real participation.

RMV is deliberately scoped narrow - it is a setup detector, not a trigger. The indicator does not look at trend strength, relative leadership, or price-pane structure. Moving averages on price live on a separate price-pane indicator, kept in sync manually. Relative strength and momentum are a separate workflow entirely. RMV's only question is "is today compressed against recent context?" - everything else is read from other layers.

Read the four-tier signal layer first, then the smoothed line. Coral (➊) and yellow (➋) are the top tier - I treat them at roughly the same weight; confluence is rarer, but any A+ firing with RMV inside the tight gate is worth opening the price pane for. Mint (➌) is the next read down - deepest compression of the cycle, often leading a breakout by 1-3 bars. Grey (➍) is the slow-build state - the regime is right, nothing is firing, but the name is on the radar. The smoothed line is the structure check: when it stays below the tight level for several bars, compression is real, not a single quiet day inside a noisy stretch.

Entry decisions still happen on the price pane. RMV tells me a setup is forming or has formed; the actual buy stop, the volume confirmation, and the MA confluence are price-side reads. The pivot-line auto-draw was deliberately removed during development - judging the breakout level visually keeps the discretion in the right place.

Pine Screener for cross-sectional sweeps. The 1/0 columns plug directly into TradingView Pine Screener; filter on the column's value > 0 to find names matching the scan. The columns I use most often:

  • Scan: Rank 1 (confluence) - for the rare confluence sweep across a watchlist.
  • Scan: A+ setup - the broader "any A+ fired today" sweep, regardless of trough.
  • Scan: Rank 3 (trough only) - to find names sitting at deepest compression right now.
  • Scan: Smoothed bottom + breakout - to catch names where the smoothed RMV recently bottomed inside the tight zone and the current bar has crossed back above neutral - the moment compression releases.

Change Log

Version history

  1. v2.0 May 2026
    Hybrid body/range numerator with absolute-tightness gate and strong-rejection rule. Today-exclusive baseline (max of ATR(N) and N-bar high-low range). Four-tier rank system, A+ scan integration (Tightness + VDU), Pine Screener exports.
  2. v1.0 28 Oct 2024
    Initial public release.

Disclaimer

For educational purposes only. Not investment advice. Past performance does not guarantee future results.