This is the final article in the Alpha 101 series. The liquidity and composite group contains 23 factors with the most complex formulas of all five categories: the deepest nesting, the highest usage of decay_linear and IndNeutralize, and the most elaborate conditional logic.
But complexity doesn’t mean obscurity. At their core, these factors tell the same story: follow the smart money.
The overview established the classification framework. The previous three articles covered price-volume divergence, momentum and reversal, and volatility and intraday structure. After breaking down 4 classic factors here, we’ll discuss how to move from “single-factor research” to “factor portfolio construction.”
Alpha#7: Conditional Liquidity Signal
$$\text{Alpha#7} = \begin{cases} -1 \times \text{ts_rank}(\text{abs}(\text{delta}(\text{close}, 7)),\ 60) \times \text{sign}(\text{delta}(\text{close}, 7)) & \text{if } \text{adv20} < \text{volume} \\ -1 & \text{otherwise} \end{cases}$$The overview introduced this factor. Here we examine the conditional logic in depth.
The condition adv20 < volume: does today’s volume exceed the 20-day average? This is the simplest possible definition of “high volume.”
The low-volume branch returns -1 (short signal). The logic is straightforward: volume below average means insufficient participation and weak short-term upside momentum. Regardless of price action, low volume is bearish. How does this hold up in practice? For US large-caps (the paper’s test universe of roughly 1,000 stocks), below-average volume does weakly correlate with negative short-term returns. For thinly-traded small-caps that are perpetually “low volume,” the signal breaks down. The flat -1 works because the paper’s universe has sufficient baseline liquidity.
The high-volume branch centers on ts_rank(abs(delta(close, 7)), 60): the 7-day absolute price change ranked within a 60-day window. Multiplied by sign(delta(close, 7)) (direction), then negated.
If the stock rallied sharply over 7 days (positive delta, sign = +1) with the magnitude ranking high over 60 days (high ts_rank), the product is positive, negation makes it negative (short). The bet: a high-volume rally that ranks among the largest moves in two months signals overheating.
If the stock fell sharply over 7 days (negative delta, sign = -1) with a large absolute decline ranking, the product is negative, negation makes it positive (long). The bet: a high-volume sell-off at a two-month extreme signals overselling.
The 60-day lookback window prevents the factor from triggering on minor noise. A stock that gained 2% over 7 days might only rank at ts_rank 0.3, producing a weak signal. But a 15% gain (top 5% of 60-day history) yields ts_rank 0.95, generating a strong signal.
Alpha#31: Multi-Layer Decay Liquidity Signal
$$\text{Alpha#31} = \text{rank}(\text{rank}(\text{rank}(\text{decay_linear}(\text{rank}(\text{rank}(\text{delta}(\text{close}, 10)))), 10)))) + \text{rank}(-1 \times \text{delta}(\text{close}, 3)) + \text{sign}(\text{scale}(\text{correlation}(\text{adv20}, \text{low}, 12)))$$Five nested ranks make this formula look intimidating. But multiple rank layers have diminishing returns: the first rank compresses values to [0, 1]; the second re-ranks an already-uniform distribution, making it even more uniform; three or more layers essentially perform “hyper-uniformization,” eliminating any residual distributional skew.
Three additive terms:
Term 1: the core is delta(close, 10) passed through decay_linear. The 10-day price change is linearly decay-weighted (recent days weighted more), then multi-rank smoothed. Meaning: the direction of the 10-day price trend, with recency emphasis and extreme distribution flattening.
Term 2 rank(-1 * delta(close, 3)): 3-day price change negated and ranked. Stocks that declined over 3 days rank high. A short-term reversal signal.
Term 3 sign(scale(correlation(adv20, low, 12))): the 12-day correlation between average daily volume and the low price, scaled and reduced to sign. Positive correlation (high volume days coincide with higher lows) yields +1. Negative correlation yields -1.
Sum of three terms: medium-term trend (decayed) + short-term reversal + volume-price correlation direction. A typical “composite factor” that linearly combines signals across different timeframes and dimensions.
Candidly, the 5-layer rank nesting looks more like an optimization artifact than a deliberate design choice with clear economic motivation. Simplifying to 2 layers of rank would likely produce similar results in practice.
Alpha#61: Boolean Factor
$$\text{Alpha#61} = \text{rank}(\text{vwap} - \text{ts_min}(\text{vwap}, 16)) < \text{rank}(\text{correlation}(\text{vwap},\ \text{adv180},\ 18))$$This factor outputs a Boolean (0 or 1), not a continuous value.
Left side rank(vwap - ts_min(vwap, 16)): how far the current VWAP is from its 16-day minimum, cross-sectionally ranked. High value = VWAP is well above its recent trough.
Right side rank(correlation(vwap, adv180, 18)): the 18-day correlation between VWAP and 180-day average volume, ranked. High value = VWAP movement is highly synchronized with long-term liquidity patterns.
Factor = 1 (long signal) when left < right: the stock’s VWAP distance from its recent low ranks below its VWAP-liquidity synchronization rank.
Translation: a stock whose VWAP is still near its 16-day trough (hasn’t rallied much), but whose VWAP tracks long-term volume patterns closely (stable liquidity profile). This combination suggests “good liquidity but still at the bottom,” an undervaluation signal.
Boolean factors play a special role in portfolios. Continuous factors enable fine-grained sorting (rank 0.95 is stronger than 0.85). Boolean factors only distinguish “signal on” versus “signal off.” They work better as filters than sorters: use Alpha#61 to screen out stocks with signal = 0, then apply continuous factors to rank the survivors.
Alpha#75: Dual-Condition Comparison
$$\text{Alpha#75} = \text{rank}(\text{correlation}(\text{vwap},\ \text{volume},\ 4)) < \text{rank}(\text{correlation}(\text{rank}(\text{low}),\ \text{rank}(\text{adv50}),\ 12))$$Another Boolean factor, comparing two different dimensions.
Left side rank(correlation(vwap, volume, 4)): 4-day correlation between VWAP and volume, ranked. Positive correlation = higher volume on higher-price days, the normal “volume confirms price” pattern.
Right side rank(correlation(rank(low), rank(adv50), 12)): 12-day correlation between the rank of daily lows and the rank of 50-day average volume. This is subtler: when stocks with higher intraday floor support (higher low-price rank) also have better liquidity (higher adv50 rank), the correlation is positive. It means “the more liquid the stock, the stronger its downside support.”
Factor = 1 when: short-term volume-price synchronization ranks below medium-term liquidity-support synchronization.
Economic reading: the stock’s short-term volume-price relationship is unremarkable (no obvious rally-on-volume), but its medium-term connection between liquidity and price support is strong. Such stocks may be overlooked in the short term (bland price-volume action) but have solid fundamental support over the medium term.
Using #75 alongside #61 creates a “dual liquidity filter”: #61 screens for “good liquidity at the bottom,” #75 confirms “medium-term support exceeds short-term hype.” Stocks passing both Boolean conditions are rare, but signal quality is correspondingly higher.
From Single Factors to Factor Portfolios
With all 101 factors dissected, the next step is combination. Single-factor research is the entry point; factor portfolios are where real strategies live.
Factor Orthogonality: Why Combination Works
The paper reports an average pairwise correlation of 15.9% across all 101 factors. Most factor pairs capture different dimensions of market information. At 15.9%, this is near “weak correlation” territory, meaning diversification benefits from combination are substantial.
But “average” 15.9% masks the distribution: within-category correlations often run 40~70% (e.g., between #3 and #6), while cross-category correlations may be only 5~10%. So don’t throw all 101 into a model. Pick 2~3 representative factors per category, totaling 10~15.
IC Decay and Rebalancing
Single-factor IC (Information Coefficient: cross-sectional correlation between factor values and subsequent returns) inevitably decays after publication. Factors published in 2016 likely retain only 30~50% of their original IC by 2026.
Decay speed varies by factor type. Price-volume divergence factors decay fastest because their signals are the most direct and easiest to arbitrage. Volatility factors decay more slowly because volatility mean-reversion is a deeper market mechanism that doesn’t vanish because of a few papers. Conditional reversal factors (like #9) fall in between, as the conditional logic adds friction to arbitrage.
For rebalancing frequency, the paper’s factors have holding periods of 0.6 to 6.4 days. A combined portfolio works well with 3~5 day rebalancing: shorter intervals get eaten by transaction costs, longer intervals miss short-term factor signals.
Practical Recommendations
Suggested starter portfolio (10 factors across all 5 categories):
| Category | Factors | Selection Rationale |
|---|---|---|
| Price-Volume | #3, #55 | #3 is cleanest; #55 adds price-position dimension |
| Momentum/Reversal | #9, #35 | #9 has conditional logic; #35 spans multiple timeframes |
| Volatility | #1, #34 | #1 conditional vol; #34 vol-ratio + reversal |
| Intraday | #101, #42 | #101 simplest CLV; #42 reads VWAP |
| Liquidity | #7, #61 | #7 conditional liquidity; #61 Boolean filter |
Start with equal weighting: rank each factor cross-sectionally, average the 10 rank values into a composite score, go long the top 10% and short the bottom 10%.
A more advanced approach: IC-weighted combination. Compute each factor’s rolling 60-day IC and assign higher weights to factors with higher recent IC. Marginally better than equal weight, but also more prone to overfitting.
What NOT to do:
- Compute all 101 factors and use machine learning to select the optimal subset. The dimensionality is too high and sample size too small; the selected subset is likely noise
- Apply the paper’s raw parameters directly to non-US markets. Window lengths and thresholds were optimized on US large-caps and need local calibration
- Ignore transaction costs. Holding periods of 0.6~6.4 days imply high turnover. If your round-trip cost (commission + slippage) exceeds 20bps, many factors’ alpha gets consumed
For strategy evaluation metrics, see Quantitative Investment Metrics Guide, covering Sharpe ratio, maximum drawdown, Calmar ratio, and more.
Series Navigation
- Alpha 101 Full Guide: Factor Classification & Operator Reference
- Price-Volume Divergence Factors (32 factors)
- Momentum & Reversal Factors (23 factors)
- Volatility & Intraday Structure Factors (23 factors)
- This article: Liquidity, Composite Factors & Portfolio Construction (23 factors)