APEX factor · Microstructure
Microstructure reads how thinly a stock trades and how much its price moves per dollar of volume. Liquid mega-caps absorb information continuously; thinly-traded names accumulate latent dislocation that releases as gap moves. The factor isolates the liquidity premium and the price-impact risk so position sizing can respect both.
Two stocks both have a 0.6 expected APEX score. One trades $5bn per day on the NYSE; one trades $5m per day on a pink sheet. The signals look identical, but the second name's price will move 10% on a single $500k order — your fill price won't match the model's signal price. Microstructure quantifies this gap directly. It's not a return-prediction factor in the same sense as momentum or value; it's a liquidity and execution-risk factor. We use it to discount thinly-traded names' contribution to the composite (so the composite doesn't load on names you can't actually trade) and to widen prediction intervals where price impact is structurally larger.
amihud_t = |daily_return_t| / dollar_volume_t // Amihud 2002 amihud_30d = mean( amihud over last 30 days ) spread_proxy = (high - low) / close // Roll 1984 effective spread volume_z = z_score( log( dollar_volume_30d ) ) microstructure_raw = -1·z_score(amihud_30d) - z_score(spread_proxy) + volume_z microstructure = z_score(microstructure_raw)
Sign-flipped on Amihud and Roll spread — high illiquidity is bearish for the factor (worse execution, higher price-impact risk). Volume size is positive — large dollar volume is bullish. Three anchors so the factor doesn't collapse to a single number — Amihud captures average price impact, Roll captures intraday spread, volume captures absolute size. All three z-scored across the universe so the factor is comparable across sectors. The 30-day window is the standard liquidity-research lookback.
Inputs come from Yahoo Finance EOD daily bars (open, high, low, close, volume). The factor refreshes nightly during the 06:00 UTC universe sweep using the trailing 30 trading days. We don't include intraday tick data — the marginal predictive lift is small for our 30-90 day horizon, and the data cost is high. The factor's role in the composite is largely defensive: it prevents the engine from over-loading on micro-cap names where the Amihud measure suggests price-impact risk dominates the signal.
Microstructure interacts with Short Interest in the SHORT SQUEEZE SETUP confluence pattern — illiquid names with extreme short interest are exactly the squeeze candidates with the highest convex upside (low float + crowded short = forced cover with no liquidity to absorb it). Microstructure also widens the conformal prediction interval — the Mondrian bin partition uses liquidity as one of its conditioning dimensions, so illiquid names get wider intervals reflecting their genuinely higher uncertainty. Risk-tolerance settings on /pricing reduce position sizing in low-liquidity bins.
Two structural limitations. (1) End-of-day blindness. The factor uses daily bars; intraday liquidity events (a single block trade clearing the order book at a stretched price) are invisible until the close. For institutional flow we'd want tick-level data; we're not there yet. (2) Survivorship in the universe. Our 374-ticker universe is curated to exclude micro-caps with average daily volume under ~$5m. So microstructure's role is more about within-universe relative liquidity rather than warning against truly untradeable names — those are excluded upstream. The factor is an internal sizer, not a tradeability filter.
Every ticker page shows the per-factor decomposition. The Microstructure score is one of twelve composing the 0–100 APEX composite.