Insider Buying Didn't Work
— 360K Transactions Tested
“Insider buying means the stock goes up” is a widely-held belief. We tested it against 360,000+ Form 4 filings. It didn't hold up. In fact, CEO/CFO open-market purchases with their own money performed the worst. We publish the real numbers and the limitations, unfiltered.
Why We Re-Tested — the First Attempt (A1) Used the Wrong Method
We'd previously tested this using only "was a Form 4 filed" (A1). It failed. The real transaction-code breakdown explains why.
| Transaction Code | Count | Nature |
|---|---|---|
| S — Open-market sale | 112,028 | Discretionary |
| A — Grant/award | 80,577 | Not discretionary |
| F — Tax-related disposition | 60,195 | Not discretionary |
| M — Option exercise | 51,640 | Mechanical |
| P — Open-market purchase | 26,912 | Bought with their own money |
Sells outnumber buys 4 to 1. Lumping all of these together as "a Form 4 was filed" can't be a signal to begin with. So this time we separated transaction codes, keeping only self-directed purchases with the insider's own money (code P) and excluding grants, tax-related dispositions, option exercises, and gifts — none of which reflect a discretionary decision. We queried strictly by filing date, not transaction date, since Form 4 is filed within 2 business days of the trade, meaning the trade isn't knowable to the market until the filing lands — this keeps future information from leaking into the test.
The Numbers — Volatility-Adjusted Basis (mfe_atr), All Negative
As of 2026-08-14 · population 63,912 episodes, 51,494 successfully
joined (80.6%) · source: this repository's INSIDER_VALIDATION_REPORT.md
(based on 360,899 SEC EDGAR Form 4 quarterly-dataset filings) · Wilson 95% confidence intervals
| Signal | Sample | Hit Rate | Base Rate | Lift | CI Lower |
|---|---|---|---|---|---|
| Sells only (no buys) | 12,512 | 9.8% | 10.3% | −0.5pp | 9.3% |
| Cluster buying (multiple insiders) | 1,532 | 8.4% | 10.3% | −1.9pp | 7.1% |
| Open-market purchase (P) | 4,339 | 8.1% | 10.3% | −2.2pp | 7.3% |
| Net buying (buys > sells) | 3,671 | 8.0% | 10.3% | −2.4pp | 7.1% |
| CEO/CFO buying | 1,580 | 7.8% | 10.3% | −2.5pp | 6.6% |
All five ways of measuring it came back negative, none were statistically significant (the CI lower bound never clears the base rate), and the direction doesn't hold up when sliced by volatility (ATR) quartile either — every stratified verdict came back rejected. Stocks CEOs and CFOs bought with their own money performed the worst of all.
The Trap — a Fixed +15% Threshold Passes
Measure the exact same data against a fixed +15% target (mfe15) instead, and you get a completely different picture.
| Signal | Lift (mfe15) | Wilson·BH |
|---|---|---|
| Cluster buying | +4.0pp | Passes |
| CEO/CFO buying | +3.0pp | Passes |
Why the Numbers Come Back Negative
- The direction is different. Insider buying is closer to a value judgment ("this stock is cheap") while this scanner looks for momentum ("this stock is about to surge") — the two point in different directions to begin with.
- It's disadvantaged on a volatility-adjusted basis. Stocks insiders buy tend to be relatively stable, making a 6×ATR threshold harder to clear. That said, the signal is still rejected within each volatility band too, so volatility alone doesn't fully explain it.
It Doesn't Work as an Exclusion Signal Either
We also checked whether the reverse could work — "no insider buying" as a red flag. The weakest negative result was sells-only-no-buys at −0.5pp, and even that wasn't statistically significant, with stratification also inconclusive. It can't be used as an exclusion signal either.
What Else This Data Is Good For
The scanner's insider_net_pos feature (90-day net insider buying) is unrelated to
this conclusion and is still computed live, every day (a real-time per-candidate
lookup, observed at weight 0). This article doesn't shut that pipeline off — it explains
why it carries no weight. The bulk Form 4 dataset (360K+ rows) and the
collection code remain in place and can be reused for other hypotheses (e.g. sell size or
timing), but daily automatic collection stays off — there's no reason to
keep pulling in a rejected signal every day.
Limitations
- Single market — this result is limited to US-listed stocks (NASDAQ/NYSE).
- Roughly one year of data — 2025-04-01 through 2026-06-30. Results could differ in other market regimes.
- Filing lag — Form 4 is filed up to 2 business days after the trade, so there's a real gap between when the purchase happened and when it became public.
- Purchase motive wasn't broken down further — option exercises, grants, and tax-related dispositions are already excluded, but within code P itself we didn't separate motives like "this looks cheap" from "I need liquidity."
★The data stops at 2026-06-30. The collection script
(insider_collect.py) has no automatic execution path (manual-only), and given this
rejection, we haven't wired up daily automatic collection either — the numbers in this
article are a snapshot as of that date.