blog /
NIFTY monthly expiry options historical data: studying the last-Tuesday contract
How to get NIFTY monthly expiry options historical data from a full archive: identifying monthly contracts, following them for a month, and comparing them with weeklies.
Monthly NIFTY options have a longer life, deeper open interest and a different set of users from the weeklies. Studying them means finding the monthly contracts in the archive and following each from about a month out to its final session.
Identify the monthly contracts
The monthly expiry is the last expiry date in each calendar month. It moved from the last Thursday to the last Tuesday in September 2025, and holidays can pull it a day earlier. Derive it from the data rather than a calendar:
import re
from pathlib import Path
import pandas as pd
pat = re.compile(r"_exp(\d{4}-\d{2}-\d{2})")
exps = sorted({pat.search(f.name)[1] for f in Path("NIFTY").rglob("NIFTY_OPT_1min_*.parquet")})
s = pd.Series(pd.to_datetime(exps))
monthly = s.groupby(s.dt.to_period("M")).max()
print(monthly.tail(6))
What to study
- Open-interest build-up through the month, by strike, to see where positions concentrate.
- Monthly versus weekly decay on the same expiry day, when the monthly is also the week's expiry.
- Rolls: how open interest moves from one monthly contract to the next.
Which pack
A month of history needs the days before expiry too, and every pack includes every trading day in its window. For a few dozen monthly expiries, take the last 3 years; with futures and the index, NIFTY Complete, 3 years.
FAQ
When do NIFTY monthly options expire?
On the last Tuesday of the month since September 2025, and the last Thursday before that. A holiday moves the expiry to the previous trading day.
Are monthly and weekly contracts in separate files?
Each expiry has its own file per trading day, so the monthly contract is always a separate file.
Is open interest included?
Yes, on every NIFTY option row.