Corporate actions · 2026-11-01

How option strikes get adjusted for a 10:1 split

NVDA split 10:1 on 2024-06-10. Here is exactly what that did to the option chain in a daily file, the rule to carry a position across it, and why "adjusted" is doing a lot of work in the word.

Strikes in an end-of-day file are as listed on that session — never restated to today's terms. A split does not reach back and rewrite old days. But on the ex-date itself, two things happen at once, and most feeds will not show you both.

The rows, verbatim

We pulled the 2024-06-21 call at strike 10 from the NVDA file on the day before and the day of the split:

SessionContract (OCC)StrikeMidSeries
2024-06-07NVDA240621C0001000010.001,198.45pre-split, deep ITM
2024-06-10NVDA240621C000010001.00121.68the old contract, adjusted
2024-06-10NVDA240621C0001000010.00111.80new unadjusted series

Read that carefully. On 06-07 the 10.00 call is deep in the money (NVDA ~$1,200 pre-split), so it is worth ~$1,198. On the ex-date the same contract appears at 1.00 (10 ÷ 10) worth ~$121.68 — the economics are continuous, the strike changed. Simultaneously a brand-new 10.00 contract is listed worth ~$111.80, because in the new split world a 10.00 strike is only slightly in the money.

Both 10.00 rows on 06-10 are real and both are in the file. Same expiry, same type, same root, different contract id.

Why "adjusted" is a lie here

The adjusted contract carries no marker. There is no NVDA1 root, no flag column, no "this was adjusted" bit. It is identified only by the fact that its strike (1.00) sits on a fine grid (0.50, 1.00, 1.50) that the new series does not use (it starts at 10.00). So the word "adjusted" is doing all the work and the data is not telling you anything. If your loader keys a contract on (date, root, strike) it will see the 1.00 row and have no idea it is the 10.00 from last week.

The mapping rule

To carry a position across the ex-date, do not assume the strike survives. For each open pre-split contract, the matching adjusted contract on the ex-date has:

Apply that and 1,198.45 → 121.68, which is 1,198.45 ÷ 10 = 119.84, plus the small jump for the day's price movement. The continuity is there; you just have to reconstruct it, because the feed will not hand it to you.

Our pipeline/verify.py asserts exactly this: it checks that a pre-split contract is re-listed at strike/10 on the ex-date and that an unadjusted series at the old strike also exists. It fails the sample if the split is not handled, so the adjustment is a tested fact in the shipped data, not a promise on a webpage.

Want the marker?

The default delivery keeps the exchange root and lets you map by ratio, as above. If you need NVDA1/NVDA2 preserved, that is the adjusted-root delivery option — see the field dictionary.

Read the field dictionary