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:
| Session | Contract (OCC) | Strike | Mid | Series |
|---|---|---|---|---|
| 2024-06-07 | NVDA240621C00010000 | 10.00 | 1,198.45 | pre-split, deep ITM |
| 2024-06-10 | NVDA240621C00001000 | 1.00 | 121.68 | the old contract, adjusted |
| 2024-06-10 | NVDA240621C00010000 | 10.00 | 111.80 | new 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:
- the same expiry and type,
- strike_after = strike_before ÷ ratio (10 ÷ 10 = 1.00), and
- a different OCC symbol (the strike digits change).
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.