Corporate Action Handling
Splits, dividends, spin-offs and rights issues move a stock's printed price without changing what a holder owns. Research that reads raw prices treats those moves as returns, and the errors are large, one-sided and easy to mistake for a signal.
Prerequisites: Point-in-Time Data
A price series is not a series of prices. It is a series of prices of a thing that keeps changing what it is. On 31 August 2020 Apple closed at about $129 having closed at $499 the previous session, and Tesla closed near $444 having closed at $2,213. Nobody lost anything. Both had split — four-for-one and five-for-one — and every holder now owned proportionally more shares.
Read the raw closes and those are returns of −74% and −80% on the same day. Two of the largest companies in the world, in a month most people remember, and a naive pipeline records them as catastrophes.
The event types and what each one breaks
| Event | What moves | What breaks if you ignore it |
|---|---|---|
| Forward split, bonus issue | Price ÷ n, shares × n | A huge fake loss; position sizes off by a factor of n |
| Reverse split | Price × n, shares ÷ n | A huge fake gain; penny stocks look like momentum winners |
| Ordinary dividend | Price falls ~by the amount on the ex-date | A small fake loss every quarter, always on a known date |
| Special dividend | One large ex-date drop | Looks exactly like a crash |
| Spin-off | Parent falls by the value of the child | A −20% day where the holder is unchanged |
| Rights issue | Dilution; price falls to the theoretical ex-rights price | A loss that the subscribing holder did not take |
| Cash merger, delisting | The series simply stops | Missing terminal return — see Delisting Returns |
| Ticker change, symbol reuse | Nothing, but the identifier moves | Two different companies stitched into one history |
The unifying idea is small: a corporate action changes the unit, not the value. Adjusting means restating the whole history in today's unit, by multiplying older prices by a cumulative factor and dividing older volumes by the same factor. Dividends are handled the same way if you want a total-return series, which you almost always do. See Computing Adjustment Factors for Price History.
Worked example: momentum with the sign flipped
Standard cross-sectional momentum on 1,500 US names: rank on the trailing twelve-month return skipping the most recent month, go long the top decile and short the bottom, rebalance monthly. Built on properly adjusted total returns over twenty years it earns roughly 7% a year with the well-known crash behaviour.
Now build the same ranking from raw closes. Nothing errors. Every column is populated.
In any given twelve-month window a few dozen names in the universe do a forward split. Each shows a return near −75% or −80% and lands, mechanically, in the bottom decile. But companies split their stock after the price has risen — that is essentially the only reason boards do it. So the short leg fills with the strongest performers in the universe.
At the same time, a handful of names do reverse splits: a stock at $0.40 doing a one-for-ten prints $4.00 and shows +900%. Reverse splits are done by companies trying to stay above a listing threshold. So the long leg fills with the names closest to being delisted.
Result: −4.2% a year, with the losses concentrated in exactly the months with heavy split activity.
Verdict: the strategy did not stop working, it was inverted by a data bug. And note what the diagnostic looked like from the inside — a strategy that used to work, now losing money, with plausible-looking positions. That gets debugged as alpha decay for weeks before someone opens a single price chart.
Corporate actions produce errors that are large, one-sided and correlated with past returns. That last property is what makes them dangerous: they do not average out across a universe, and they line up with precisely the variables cross-sectional research sorts on.
Adjusted prices are not point-in-time
A subtler consequence. Today's adjusted price for a day in 2015 is not the number your 2015 self saw on the screen — it has been divided by every action since. That is fine for computing returns and wrong for anything that reads a price level.
Take a liquidity filter: "only trade names above $5". A stock genuinely trading at $0.60 in 2016 that later did a one-for-twenty reverse split appears in adjusted history at $12 and sails through the screen. Every delisting-bound penny stock in the sample is now in your tradeable universe, at prices where the real spread was 15% of the quote. Price filters, round-lot sizing, tick-size regime tests and option strike matching all need the unadjusted price as printed on the day.
Two vendors, two conventions. Some feeds adjust dividends into the price series (total return), some do not (price return), and some adjust splits but not dividends. On a 3% yielder over ten years the two conventions differ by about a third of the cumulative return. Check by reconciling one full year of one name against the official total-return figure before trusting a whole database.
A five-minute audit that catches most of this: scan the entire history for absolute daily returns above 50%, then cross-reference the dates against a corporate actions calendar. Genuine 50% days exist — biotech readouts, takeovers — but they are rare and identifiable. A cluster of them landing on ex-dates or on the first of a month means the adjustment pipeline is not running.
Related concepts
Practice in interviews
Further reading
- CRSP Data Descriptions: Adjustment Factors and Delisting Returns
- Bacon, Practical Portfolio Performance Measurement and Attribution (Ch. 2)
- OCC, Adjustments to Option Contracts (Information Memos)