INDICATOR MANUAL
Historical volatility percentile indicatorVolatility Regime Classifier [AFD] · full manual · published to TradingView
Classify the chart symbol’s realized volatility by historical percentile, relative expansion, and acceleration—without implying direction or a forecast.
Start here
What the indicator does, the questions it can help answer, and its fresh-install defaults.
The indicator measures the chart symbol’s own realized volatility in a separate pane. It does not request options, implied-volatility, or external-symbol data. Parkinson, close-to-close, Garman–Klass, and ATR estimators offer different definitions of how much the recent bars moved.
The active short-window reading is ranked against the latest 400 readings of the same estimator. The current value is included and ties count as at-or-below. The reported QUIET, NORMAL, ELEVATED, or EXTREME tier applies fixed 25, 75, and 85 percentile boundaries with a one-point hysteresis band.
A separate absolute-size rule can call a bar EXTREME when the short window reaches an estimator-specific multiple of the long window, even before the percentile sample fills. Expansion, short-versus-baseline state, and acceleration remain distinct measurements; none supplies price direction or a trading instruction.
Fresh-install defaults8 documented defaults
Swipe or scroll horizontally to see every column.
| Area | Default | Result |
|---|---|---|
| Estimator and sensitivity | Parkinson · Fast | Uses high-low range over 5, 15, and 30 bars; the percentile ranks the 5-bar reading. |
| Absolute EXTREME route | On · 1.35× for Parkinson | Can classify EXTREME from short-versus-long size even while the 400-reading rank is warming up. |
| Session-gap handling | Exclude on | Drops intraday session-gap observations only for close-to-close and ATR; it is inert for the default Parkinson basis. |
| Dashboard | On · Compact · Top right · Small | Shows the tier, plain-language reading, short-versus-long comparison, and acceleration while the hover glossary carries the folded setup details. |
| Percentile line | Auto gradient · Signal · Line · width 2 | Draws the 0–100 percentile as a continuous styled line. |
| Pane context | Fill on · tier zones on · thresholds on | Adds a faint line fill, tier bands, and boundary lines without replacing the numeric states. |
| Price-chart markers | EXTREME only · Bar column · Entry bar | Marks entry into EXTREME; QUIET, NORMAL, ELEVATED, and RISING start off. |
| Market context box | Middle right · Small | Pins a size-only summary to the price chart and states that it says nothing about direction. |
How it works
How the indicator turns chart data into the states and drawings you see.
Four realized-volatility estimators
Close-to-close is the population standard deviation of log returns. Parkinson and Garman–Klass take the root mean of per-bar range-based variance terms. ATR is a plain mean of true range divided by each bar’s own close—not Wilder’s smoothing and therefore not the same as ta.atr().
Matched sensitivity windows
Fast uses 5/15/30 bars, Normal 10/30/60, and Slow 20/60/120. The long window stays six times the short window, and acceleration compares the short reading with its value one short window earlier.
Full-window percentile
The short-window reading is ranked only after 400 valid readings exist. Percentile equals the share of that buffer less than or equal to the current reading, including the current bar. A partial buffer remains undefined and is reported as warming up.
Tier, band, and absolute override
Raw percentile tiers begin at 25, 75, and 85. A one-point band resists marginal boundary reversals and reports when it holds a different raw tier. The optional absolute-size route bypasses that band at estimator-specific short/long multiples: 1.35 Parkinson, 2.00 close-to-close, 1.30 Garman–Klass, or 1.40 ATR.
Expansion and acceleration
Short versus long reports a ratio and classifies it as ABOVE BASELINE, BELOW BASELINE, or IN LINE with a 0.10 tolerance. Acceleration compares current short-window volatility with its earlier value and calls a move RISING or FALLING beyond 5%, otherwise STEADY.
Session-gap exclusion
On intraday charts, the first observation spanning a session boundary is dropped—not replaced with zero—for close-to-close and ATR. Parkinson and Garman–Klass use within-bar quantities, so the same setting does not alter them.
Pane, dashboard, and price-chart context
The styled percentile line, tier zones, dashboard, hover glossary, optional bar columns, episode boxes, and market context box restate the measured states. Color is never the sole carrier, and price-chart context explicitly remains size-only.
Output and state reference10 documented states
Swipe or scroll horizontally to see every column.
| Output or state | When it appears | Meaning |
|---|---|---|
| VOL PERCENTILE | 400 valid short-window readings | 0–100 rank of the current reading against the configured trailing sample. |
| QUIET / NORMAL / ELEVATED / EXTREME | Reported tier after band or size override | Historical-volatility classification, not a direction or probability. |
| EXTREME BY SIZE | Short/long ratio reaches estimator threshold | Absolute-size route that can operate before the percentile rank is ready. |
| SHORT VS LONG | Usable short and long windows | Expansion ratio and percentage gap between the two realized-volatility estimates. |
| ABOVE / BELOW BASELINE / IN LINE | Short/long comparison | Tolerance-based classification of the same ratio. |
| RISING / FALLING / STEADY | Short-window change versus one short window ago | Acceleration state after the 5% deadband. |
| WARMING UP | Percentile buffer below 400 or outputs incomplete | Shows the loaded sample instead of ranking a partial window. |
| NO MOVEMENT | Long-window realized volatility equals zero | Suppresses the misleading all-zero percentile tier. |
| PRICE-CHART MARKER | Enabled tier or RISING state | Entry column, continuing columns, episode box, or both using the tier palette. |
| SCREENER / DATA WINDOW | Published numeric plots | Ten primary series plus band and override diagnostics remain available as numbers. |
Settings
The 39 rows below match the published Pine input surface across Basis, Display, Tier colours, Percentile line, Pane shading, and Price-chart markers. The lookback, thresholds, hysteresis, comparison tolerance, and acceleration deadband are fixed source constants and disclosed by the dashboard rather than exposed as inputs.
Basis4 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Volatility estimatorestimatorInput | Choice / text | Parkinson (high-low) | Parkinson (high-low) · Close-to-close · Garman-Klass (OHLC) · ATR (average true range) |
| SensitivitysensitivityInput | Choice / text | Fast | Fast · Normal · Slow |
| Also call EXTREME by absolute sizeextremeBySizeInput | Toggle | On | — |
| Exclude the session gapexcludeSessionGapInput | Toggle | On | — |
Display6 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Show dashboardshowDashboardInput | Toggle | On | — |
| Compact dashboarddashCompactInput | Toggle | On | Conditional |
| Dashboard positiondashPositionInput | Choice / text | Top right | Top left · Top center · Top right · Bottom left · Bottom center · Bottom right | Conditional |
| Dashboard text sizedashTextSizeInput | Choice / text | Small | Tiny · Small · Normal · Large | Conditional |
| Colour the dashboard by regimecolorDashboardInput | Toggle | On | Conditional |
| Show the hover glossary markershowInfoMarkerInput | Toggle | On | — |
Tier colours4 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| QUIETtierQuietColorInput | Color | #26C6DA | — |
| NORMALtierNormalColorInput | Color | #66BB6A | — |
| ELEVATEDtierElevatedColorInput | Color | #FFA726 | — |
| EXTREMEtierExtremeColorInput | Color | #EF5350 | — |
Line7 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Line colour modelineColorModeInput | Choice / text | Auto gradient | Auto gradient · Tier colour · Fixed colour |
| Gradient presetlineGradientInput | Choice / text | Signal | Signal · Ocean · Ember · Mono · Custom |
| Custom gradient - low endgradientLowInput | Color | #00B0FF | — |
| Custom gradient - high endgradientHighInput | Color | #FF1744 | — |
| Fixed line colourlineColorInput | Color | #2962FF | — |
| Line stylelineStyleInput | Choice / text | Line | Line · Stepline · Histogram · Circles |
| Line widthlineWidthInput | Whole number | 2 | Min 1 · Max 5 |
Fill and zones5 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Fill under the lineshowFillInput | Toggle | On | — |
| Fill transparencyfillOpacityInput | Whole number | 88 | Min 0 · Max 100 | Conditional |
| Shade the tier zonesshowZonesInput | Toggle | On | — |
| Zone transparencyzoneOpacityInput | Whole number | 92 | Min 0 · Max 100 | Conditional |
| Draw the threshold linesshowBoundsInput | Toggle | On | — |
Price-chart markers13 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Mark QUIETmarkQuietInput | Toggle | Off | — |
| Mark NORMALmarkNormalInput | Toggle | Off | — |
| Mark ELEVATEDmarkElevatedInput | Toggle | Off | — |
| Mark EXTREMEmarkExtremeInput | Toggle | On | — |
| Mark RISINGmarkRisingInput | Toggle | Off | — |
| Marker stylemarkStyleInput | Choice / text | Bar column | Bar column · Price box · Both |
| Marker modemarkModeInput | Choice / text | Entry bar only | Entry bar only · Every bar in the tier |
| Bar column transparencymarkOpacityInput | Whole number | 82 | Min 0 · Max 100 |
| Price box transparencyboxOpacityInput | Whole number | 90 | Min 0 · Max 100 |
| Outline the price boxboxBorderInput | Toggle | On | — |
| Also mark in this panemarkPaneInput | Toggle | On | — |
| Market context boxcontextBoxInput | Choice / text | Middle right | Off · Top right · Middle right |
| Market context text sizecontextSizeInput | Choice / text | Small | Tiny · Small · Normal · Large | Conditional |
Alerts and limitations
What can notify you, what can change the output, and what the indicator cannot establish.
3 fixed alert conditions
The reported realized-volatility tier changed on a confirmed bar.
The short-window classification against the long-window baseline changed on a confirmed bar.
The reported tier entered EXTREME on a confirmed bar.
Limits to keep visible
- The percentile is self-normalizing historical context. A high rank does not estimate direction, probability, future volatility, or trade performance.
- The default Fast percentile needs roughly 404 chart bars before its 400-reading rank is complete. The absolute-size route may report EXTREME earlier and states that reason separately.
- The active realtime bar can change until it closes. Confirmed-bar alert logic does not establish a blanket non-repainting claim for every visual output.
- Parkinson and Garman–Klass ignore the cross-session gap by construction; Exclude the session gap affects only close-to-close and ATR on intraday charts.
- ATR mode is a simple mean of true-range fractions, not Wilder’s ATR. Comparing it with ta.atr() at the same length will produce different values.
- The four estimators measure different quantities and use different absolute EXTREME thresholds. Their raw values should not be compared as though they share one scale.
- Changing symbol, timeframe, estimator, sensitivity, or available chart history changes the population being ranked and can change every downstream state.
- Price-chart markers and the context box describe bars already measured. They are not entries, exits, stops, targets, or instructions.
Troubleshooting
Start with what you see on the chart. Each answer explains the likely cause and the first setting, timeframe, or data condition to check.
Why does the dashboard say WARMING UP?
The indicator does not yet have the 400 complete readings needed for its percentile rank, or one of the comparison windows is still incomplete. Load more chart history or wait for more bars; the script will not rank a partial sample.
Why is the tier EXTREME when the percentile is blank or only moderate?
The absolute-size override is active. The short-window volatility reached the estimator’s size threshold relative to the long window, so the script can call EXTREME without a high percentile. Turn off Also call EXTREME by absolute size if you want tiers based only on percentile.
Why did Exclude the session gap change nothing?
That setting only changes Close-to-close and ATR on intraday session boundaries. Parkinson and Garman–Klass use movement inside each bar, so session gaps are not part of those estimates. Switch estimators if you want to see the setting take effect.
Why does ATR mode disagree with another ATR indicator?
This mode averages true range as a fraction of each bar’s close using a simple N-bar mean. It is not Wilder’s ATR and is scaled differently, so the readings should not match a standard ta.atr() plot.
Why didn’t the tier change exactly at 75 or 85?
The reported tier uses a one-point buffer around each threshold to prevent rapid flipping. The raw tier can cross first while the reported tier holds its prior state. Check the dashboard’s raw-tier note when a boundary looks delayed.
Why can’t I see the estimator or windows in Compact mode?
Compact mode hides that setup detail from the main table. Keep the hover glossary visible for a quick reminder, or turn Compact dashboard off to see the estimator and both windows directly.
Why is an existing alert still using my old settings?
TradingView saved the symbol, timeframe, and indicator inputs when the alert was created. Delete the alert and create a new one after changing the chart context or settings.