NVDA makes the case for Huber preaveraging at the shortest horizons. On 16 October 2024, annualized volatility at one second is 34.3% under the Huber filter, against 43.1% from linear preaveraging and 77.9% from raw trades. The cross-section tells the same story. Among the paper's 54 assets, median spot volatility from the linear filter is 1.22 times the Huber estimate above ten trades a second. Below one trade a second, the ratio is 1.01. The empirical argument rests on that divide.
The filter Donker van Heel and Shephard built
Preaveraging uses a linear filter, leaving an absurd print in the estimate for as long as its weight persists. Mykland and Zhang (2016) addressed part of this problem by replacing the block average with a block M-estimator. Their method divides the day into non-overlapping blocks and estimates one price per block under a Huber loss.
This paper extends the construction in three directions. Filtering takes place at every trade. Researchers can choose uniform, exponential, hyperbolic, or superposition-of-exponentials weights. The Huber threshold also follows the intraday noise scale instead of remaining fixed.
We could not test the method on our own data. Its mechanism operates on individual trade prints, while minute OHLCV bars have already averaged away the heavy-tailed noise it is designed to resist. Applying it to bars would produce a different estimator for a different object and would fail as a replication.
At time t, the filter minimizes a weighted sum of earlier losses. The criterion can include expected loss under a stationary model, with the mixture weight termed the anchor by the authors. Setting the anchor to one leaves a weighted empirical loss based solely on observed data, which is the specification used in the empirical work.
Computation is the obstacle. A weighted median or M-estimate over t observations costs O(t), making a complete pass through T points O(T^2). On 16 October, that means processing 1,521,339 trades.
The lag sampler is the part worth keeping. Because the criterion equals the loss integrated against a mixture CDF, it can be estimated by sampling lag lengths. Draw j with P(j = k) = w_{t,k} through inverse transform, retrieve Y_{t-j}, then minimize empirical loss across B resampled observations. Each time point costs O(1) in t and the full pass costs O(T). Each value from t = 1 through T can also be handled in parallel because the calculation has no recursive dependence.
Their implementation uses stratification. The head of the weight distribution is calculated exactly through its 0.999 quantile, equal to 29 lags under the exponential weights, while B = 100 draws cover the tail. In the mean case, simulation error is conditionally unbiased and obeys a CLT in B. For the median, the paper derives the estimator's exact binomial CDF.
The authors then stack five filters on roughly 19.6 million NVDA prints from TAQ via WRDS, covering twelve October 2024 days. An exponentially weighted median with a three-trade half-life first estimates price. That output enters a weighted-median noise scale with a four-minute clock-time half-life. The resulting Huber threshold is 2 x 1.4826 x the scale, running around 1.5 cents for most of the day and reaching 2.97 cents at the open on 16 October. Finally, the Huber price feeds spot and integrated volatility estimators using hyperbolic weights, with Mandelbrot parameter 563 trades selected by QLIKE.
How flat is the one-second signature?
At five seconds, the median, Huber, and linear paths are 34.3 / 35.9 / 44.5. At one minute they read 33.3 / 33.4 / 35.7. By fifteen minutes, every filtered path agrees to a fraction of a percent: 37.1 median, 37.1 Huber, and 37.1 linear, with raw trades at 37.2. Linear preaveraging loses ground only when sub-minute returns matter. Beyond a few minutes, filtering itself makes little difference, as the early realized volatility literature already established.
The authors give two qualifications. Flatness applies to the short end of the curve: Huber volatility moves from 34.3 at one second to 37.1 at fifteen minutes. Their conclusion therefore calls it conservative to describe the plot as flat for s at or above one second.
Finite-sample damping adds another qualification. The correction raises the one-second Huber estimate by 4.9%, compared with 0.5% at ten seconds. Its term, c_{t,s}, is calibrated by passing simulated Brownian paths through the observed trade times. In a Brownian, noise-free simulation of 100 paths, the ratio-of-averages estimator remains 1.8% biased at 0.1 seconds. A pure-jump variance gamma simulation exposes the correction's limits: it is too small at the shortest lags and too large immediately beyond them. The authors report that mismatch themselves.
Noise without a variance
The tail estimate is more striking than the volatility comparison. On 16 October, the Huber residual has a Hill index of 1.43, averaged over the largest 0.1% to 1% of residuals. Below two. Across the twelve days, estimates range from 1.23 to 1.81.
The result survives several checks. Removing the two largest residuals leaves the estimate at 1.43. Sampling every tenth trade gives 1.41. Changing the half-life from three trades to six produces 1.47. Across twelve random subsamples of 25,000 trades, the range is 1.33 to 1.49.
Residual sums show how concentrated the squared noise becomes. The largest residual alone contributes 35% of the sum of squared residuals, while accounting for 0.3% of the sum of absolute residuals. The largest thousand observations, just 0.07% of trades, contribute 85% and 7%, respectively.
This matters for preaveraging, two-scale, and realized-kernel estimators. Their noise-bias adjustment is Var(psi(eps)) divided by E[psi'(eps)] squared. Under a linear filter, psi is the identity and the adjustment becomes the noise variance. When that variance does not exist, neither does the correction, and its sample estimate increases without bound as trades accumulate.
Huber's score is capped at the threshold, making the numerator finite by construction. The bound carries through to the estimated filter standard error: 0.22 cents for the Huber path, compared with a sample 0.56 cents for the linear path, whose theoretical value is infinite.
Where the advantage disappears
The boundary comes from the 54-asset cross-section, and the authors state it plainly. Above ten trades per second, every name has a residual Hill index at or below 2.1. Median spot volatility from the linear filter is 1.22 times the Huber estimate. Below one trade per second, the ratio falls to 1.01.
Slower names contain more outliers, 6% of trades compared with 2%, yet those outliers are moderate enough to do little damage to the linear filter. The Huber signature also loses its flat shape as activity declines. The ratio of one-minute to one-second volatility is about 0.92 for the fastest names and about 0.6 below three trades per second. Among the 53 other stocks, seven have Hill indices between one and two, 28 between two and three, twelve between three and four, and six at four or above.
The honest scope is the top handful of US names by print count.
The cross-section also supplies the paper's cleanest diagnostic. Across the twelve days, lag-1 autocorrelation in Huber-filtered one-trade changes is negative for only seven stocks. All seven rank among the eight most heavily traded. The sign indicates whether residual noise or filter averaging is dominant.
The NVDA episode comes from an 85-share trade at $118.85, around $10,000 in notional and 11.5% below a local level near $134. The linear filter falls about $3.40 before recovering within roughly half a second. Spot volatility rises from about 23% to about 273% annualized, then takes the next half hour to decay. The Huber filter barely responds.
SPY produces an even larger blowup despite being the sample's quietest name, at 0.06 basis points against NVDA's 0.16. A six-share print at $522.93, roughly 10% below market, sends its linear estimate to 138 times the prior level.
Hyperparameter selection deserves attention. The three-trade half-life, four-minute scale half-life, and a = 563 were chosen through predictive loss on the same twelve NVDA days used for the headline results. Applying those NVDA settings to the other 54 assets, comprising 53 stocks and SPY, raises median k-trade-ahead Huber forecast loss by 1.7%. GOOG alone fares worse than 5%. Across the 54 stocks, the median optimal scale half-life is exactly four minutes, and fixing it at four minutes costs every stock no more than 1%.
I would use the lag sampler tomorrow. It removes the computational reason for defaulting to rolling windows and linear filters on long series. On 16 October, off-exchange prints generated 91% of the outliers. Those prints have a ten-second reporting allowance and represented about 51% of the day's trades. A trade-level filter with a bounded score follows naturally from those figures.
The real-data signature curves include the correction. Uncorrected results appear only for simulated Brownian and variance gamma prices, where c_{t,s} = 1 leaves the estimate 7% low at one second and 38% low at 0.1 seconds. The next evidence I would want is the real one-second curve shown both ways.