Moneyness is where the strike sits; expiry is when it ends
Every option has two coordinates: a strike (the price it transacts at) and an expiry (the date the right ends). Moneyness is the relationship between the strike and where price is right now.
For a call:
- In-the-money (ITM) — price is above the strike; the right to buy low has real value.
- At-the-money (ATM) — price sits at the strike.
- Out-of-the-money (OTM) — price is below the strike; the right to buy high is not worth exercising yet.
A put is the mirror: it is ITM when price is below the strike. The key fact is that moneyness is not a label you set once — it changes every time the underlying moves.
A worked example
GENCO trades at $100. Line up three call strikes:
- The $95 call is ITM — you could buy at $95 while price is $100.
- The $100 call is ATM.
- The $105 call is OTM — buying at $105 makes no sense while price is $100.
Now let GENCO drift to $106. The $105 call has crossed from OTM to ITM; the $100 call is now ITM; the $95 call is deeper ITM. Nothing about the contracts changed — price moved through the strikes, and their moneyness moved with it.
Expiry is the second axis. A $105 call with a month left has time for GENCO to travel; the same strike expiring tomorrow has almost none. Choosing a strike and an expiry is choosing how far and how soon — the two together, never one alone.
See it in kestrel
Moneyness only means something against price that actually moves through the strikes. Run a real session and watch it travel:
npx kestrel.markets sim fomc-rate-decision-whipsawThat runs a deterministic simulation over a generic index session — managed licensed data, no wall time, no signup, no card — and prints a certified proof URL. Kestrel names strikes and expiries as first-class terms, so "the $105 call, a month out" is something the tool can hold and grade. Recompute the whole record on your own machine, byte for byte:
npx kestrel.markets certify https://kestrel.markets/proof/art_d29415f0cf502f4a218a9cbaKeep the strikes one command away: drop the kestrel.markets MCP server into your client and the next session opens where this one left off — no account in between.