apps2 · 401k buying pressure vs SPX

a mechanical, price-insensitive equity bid, estimated from the wage base — does it co-move with, or lead, the market? hubcohortsinflationfundamentalsdecoupratio401k loading…
Weekly force tape — what changed week over week, biggest latest jump on top Every force that feeds the 401k equity bid, one per row, with the columns as weeks and each cell the change from that row’s previous reading. Rows are sorted biggest latest-week jump first — click any week’s column header to re-sort by that week instead, or the Force header for A–Z. Each row is ranked and coloured against its own history, so a big week for jobless claims and a big week for fund flows are comparable even though the units are not. Cadence is honest: a monthly, quarterly or annual row prints once every ~4, ~13 or ~52 columns and the weeks in between are drawn as muted carried cells — never faked into weekly noise. Hover any row name for what the force is and how it reaches the equity bid; hover any cell for the exact numbers and dates. The same rows are drawn as normalized lines directly below, against SPX and NAS100.
Select all Deselect all weakerstronger
loading forces…
each cell vs that row’s own history — deep green = an unusually strong week for that force, deep red = an unusually weak one, pale = a normal week.
building the weekly tape…
Select all Deselect all Bold baselines Retail P/C ref
loading force universe…
Why weekly401k money moves on paydays, and paydays are weekly. Everything else on this page is monthly or quarterly — this is the fastest honest read on the contribution engine.
The one weekly flow numberICI’s estimated long-term fund flows, published every Wednesday for the week ended the previous Wednesday. It covers ~98% of industry assets and is the only public weekly proxy for defined-contribution buying.
Mutual funds, not ETFs401k plans buy mutual funds and collective trusts. The ETF line is shown separately so the mechanical payroll money is never mixed with advisor and trading money.
ICI history is rampingloading…
Carried cellsa hatched grey cell means no new reading landed that week — the value is carried, not repeated. Monthly and quarterly forces are never re-deltaed into fake weekly moves.
Dating conventionmacro rows sit at their reference period (the month or quarter they describe), not their release date — the same convention the monthly panels below use.
Computed, not measuredpayday clustering and quarter-end rebalance pressure are calculated from the calendar and from prices; they are overlays, not feeds. Their assumptions are printed in their tooltips.
Rebalance legsloading…
401k buying pressure vs SPX — composite & every macro series (lines) Each line = one series, normalized so differently-scaled metrics compare on ONE axis. 401k buying pressure (the composite) is one line among many; every constituent and macro correlate is here too and individually toggleable — no aggregate-only view. Impulse z (default) = σ vs the visible-window mean (best for divergence; +2σ = same rarity for every line); full stretch to fit = each line 0→1 across the window (shape); % change = from the window start. Adjust reprices the $-denominated lines (and the SPX/NAS100 baselines) into real terms ÷CPI or ÷M2 before normalizing (most meaningful for the dollar series; a historical viz, not a signal). SPX + NAS100 baselines are solid, dark and NEVER muted (both default on; Bold baselines thickens them). Click a line to identify it (dims the others, its tooltip alone); click empty space to dismiss; shift-click for the all-series dateline. Re-frame history with the zoom presets / View(months) slider / drag-pan / wheel.
loading universe…
The composite is an estimate401k buying pressure = Wages × contribution rate × participation × equity allocation × adoption(t).
Shape is realdriven by real aggregate wages (FRED A576RC1) + a documented auto-enrollment adoption glide.
Level is modeledthe contribution/participation/equity scalars set the dollar level — adjust them with the sliders below.
Composite AND constituentswages, adoption and the IRS limit are charted too — the estimate never replaces its parts.
Select all Deselect all Bold baselines Retail P/C ref
Modeled assumptions — the shape is real wage data; these scalars set the level The composite’s shape is real (aggregate wages × a documented adoption glide); these three scalars set its dollar level. Move them and the 401k buying pressure line above recomputes live. Note: because the scalars are constant multipliers, they change the level only — the growth-rate correlations below are unchanged by them.
Contribution rate R — employee deferral + employer match, effective 10.0%
Participation P — share of workers contributing 62%
Equity allocation A — share of contributions in equities 70%
Estimated 401k equity bid ≈ —
Drift A with the observed equity share Formula: BP401k = Wages × R × P × A × adoption(t) · wages are real; R/P/A are your assumptions.
Structural seriesloading…
Modeled bid vs observed flows — how the estimate compares to money that actually moves Does the estimated 401k bid line up with the cash that actually flows in? The modeled bid (from the sliders above) is GROSS equity allocation of contributions. The observed DC/401k net flow (Fed Financial Accounts, ×4 to annualize) is NET of retiree withdrawals & distributions — so observed (≈$147B/yr net) sits far below the modeled gross (≈$581B/yr). Different quantities; both true. Household equity net buys (all households, ×4) and the DC / all-pension asset levels (right axis) give scale. Flows are quarterly (forward-filled to the monthly grid). Zoom / pan / Y-stretch the chart, click for the synced dateline, and toggle each line.
Observed flowscomputing…
Modeled = GROSSthe modeled bid is contributions × equity share — before any withdrawals. An upper-bound gross equity bid.
Observed DC = NETDC/401k net flow (Fed Z.1) is contributions minus retiree distributions & withdrawals — the actual net cash into the plans.
Why the gapa large, mature system pays retirees out while workers pay in, so NET (≈$147B/yr) is far below GROSS (≈$581B/yr). Both measure different things correctly.
Household equity net buysall households’ net equity purchases (not just 401k), ×4 to annualize — a broader flow, for scale.
Levels (right axis)DC/401k plan assets vs all US pension assets — the stock these flows accrete to (shown dashed on the right ÷T axis).
Cadenceflows are quarterly (Fed Financial Accounts), forward-filled to the monthly grid; ×4 annualizes a quarter.
loading… Select all Deselect all
Payday timing — modeled bid by day-of-month vs SPX turn-of-month seasonality US retirement contributions land on paydays — mostly the 1st, the 15th and month-end. The bars show the modeled share of the monthly 401k bid by calendar day (from the US pay-frequency mix). The line (right axis) shows the observed average SPX daily % return by calendar day-of-month over the full daily record — the “turn-of-the-month” effect. Do the market’s strong days line up with when the modeled bid lands? Facts only; days 29–31 trade in fewer months (sample count n shown per day — read those with more caution).
Turn-of-month readcomputing…
Modeled = pay-frequency mixshare of the monthly bid by day, from weekly / biweekly (≈uniform) + semimonthly (1st & 15th) + monthly (month-end) pay schedules. Not the observed timing of trades.
Observed = daily SPXaverage SPX daily % return by calendar day-of-month over the full daily record — the turn-of-month effect often attributed to payroll / pension inflows.
Sample counts (n)days 29–31 occur in fewer months, so their averages rest on fewer observations (day 31 n≈175 vs ≈300 mid-month). Hover any day for its n.
Facts onlya historical average, not a prediction; whether modeled paydays line up with observed strength is descriptive.
Correlation table — each metric’s growth vs SPX and vs the 401k estimate Correlation of each metric’s year-over-year growth with SPX and with the 401k estimate. +1 = move together, −1 = opposite, 0 = no linear relationship. Levels all trend up, so growth rates are used (correlating raw levels is spurious). Click any column header to sort (toggles ascending / descending). Each cell shows the correlation r on a per-column green(+)↔red(−) heat.
−1 opposite+1 together cells show the correlation r · “—” = fewer than 12 overlapping months

