Skip to content

Expiry Day

Expiry Day is one panel for an expiring underlying: a countdown to the cutoff, max pain drifting against spot, the ATM straddle's decay against two theory paths, and a strike-by-five-minute heatmap of open-interest unwinding with the in-the-money OI at risk of settlement. It follows today's session live, or replays any past trading day minute by minute.

Module
Expiry Day
How to open
Add Widget β–Έ Options Trading β–Έ Expiry Day
Data source
TrueData one-second rows (OI level), 1m option close+OI bars, spot or future 1m bars, server ATM straddle series
Saved in workspace
Yes

Expiry Day is part of the Pro and Max plans.

Loading a session

  1. 1
    Choose an underlying

    Search for an index or futures underlying. On a live session the panel reads the same chain feed as Option Chain, Gamma Exposure and IV Smile, so one subscription per contract is shared between them.

  2. 2
    Choose the date

    The date control reads LIVE for today's session, pulsing only while the feed delivers (before the open, after the close or with the feed down it reads Today). Pick a past day from the calendar, or step one trading day at a time with the chevrons either side (weekends are skipped). Stepping forward onto today returns to LIVE. On a weekend there is no session to follow, so LIVE replays the last weekday and the control names that day. An exchange holiday is not known in advance: a day with no bars says so and offers the previous trading day.

  3. 3
    Choose the expiry

    The nearest listed expiry for the chosen day is selected first. On a past day the list includes expiries that have since expired. The status badge reads EXPIRY DAY while that expiry's session runs, N DTE on any other day, SETTLED after the cutoff, and adds REPLAY on a past date. Expiry dates come from the symbol master, never from a weekday rule.

  4. 4
    Choose the strike scope and legs

    Β±10 to Β±30 strikes around the anchor. Live, the anchor is the money; on a past day it is the middle of that day's spot range, so the whole day can be scrubbed over one fixed set of strikes. CE + PE, Calls or Puts sets which legs the heatmap colours.

The time slider

Every reading in the panel is taken at one minute, the cursor. The slider under the toolbar spans the whole session; the shaded part is where data exists and the thumb is the cursor.

  • Drag or click the track, use the chevrons, or focus the track and press ←/β†’ (one minute), Shift+←/β†’ (one five-minute column), PgUp/PgDn (fifteen minutes), Home and End.
  • On today's open session the far right is LIVE: the cursor follows the feed. Move it back and a Go Live button returns it. If the chain feed stops delivering, the badge turns STALE, the status reads FEED DOWN and every reading is stamped with the minute it comes from.
  • A click on either chart's time axis or a heatmap column moves the cursor too.

On a past day the cursor opens on the last bar of the session.

The cards

All four cards read at the cursor. Values are short and never cut off; hover a card's second line for its full text.

  • To cutoff counts down to 15:30 IST (23:30 for MCX) with the share of the session gone. On a day before expiry it reads To expiry and counts to the expiry's cutoff. It turns red inside the last 30 minutes.
  • Spot vs max pain is the distance from spot to max pain in points and percent, with the pin zone one strike either side. Max pain is the strike with the smallest total payout to option holders on the carried-forward OI levels; it is a weak pinning model and the card says only where spot stands against it.
  • ITM OI at risk is the in-the-money open interest (calls below spot, puts above) in lots, its share of the chain's OI, and the OTM OI within one strike that goes in the money on a one-step move.
  • Straddle decay compares the ATM straddle against the Black-76 theory path: negative means it has decayed more than theory (ahead), positive less (behind); within Β±3% it reads on path.

Layout

The panel lays itself out from its own width, so it works docked beside other panels and on a phone:

  • Narrow (under 560px): the cards sit two by two and a Pin | Decay | Unwinding switch shows one view at a time. The date control moves into the slider row.
  • Medium: the two charts are stacked above the heatmap.
  • Wide (900px and up): the charts sit side by side above the heatmap.

The heatmap always takes the remaining height. When the panel is too short for everything the body scrolls rather than squeezing the charts.

Max pain vs spot

A step line of max pain recomputed for each minute from the open, with spot as a plain line and the pin zone shaded from the cursor forward. Live, the minutes before the panel was opened are filled from today's 1m close+OI bars, so opening late still shows the morning.

ATM straddle vs theory

Both theory curves are anchored on the first straddle bar at or after the open:

  • √time scales the opening straddle by √(T/Tβ‚€), the textbook decay of an at-the-money straddle at constant vol.
  • Black-76 ΞΈ reprices the opening strike at the opening forward with the implied vol the opening straddle solved to, which is what pure theta would have done had nothing else moved.

