Back to Research
Volatility & Risk August 19, 2026 • 17 min read

Jumps vs. Continuous Volatility: Bipower Variation and Jump Detection

Two sessions can share the same realized variance and be nothing alike — one a steady hum of small moves, the other calm until a single violent gap. Standard volatility can't tell them apart. Bipower variation can: it measures the market's continuous diffusion while ignoring jumps, so the difference between the two reveals exactly how much of the risk was a jump. This is the complete guide.

1. One number, two kinds of risk

Realized variance — the sum of squared intraday returns — is the standard model-free measure of how much a market moved. But it silently blends two very different processes. Most of the time price moves in a continuous diffusion: a dense stream of small increments. Occasionally it jumps: a discrete, near-instant repricing on news, a liquidation, or a gap. Realized variance adds both into a single total and cannot say how much came from which.

That distinction is not academic. Continuous and jump risk behave differently, hedge differently, and often mean different things for what happens next. A day whose variance was mostly diffusion is business as usual; a day whose variance was mostly one jump is a different animal — closer to the tail risk that realized kurtosis also flags. To separate them, you need an estimator that sees the diffusion but not the jumps.

2. Bipower variation: volatility that ignores jumps

Barndorff-Nielsen and Shephard (2004) found a beautifully simple one. Instead of squaring each return, bipower variation multiplies the absolute values of adjacent returns:

BV = (π / 2) · Σi | ri−1 | · | ri |

The trick is in the pairing. A jump inflates exactly one return, but that return gets multiplied by its neighbour — which is a normal, small diffusive move. So the jump's outsized contribution is damped instead of squared, and in the limit BV converges to the continuous variance alone. The constant π/2 (equal to 1/μ12, where μ1 = √(2/π) is the mean absolute value of a standard normal) rescales the product of two half-normals back to a variance.

3. Isolating the jump

Once you have both realized variance (which sees everything) and bipower variation (which sees only the diffusion), the jump contribution is just their difference, floored at zero:

jump variation = max( RV − BV , 0 )

The floor at zero matters: in a jumpless session, sampling noise can leave BV slightly above RV, and a negative "jump" is meaningless. Expressed as a fraction of realized variance, the relative jumpmax(RV − BV, 0) / RV — lands in [0, 1] and reads as the share of the session's variance that came from jumps. Near 0: pure diffusion. Near 1: a session dominated by one or two gaps.

Measure Sees Formula
Realized variance (RV)Diffusion + jumpsΣ ri²
Bipower variation (BV)Diffusion only(π/2) Σ |ri-1||ri|
Jump variationJumps onlymax(RV − BV, 0)

4. Why the split is worth having

Decomposing variance into continuous and jump parts pays off in several places. In forecasting, the continuous component is persistent — it carries over to tomorrow — while the jump component is far less predictable, so models that separate them forecast volatility better than models that lump them together. In risk management, jump variation is a direct read on gap and tail exposure, the kind of risk that a smooth variance number averages away right until it bites. And for execution, knowing that recent variance was jump-driven rather than diffusive changes how much of it you should expect to persist while you work an order — a judgement that pairs naturally with the flow-toxicity read from VPIN.

5. Reading it honestly

Bipower variation is powerful but not magic. It needs enough returns to be stable — a handful of observations gives a noisy split. At very high sampling frequencies, microstructure noise (bid-ask bounce, discreteness) inflates both RV and BV and can distort the difference; sampling by activity with information-driven bars, or simply sampling a little coarser, keeps the estimate honest. And bipower variation tells you a jump happened and roughly how big — formal significance tests (Barndorff-Nielsen & Shephard's ratio statistic, and later threshold methods) decide whether a given day's jump component is statistically real. Treat it as a strong, cheap first read on jump risk, cross-checked against the other realized measures rather than trusted in isolation.

6. Where it fits

Jump detection completes the "realized measures" corner of the toolkit. Realized variance gives you the size of the moves; realized skewness and kurtosis give you their shape; bipower variation tells you how much of it was a jump versus a grind. Read alongside the regime signal from the Hurst exponent and the efficiency picture from the variance ratio, it builds a fuller description of a session's risk than any single number — and, being model-free and cheap, it drops straight into a backtest or a live monitor.

7. Computing it

All three quantities are a couple of sums over a return series. Our open-source orderflow-metrics library ships them, dependency-free, in TypeScript and Python:

import { bipowerVariation, jumpVariation, relativeJumpVariation } from "orderflow-metrics";

bipowerVariation(returns);       // (π/2)·Σ|rᵢ₋₁||rᵢ| — continuous variance
jumpVariation(returns);          // max(RV − BV, 0)    — variance from jumps
relativeJumpVariation(returns);  // jump share of RV, in [0, 1]

The Python distribution exposes the same functions in snake_case. Point them at a rolling window of returns, watch the relative jump climb when a gap hits, and you have a live jump gauge — one more lens in the market microstructure stack we build in the open.

8. Conclusion

Volatility is a total; risk lives in the parts. Bipower variation splits realized variance into the continuous diffusion the market grinds out day to day and the discrete jumps that arrive with news — and the gap between the two is a clean, model-free measure of jump risk. Measure it on enough clean data, floor the jump at zero, and read it beside variance, higher moments, and toxicity rather than instead of them, and you turn a single blurry number into a map of where a session's risk actually came from. Explore the rest of the toolkit in our quantitative research library, or read the implementation in our open-source metrics.

For more on volatility analytics and open-source tooling, visit our official resources:

🧩 Open Source 💻 orderflow-metrics on GitHub 📚 More Research