Correlation of each metric’s year-over-year growth with SPX and with the 401k estimate. +1 = move together, −1 = opposite. Levels all trend up, so growth rates are used.

computing correlations…
Weekly lead-lag — which force moves before the market Rebuilt 2026-08-01 on the weekly force tape’s own week-over-week deltas (the old monthly lag-correlation table was removed for three defects — see the tombstone in the code). Each weekly force’s WoW change is cross-correlated against the market’s weekly % return at lags of −8 to +8 weeks. Positive lag = the force moves first and the market follows (the force leads); negative = it lags; 0 = same week. Each cell shows r×100. Significance is enforced per row: the effective sample size neff is adjusted for autocorrelation in both series (Bretherton et al. 1999), and any cell inside the ±2/√neff noise band is left unshaded — no peak is outlined unless it clears the band. Weekly market returns are close to white noise, so the overlapping-window inflation that broke the monthly version is gone (neff ≈ the number of weeks). Forces that print monthly / quarterly / annually have too few weekly observations to resolve a weekly lag and are excluded (listed under the grid) — that also removes the old “equity leading itself” artefact, since the marked-to-market quarterly series can no longer appear. Price-derived rows (the other index, bonds, the quarter-end drift) move with the market by construction and are kept as labeled reference, never as a lead. Compare against SPX or NAS100; click any lag column to sort the forces by that lag, or the Force header for A–Z.
Click a lag column to sort forces by that lag · click Force for A–Z.
−1+1 cells = correlation × 100 · pale grey = inside the ±2/√neff noise band (not distinguishable from zero) · outlined = the force’s strongest lag, shown only when it clears the band

Positive lag = the force moves before the market (leads); negative = lags. Computed on the weekly grid at each force’s true cadence; hover any force name for its weekly sample size and noise band, or any cell for its exact r and whether it clears the band.

computing the weekly lead-lag…
What this isapps2/401k · a modeled estimate of the mechanical 401k / defined-contribution equity bid, ranked against the macro series that co-move with (or lead) it and SPX.
Modeled vs observedthe composite LEVEL is a modeled estimate; its SHAPE is real wage data. Every other line is observed (FRED / Yahoo). Correlations use year-over-year growth (levels are non-stationary).
Adjust÷CPI = real purchasing power (value ÷ CPIAUCSL of its month); ÷M2 = vs money printing (value ÷ M2SL). Applied before normalize; a historical viz, not a tradeable signal.
SourcesFRED (fredgraph.csv, key-free) + Yahoo Finance daily closes, joined onto a monthly as-of grid (last observation ≤ month-end).
Data spanloading…
Ramp startsloading…