Method
Each weekend a batch job rebuilds everything from scratch. Nothing is carried over from earlier weeks except the archive of results.
1. Universe and prices
Every active, tradable US stock and ETF that Alpaca lists on NYSE, NASDAQ, AMEX, ARCA, NYSEARCA, BATS. Warrants, units, rights, preferreds, notes, and leveraged or inverse products are excluded. Leveraged funds track their underlying at ρ ≈ ±1 and would crowd out everything else. We download daily closes adjusted for splits and dividends from the consolidated (SIP) tape, using the last 504 trading days of SPY's calendar.
A symbol is dropped if it:
- has a return on fewer than 90% of window days (2,424 dropped this week);
- has a median close under $1.0 (65 dropped);
- has median daily dollar volume under $100,000 (1,249 dropped);
- has a price that didn't change on most days (0 dropped);
- has annualized volatility under 1% (47 dropped). These are cash-like funds (T-bills, money market), whose only "moves" are distribution dates.
The liquidity floor is deliberately low. Thinly traded names are where next-day catch-up happens: their last trade often comes before the rest of the market has finished moving, and the next day's close catches up. That effect is real in the price data, but it is only worth anything if the bid/ask spread is smaller than the move. That's why every catch-up pair shows the follower's daily dollar volume.
Each series is put on the same calendar, so day t means the same date for every symbol. A return is computed only when both its closes exist. Gaps are never bridged.
2. Every pair, no shortcuts
With 6,902 symbols there are 23,815,351 pairs. Every one of them is analyzed exactly, as two separate questions: do they move together on the same day, and does one repeat the other's move the next day? That's 47,630,702 tests this week. There is no pre-screen or shortlist. The odd relationship nobody would think to look for gets the same treatment as the obvious ones.
3. Full analysis
For each pair and each question, on daily log-returns:
- Lag. The lag with the largest |Spearman ρ| is chosen using only the older 67% of the window.
- ρ. Spearman rank correlation over the whole window at that lag. Positive means the two move the same way.
- Holdout ρ. The same lag measured only on the most recent 33% of the window, which played no part in choosing the lag. A relationship that has flipped sign or faded fails here.
- Stability. The share of non-overlapping 63-day windows in which ρ kept its sign and stayed at or above 0.15.
- q-value. The t-test p-value for ρ is first corrected for the number of lags searched (Šidák). Benjamini–Hochberg is then applied across all 47,630,702 tests.
4. Same exposure
Funds that track the same thing (QQQ and QQQM, GLD and IAU, the spot-Bitcoin ETFs) correlate at ρ ≈ 1 and would fill every list. Symbols linked by a same-day ρ ≥ 0.97 are grouped together, and each group is shown once under its most liquid member. This week 685 symbols fell into 155 groups. Catch-up pairs are kept when the follower is a thinly traded copy, because that is exactly the effect.
5. Tiers
- robust: q ≤ 0.05, |ρ| ≥ 0.3, holdout ρ has the same sign and is at least 50% as strong as in training, and stability is at least 75%.
- moderate: q ≤ 0.05, |ρ| ≥ 0.3, and holdout ρ has the same sign.
- Everything else is not published.
Why only one day?
We tested the classic approach (search lags up to 21 days and keep anything with |ρ| ≥ 0.3) walk-forward on real data. Pairs were found on the first 300 trading days and checked on the next 204.
- 1-day catch-up into thinly traded names held up: 99% kept their sign, and they called the follower's next move about 59% of the time.
- "Leads by 2–21 days" did not: those pairs called the next move 52% of the time, essentially a coin flip.
Multi-day leads in daily US stock returns are almost always the best of many noisy correlations, so the search stops at 1 day.
Reading the results
Most strong relationships are same-day: stocks in the same sector, or ETFs and their largest holdings. Catch-up pairs are real effects in closing prices, but they are not trading signals as such: on thinly traded followers, spreads and fills decide whether there is anything left. Correlations describe the past and can stop working without warning. This site is not investment advice.
Raw data: pairs.json, hubs.json, run.json, groups.json, and a weekly archive.