Theory is drawn solid to the cursor and dashed beyond it; the actual line stops at the cursor. A straddle behind theory usually means implied vol expanded or the index moved far enough for the re-struck straddle to carry fresh premium.

Where the straddle comes from

The server straddle series covers NIFTY, BANKNIFTY, FINNIFTY, MIDCPNIFTY, SENSEX, BANKEX and the four MCX commodities. When it has no bars for the day (an expired expiry, or an underlying it does not serve), the panel rebuilds the straddle each minute as the CE close plus the PE close at the strike nearest that minute's spot, from the same 1m bars (a close older than ten minutes is not used), and the chart's legend says CE+PE 1m closes, reconstructed.

OI unwinding heatmap

Strikes down the side (highest first, ATM marked, a triangle at spot), five-minute columns across, one cell per strike and column coloured by the change of the OI level over the column: rose when the level fell (unwinding), blue when it rose. The right gutter is each strike's change over the session at the cursor, in lots.

Cells in the last three columns are outlined when their change is unusual for that strike: at least twice the strike's own baseline, where the baseline is the median five-minute change over the strike's last hour of observed minutes (at least ten of them, floored at two lots). A quiet far strike and a busy ATM strike are each measured against themselves, so an outline means "this strike just did something it had not been doing", not "this is the biggest number on the grid". At most five cells are outlined, strongest first, and when more than a third of the ATM Β±5 ladder clears the bar at once the move is chain-wide and nothing is singled out. The outline follows the legs switch: Calls outlines cells whose call leg is unusual, Puts the put leg, and CE + PE either.

GestureDoes
ScrollZoom time around the pointer (all three views together)
Shift + scroll, or a sideways trackpad swipePan time
Ctrl/⌘ + scroll, or a trackpad pinchRow height, anchored at the pointer row
DragPan
Two-finger pinch (touch)Zoom time on the sideways spread, row height on the vertical spread
Double-clickFit every strike and the whole session (it does not move the cursor or the pin)
Zoom buttons in the heatmap headerZoom time out, in around the cursor, fit
+ / βˆ’ / 0Row height up, down, fit
← β†’ ↑ ↓Move the pinned cell
EscUnpin
Home / EndCursor to the open, to the last minute

Hover a cell for a card with the strike, the column's time span (the cursor's own column ends at the cursor and says "to cursor"), the CE, PE and net change, the OI level of each leg, the strike's session change, its share of the chain and its rank among the filled cells. Click a cell to pin it: the same readout stays in a bar under the heatmap and updates as the session moves. Click it again, or press Esc, to clear it.

The card's Flow to cursor block reads each leg over the five and fifteen minutes ending at the cursor minute, whichever column is hovered:

  • the level's change, in lots;
  • refreshes Β· printed: how many times the OI level actually changed in the window, and how many of its minutes the contract printed a row in. A change of βˆ’500 lots on one refresh in five printed minutes is one exchange update, not five minutes of selling;
  • 5 min vs usual: the five-minute change as a multiple of the strike's own baseline. "2 obs" means the strike has printed in too few minutes of the last hour for a baseline.
How often OI really moves

The exchange refreshes open interest on its own schedule, and the feed re-sends the last level on every traded row in between. A five-minute window may therefore hold one or two real refreshes; the refresh count on the card says how many, and the one-minute change of a single strike is not shown because it mostly records whether a refresh landed in that minute. Chain-wide totals average this out and are the honest per-minute reading.

Carried-forward levels and coverage

Open interest reaches the terminal only as a level re-sent on each traded one-second row (one Level-1 row per symbol per second, side inferred by the backend). A strike that prints no row in a minute keeps its last level, so every cell is the change of a carried-forward level, not a count of events. Cells are faded by how many of the column's minutes the strike actually printed in; a fully faded cell is a strike that did not trade. A past day is read from 1m close+OI bars, so its levels are per minute, not per second. The exchange publishes OI with a lag, so the last fifteen minutes of an expiry are approximate and the footer says so.

What's saved

The underlying, expiry, strike scope, legs, date, cursor, zoom, the narrow view and the pinned cell are stored with your workspace. A cursor pinned during a live session comes back only on the same day; reopened the next morning it follows LIVE. The minute-by-minute data itself is rebuilt from 1m bars when the panel reopens; a day already loaded opens from the browser's cache.