← Blog

Do Schedule 13D filings give you a tradeable edge? The run-up is already gone

A Schedule 13D is the form an investor files when they cross 5% ownership of a public company and intend to influence it. The folklore is that these filings mark a stock worth buying: an activist has shown up, change is coming, the price follows. So we measured it. We pulled every 13D and 13D/A filed over a six-month window, lined each one up against the market, and measured three windows around the filing: the ten days before it, the filing day itself, and the twenty trading days after, the only window a reader who saw the public filing could actually act on.

The move is real, but it sits in the wrong place: the pre-filing window. By the time the 13D is public, the run-up is mostly already in the price, and on this sample the post-filing window was slightly negative net of the market.

How the study was built

The universe is every SCHEDULE 13D (initial stake) and SCHEDULE 13D/A (amendment) filed between 2025-11-03 and 2026-04-30, pulled from SEC EDGAR full-text search (efts.sec.gov). That is 2,790 raw filings. Collapsing to unique (ticker, filing-date, cohort) events with a resolvable ticker gives 2,492, split 501 initial 13D and 1,991 amendment. After requiring a complete price window and a filing-day close at or above $1, we are left with 2,056 priced events, 335 initial and 1,721 amendment.

Prices are Polygon grouped-daily adjusted closes. The benchmark is SPY. Abnormal return is the stock's return minus SPY's return over the identical calendar span, so a number below is market-adjusted, not raw.

Everything is indexed to trading days around t0, where t0 is the filing day's close (or the first trading day after it, if the filing day had no print). Three windows:

  • pre: t-10 to t0, the run-up that precedes the public filing.
  • react: t-1 to t+1, the announcement reaction.
  • post: t0 to t+20, what you could trade off the public signal.

The whole thing is one Python script on free, public data, with a price cache so a re-run reproduces the same numbers byte-for-byte.

Results

Here are the headline numbers for all 2,056 priced events, and for the two liquidity screens that drop the smallest names.

Window Bucket n Mean Median t-stat % positive
pre all (>= $1) 2,056 +3.22% +0.56% 5.88 52.5%
react all (>= $1) 2,056 +1.34% +0.27% 4.85 52.9%
post all (>= $1) 2,056 -0.60% -1.29% -1.17 44.9%
pre liquid (>= $5) 1,390 +4.46% +1.14% 6.52
react liquid (>= $5) 1,390 +1.13% +0.38% 3.77
post liquid (>= $5) 1,390 -0.95% -1.05% -1.68
pre more liquid (>= $10) 1,043 +4.60% +1.15% 5.65
react more liquid (>= $10) 1,043 +0.91% +0.28% 2.65
post more liquid (>= $10) 1,043 -1.57% -1.18% -2.50

The pre-filing run-up is the one number that holds up everywhere. It is positive in mean and median, and the t-statistic on the mean abnormal return clears significance in every price bucket. It also gets larger as you screen for bigger names: the $5 mean is +4.46% (t = 6.52) against a median of +1.14%, and the $10 mean is +4.60% (t = 5.65) against a median of +1.15%. The 5%-winsorized pre means (+1.66% all, +2.59% at $5) confirm that a few extreme observations are not doing all the work.

The post-filing window goes the other way. The median post-return is negative in all three buckets. For the most liquid names (>= $10) the mean post-drift reaches significance (t = -2.50); the $1 and $5 buckets are negative but not statistically significant (t = -1.17 and t = -1.68). The react window, the day around the filing itself, is a small positive blip, a median of roughly +0.3% to +0.4%.

Why the mean and the median disagree

Look at the all-events pre row: a +3.22% mean against a +0.56% median. That gap is microcaps. One filing in the sample, MSAI (MultiSensor AI), filed a 13D/A on 2025-11-03 after the stock ran from about $22 ten trading days earlier to about $79 on the filing day, an abnormal pre-window return near +258%. A handful of squeezes like that pull the mean far above the typical event. The median is the honest center of the distribution, and it is what a trader sampling one filing at random should expect. When the two disagree this much, trust the median and report both.

What this means if you trade it

Read the three windows in order and the story is clean.

There is a real pre-filing run-up. It survives dropping penny stocks (>= $5 median +1.14%, mean t = 6.5), so it is not a microcap artifact. But it lives in the t-10 to t0 window. By the time the 13D is on EDGAR and you can see it, that move has already happened. It is consistent with what you would expect from accumulation by the filer and from information leaking ahead of a public disclosure, and none of it is available to someone trading the filing itself.

The announcement reaction is small. A median around +0.3% on the day is not a position.

The post-filing window, the part you can actually trade off the public signal, shows no positive drift. The median is negative in every bucket, and for liquid names (>= $10) the negative mean drift is significant. On this sample, naively buying a 13D target at the filing-day close and holding twenty trading days was slightly negative net of SPY. That is the counterintuitive result and the one worth keeping: the public 13D is not, by itself, a long signal. If anything the edge already paid out to whoever was accumulating before the form appeared.

The initial-versus-amendment split does not rescue the trade. Among $5+ names, initial 13Ds show a larger pre-filing median (+2.07%) than amendments (+1.04%), which fits the idea that the first disclosure carries more new information. But both cohorts are slightly negative post-filing. A fresh activist stake runs up harder beforehand and still does not drift up after it is public.

Caveats

A few things bound how far you should push this.

The sample is eight months and one market regime. The abnormal return is simple market adjustment against SPY, not beta-adjusted, so high-beta names carry some uncorrected market exposure. Prices are daily grouped closes with no intraday detail, and entry is assumed at the filing-day close, which a real fill at the open the next morning would not match. Ticker resolution and price coverage drop events along the way (2,492 down to 2,056), and that screen is not perfectly random with respect to outcomes. The small-cap names that drive the fat tail carry borrow costs and liquidity limits a backtest never feels, so the printed pre-window means overstate what anyone could have captured.

Reproducing it

The event set was built on the EDGAR Events 13D path: the same typed-JSON filing feed the API serves, joined to Polygon grouped-daily closes and SPY. The accessions are the live results from efts.sec.gov full-text search over the window, and the MSAI prices and abnormal-return math were checked by hand against the source. One script, public data, a cache that pins the numbers, so anyone can run it and land on the same table. The result that cut against the popular belief is the one we most wanted to get right.

SEC filings, already parsed.

Typed JSON for 8-K item codes, SC 13D activist stakes, IPO forms and merger proxies. $29/mo, self-serve, cancel anytime.

Get an API key