Normalizing Accumulation–Distribution Across Stocks
Summary
The note considers how to compare accumulation–distribution readings across stocks with different price and volume scales. The indicator’s close-location component is already normalized by the high–low range, while raw volume remains stock-specific. The proposed adjustment is to scale volume by that stock’s usual daily volume, estimated from the median over the previous sixty days, instead of dividing indicator values by a fixed constant and clipping extreme readings.
For unusual combinations of open, high, low, and close, the response points to Garman–Klass volatility estimation as a source of price-range statistics. It also mentions a quadratic-variation method for considering price changes alongside volume, under an assumption that volume is normally homogeneous over time. These are suggestions rather than a validated intraday solution: the response does not address the intraday volume pattern in detail, and the cited price-based method does not itself incorporate volume.
Key ideas
- The close-location term in accumulation–distribution is scaled by the bar’s high–low range, but raw volume is not normalized.
- Scaling volume by a stock-specific rolling median of daily volume can make indicator readings more comparable.
- Garman–Klass statistics can help assess unusual open, high, low, and close configurations.
- Price-based volatility measures do not account for volume, and intraday volume patterns remain a limitation.
Tags
Full text
# normalized accumulation distribution # normalized accumulation distribution I am looking for a way to take an accumulation/distribution indicator and normalize it so I can compare a bunch of stocks with stock prices that have no relationship with each other. EDIT: This would be straightforward on interday data, but the problem is with intraday data: you can't get an intraday normalized volume measure, because the volume is always skewed where there is huge volume in the first and last half out, and relatively meaningless volume otherwise. What I am currently doing is dividing the different AD measures by 1,000 and then capping at +/-80 anything above/below that: ``` closeVsLow = (close - low) ; closeVsHigh = (high - close) ; closeVsOpen = (close - open) ; myrange = (high - low) ; myVolume = volume; AD= ((closeVsLow - closeVsHigh) / myrange) * volume; pvalue = acdOne / 1000; if (pvalue > 80) then pValue = 80; if (pvalue < -80) then pValue = -80; ``` Is there a better way of normalizing this? ## Answer by lehalle (score 1) https://quant.stackexchange.com/a/4179 If I understand well, one part of your analytic is already normalized (`(closeVsLow - closeVsHigh) / myrange`), but not the other (`volume`). If you just aim to compare the values of `AD` from any stock with the other, why not normalizing `volume`by the usual daily volume (median of the daily volume) of the stock during the last 60 days? Moreover, if you really want to detect outliers in terms of relative positioning of open, high, low and close, I suggest you read the following paper by Garman and Klass: On the Estimation of Security Price Volatility from Historical Data. Of course the volume will not be taken into account (they just use a diffusive assumption on the price). But if you consider that volume should be homogenous to time in usual conditions, then you can extract from their paper an interesting theoretical statistic on how normal is the value of the conjunction of (open,high,low,close,volume). There is a paper by Jemery Large: Estimating Quadratic Variation When Quoted Prices Change by a Constant Increment that could be useful to read too.
Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.