Price-volume divergence is the largest category in Alpha 101, with 32 factors. As covered in the overview, the core thesis fits in one sentence: price and volume should move together, and when they don’t, there’s a trading opportunity.
This article picks 5 classic factors from the group, breaks down each formula layer by layer, and examines how WorldQuant turned the ancient technical analysis concept of “volume confirms price” into computable signals.
Alpha#3 vs Alpha#6: How Much Does Rank Matter
Alpha#3 was introduced in the overview:
$$\text{Alpha#3} = -1 \times \text{correlation}(\text{rank}(\text{open}),\ \text{rank}(\text{volume}),\ 10)$$Alpha#6 looks almost identical, with one difference: no rank.
$$\text{Alpha#6} = -1 \times \text{correlation}(\text{open},\ \text{volume},\ 10)$$The gap in practice is substantial.
The ranked version (#3) first converts all stocks’ open prices and volumes into cross-sectional percentile ranks, then computes the correlation between those ranks. A stock trading at $1,800 and another at $5 get mapped to comparable 0-to-1 values. Outliers cannot distort the correlation.
The raw version (#6) feeds raw prices and volumes directly into Pearson correlation. If one stock sees a 10x volume spike on a single day (say, from a retail trading frenzy), that single outlier can drag the entire 10-day correlation toward +1 or -1. Pearson correlation is notoriously sensitive to extreme values.
In practice, #3 produces more stable signals with lower turnover, suitable for strategies with 3~5 day holding periods. #6 reacts more sharply to abnormal volume events, generating noisier but faster signals for 1~2 day reversals.
These two factors represent the same economic hypothesis (price-volume divergence predicts reversal) at opposite ends of the robustness-vs-sensitivity spectrum.
Alpha#14: Two-Dimensional Signal Stacking
$$\text{Alpha#14} = -1 \times \text{rank}(\text{delta}(\text{returns}, 3)) \times \text{correlation}(\text{open},\ \text{volume},\ 10)$$This factor multiplies two independent signal dimensions.
First term rank(delta(returns, 3)): the cross-sectional rank of the 3-day change in daily returns. delta(returns, 3) is today’s daily return minus the daily return from 3 days ago. Positive values mean returns are accelerating.
Second term correlation(open, volume, 10): the raw 10-day correlation between open price and volume (same as Alpha#6).
Multiply them together, negate. When does the factor produce the strongest long signal?
Since rank is always positive (0 to 1), the sign of the product depends on the correlation term. When correlation < 0 (price-volume divergence), the product is negative, and negation makes it positive: a long signal. The strongest long signal occurs when returns are accelerating AND price-volume divergence is present.
The economic story: a stock whose returns are accelerating without a corresponding volume increase is rising “quietly.” This kind of move tends to persist because it hasn’t attracted momentum chasers yet, so profit-taking pressure remains low.
Compared to the single-dimension Alpha#6, Alpha#14 adds a “return acceleration” filter. More refined in theory, but with more parameters (3-day diff + 10-day correlation), the overfitting risk increases proportionally.
Alpha#17: Three-Factor Interaction
$$\text{Alpha#17} = -1 \times \text{rank}(\text{ts_rank}(\text{close}, 10)) \times \text{rank}(\text{delta}(\text{delta}(\text{close}, 1), 1)) \times \text{rank}(\text{ts_rank}(\text{volume} / \text{adv20}, 5))$$Three terms multiplied together, each with a distinct economic meaning:
Term 1 rank(ts_rank(close, 10)): where today’s close ranks within the past 10 days, then ranked cross-sectionally. High value = the stock is near its 10-day high and ranks high among all stocks on that measure.
Term 2 rank(delta(delta(close, 1), 1)): the second-order difference of close prices. delta(close, 1) is today-minus-yesterday; applying delta again gives the acceleration of price change. Positive = price increases are speeding up (or declines are slowing down).
Term 3 rank(ts_rank(volume/adv20, 5)): today’s volume relative to its 20-day average, ranked within the past 5 days. High value = recent volume is elevated relative to the medium-term norm, and today may be the heaviest-volume day in the window.
All three terms are ranks in (0, 1], so their product is always positive. Negation makes the factor always negative, with larger magnitudes (stronger short signals) when all three terms are high simultaneously: price at a 10-day high + acceleration increasing + volume surging.
In trading terms: a stock that has rallied to a 10-day peak while accelerating and drawing massive volume is showing classic “climax top” behavior. Technical analysts call this “天量见天价” (peak volume marks peak price). The subsequent profit-taking tends to be severe.
The cost of three-factor interaction: four time parameters (10-day price window, 1-day differencing, 20-day average volume baseline, 5-day volume window), all tunable. These numbers were almost certainly optimized in-sample and should be re-validated on different markets.
Alpha#55: Price Position × Volume Divergence
$$\text{Alpha#55} = -1 \times \text{correlation}\!\Big(\text{rank}\!\Big(\frac{\text{close} - \text{ts_min}(\text{low}, 12)}{\text{ts_max}(\text{high}, 12) - \text{ts_min}(\text{low}, 12)}\Big),\ \text{rank}(\text{volume}),\ 6\Big)$$Start with the ratio inside the first rank:
$$\frac{\text{close} - \text{ts_min}(\text{low}, 12)}{\text{ts_max}(\text{high}, 12) - \text{ts_min}(\text{low}, 12)}$$The denominator is the 12-day price range (highest high minus lowest low). The numerator is how far today’s close is above that range’s floor. The ratio ranges from 0 to 1, measuring where the current price sits within the recent 12-day channel. A value of 1 means close equals the 12-day high; 0 means close equals the 12-day low.
This is essentially a slow Stochastic Oscillator with a 12-day window (instead of the classic 14), using close relative to the full high-low range rather than just the current day’s range.
The factor then computes a 6-day rolling correlation between the cross-sectional rank of this price-position measure and the rank of volume, negated.
Economic reading: when a stock near the top of its 12-day range also shows high volume (positive correlation), it’s “high and loud,” attracting too much attention. Negation produces a short signal. When a stock is near the top but volume is quiet (negative correlation), it’s “high and calm,” suggesting limited selling pressure. Negation produces a long signal.
Unlike Alpha#3, which uses raw open prices, #55 first normalizes price into a 0-to-1 position indicator. A stock that climbed from $100 to $120 and one that went from $10 to $12 both register at position 1.0, making the signal comparable across different price levels.
Common Patterns Across 32 Price-Volume Factors
Spread out all 32 factors, and the construction recipes fall into three buckets:
Pattern 1: correlation(rank(price_var), rank(volume_var), window)
Factors #3, #6, #15 (using high instead of open), #44 (using low), #78, #81, #85, #95, #99 all share this skeleton. They differ in which OHLC field is used, whether rank is applied, and the window length.
The economic hypothesis is identical across this group: price-volume divergence predicts reversal. Different price variables tap different information sources. Open reflects overnight information digestion, close reflects intraday trading outcome, high/low reflect extreme sentiment.
Pattern 2: price-volume correlation × another signal dimension
Factors #14 (× return acceleration), #22 (× price volatility), #45 (× decay_linear of close changes). These compute a price-volume correlation as the base signal, then multiply by a second dimension to filter or amplify.
Pattern 3: scale / decay_linear post-processing
Factors #32 (scale to convert signals into position weights), #77 (decay_linear to weight recent signals more), #88 (decayed correlation of open price ranks). These add signal intensity or time-decay adjustments on top of the core divergence logic.
All 32 factors are variations of the same thesis: stocks where price and volume disagree are more likely to reverse. If you’re building your own factor library, you don’t need all 32. Pick 1~2 from each pattern (e.g., #3, #14, #55) and you’ve captured most of the independent signal. The rest are largely redundant.
The next article covers momentum and reversal factors, examining how Alpha 101 handles the question of when to follow the trend versus when to bet against it.
Series Navigation
- Alpha 101 Full Guide: Factor Classification & Operator Reference
- This article: Price-Volume Divergence Factors (32 factors)
- Momentum & Reversal Factors (23 factors)
- Volatility & Intraday Structure Factors (23 factors)
- Liquidity, Composite Factors & Portfolio Construction (23 factors)