Tools / Relative Measured Volatility (RMV)
Relative Measured Volatility (RMV)
A tightness oscillator for spotting compression before breakouts - any tight setup, not just VCP.
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.
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.
| Step | Condition | Numerator |
|---|---|---|
| 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
| Input | Default | What 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
| Input | Default | What 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
| Input | Default | What 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
| Input | Default | What 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
| Input | Default | What 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.
| Rank | Name | Colour | Condition | What 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.
| Column | Fires when |
|---|---|
| Scan: RMV ≤ very tight | Current RMV is at or below the very-tight level (default 10). |
| Scan: A+ setup | A+ 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 + breakout | The 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 pass | The embedded Tightness scan passes - independent of A+ mode. |
| Scan: VDU pass | The embedded VDU (Volume Dry-Up) scan passes - independent of A+ mode. |
| Scan: Both scans pass | Both 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
-
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.
-
v1.0
28 Oct 2024
Initial public release.
Disclaimer