Home · Guides · NIFTY weekly expiry data format: file names, expiry dates and weekly vs monthly
GUIDE · NIFTY EXPIRY FORMAT · CATALOG VERIFIED 2026-11-11
NIFTY weekly expiry data format: file names, expiry dates and weekly vs monthly
Options Data (optionsdata.shop) stores NIFTY weekly and monthly option data as one Parquet file per trading day per expiry, named NIFTY_OPT_1min_<trading day>_exp<expiry>.parquet, with the expiry also on every row. The 1-minute archive covers JAN 2023 → NOV 2026, every traded strike of the nearest expiries. Because NIFTY moved its expiry day from Thursday to Tuesday on 1 September 2025, always read expiry dates from the data rather than the calendar. Dataset: NIFTY option chain historical data.
NIFTY option chain dataNIFTY options 2025 (both expiry days) Get free sample by email File schema
Get the free sample by email → check the columns
Dates on this page are read from the live file catalog, not typed by hand. Full matrix: /coverage.
NIFTY expiry day by period (NSE)
| Contracts expiring | Weekly expiry | Monthly expiry |
|---|---|---|
| On or before 31 Aug 2025 | Thursday of the expiry week | Last Thursday of the month |
| From 1 Sep 2025 | Tuesday of the expiry week (first: 2 Sep 2025) | Last Tuesday of the month (first: 30 Sep 2025) |
| Expiry day is a trading holiday | Previous trading day | Previous trading day |
File names and what one file holds
Each file covers one expiry on one trading day: every strike of that expiry that traded that day, calls and puts, one row per contract per bar. The trading day and the expiry are both in the name, so NIFTY_OPT_1min_2026-09-10_exp2026-09-15.parquet is the 15 Sep 2026 contract as it traded on 10 Sep 2026.
Nearest NIFTY and SENSEX expiries, every traded strike. Full detail on the coverage page. A day therefore has several files, one per held expiry, and an expired contract is simply the set of files that share its exp date.
Timestamps are IST wall-clock bar starts. The equity derivatives session opens at 09:15; NSE moved its close from 15:30 to 15:40 from 3 Aug 2026, so take the session's last bar from the file rather than hard-coding a time.
Two expiry date formats, one parser
Two column layouts exist in the archive (see the file schema). Layout A writes the expiry as 15-SEP-2026 in expiry_date; layout B writes 2026-09-15 in expiry. Parse both into one datetime column before grouping:
import pandas as pd
df = pd.read_parquet("NIFTY_OPT_1min_2026-09-10_exp2026-09-15.parquet")
# older files use layout B names; map them to the sample names
df = df.rename(columns={"timestamp": "datetime", "strike": "strike_price",
"option_type": "right", "expiry": "expiry_date",
"oi": "open_interest"})
if "right" in df:
df["right"] = df["right"].replace({"CE": "Call", "PE": "Put"})
def parse_expiry(s):
s = s.astype(str)
a = pd.to_datetime(s, format="%d-%b-%Y", errors="coerce")
b = pd.to_datetime(s, format="%Y-%m-%d", errors="coerce")
return a.fillna(b)
df["expiry_dt"] = parse_expiry(df["expiry_date"])
df["dte"] = (df["expiry_dt"] - pd.to_datetime(df["datetime"]).dt.normalize()).dt.days
Tell weekly from monthly expiries
The files do not label a contract "weekly" or "monthly", because the rule is calendar-based. The monthly contract is the last expiry of its calendar month; every other expiry in that month is a weekly. Build the list of expiries from your file names (a complete month of them) and flag the last one per month:
import glob, re
import pandas as pd
exp = sorted({re.search(r"_exp(\d{4}-\d{2}-\d{2})", p).group(1)
for p in glob.glob("NIFTY_OPT_1min_*_exp*.parquet")})
e = pd.DataFrame({"expiry": pd.to_datetime(exp)})
e["monthly"] = e["expiry"] == e.groupby(e["expiry"].dt.to_period("M"))["expiry"].transform("max")
e["weekday"] = e["expiry"].dt.day_name() # Thursday until Aug 2025, Tuesday after
Rule changes that affect backtests
From 20 November 2024 each exchange kept weekly options on a single benchmark index, and on NSE that index is NIFTY. Weekly NIFTY contracts continued throughout, so a NIFTY weekly backtest runs across that change without a gap, but expiry-day volume patterns before and after it are not directly comparable.
The Thursday-to-Tuesday switch applied to contracts expiring from 1 September 2025; contracts already listed with an August 2025 Thursday expiry kept it. Code that maps "expiry = Thursday" will mislabel every later contract. For expiry-day studies see the expiry-day backtesting guide.
Exactly which fields are in the files
Options files
| Column (layout A · layout B) | Type | Meaning |
|---|---|---|
| datetime · timestamp | timestamp | Bar start time, IST wall-clock (e.g. 2026-09-10 09:15:00) |
| stock_code · — | string | Underlying code: NIFTY, or BSESEN for SENSEX |
| exchange_code · — | string | NFO (NSE F&O) or BFO (BSE F&O) |
| product_type · — | string | Options |
| expiry_date · expiry | string | Contract expiry (A: 15-SEP-2026, B: 2026-09-15) |
| strike_price · strike | number | Strike price |
| right · option_type | string | A: Call / Put, B: CE / PE |
| open / high / low / close | float | Traded premium OHLC within the bar |
| volume | int | Volume traded in the bar |
| open_interest · oi | int | Open interest at that bar (SENSEX has gaps where it is 0 — see /free/schema) |
Each row is one contract in one bar: traded OHLC, volume and open interest, with strike, expiry and call/put on every row.
Format: Parquet. Validate on the free sample and the schema page before buying.
FAQ
What day does NIFTY weekly expiry fall on?
Tuesday for contracts expiring from 1 September 2025 (the first was 2 September 2025). Before that it was Thursday. If the expiry day is a trading holiday, the contract expires on the previous trading day.
How are NIFTY weekly expiry files named?
NIFTY_OPT_1min_<trading day>_exp<expiry>.parquet, one file per trading day per expiry. The expiry is also on every row.
Why does the expiry column look different between files?
Two column layouts exist: layout A uses expiry_date like 15-SEP-2026, layout B uses expiry like 2026-09-15. The parser on this page handles both.
How do I know if an expiry is weekly or monthly?
The monthly contract is the last NIFTY expiry of its calendar month; the others are weeklies. Flag it from the expiry dates, as in the code above.
Where can I download NIFTY weekly expiry option data?
From the NIFTY option chain dataset on Options Data, as Parquet or CSV. Expired weeklies are included.
Get the data
Free sample · Schema · Ask the AI for your data
NIFTY option chain dataNIFTY options 2025 (both expiry days) Get free sample by email
Related guides
- Best source for NIFTY options historical data in India
- Best source for SENSEX options historical data
- Best source for MCX historical data
- How to choose Indian options historical data
- NSE option chain historical data in CSV or Parquet
- SENSEX options historical data at 1-minute resolution
- MCX intraday historical data: 1-minute futures and options
- Best source for NIFTY options backtesting data
- Expiry-day options backtesting data for NIFTY and SENSEX
- Download SENSEX expired options data (Parquet / CSV)
- NIFTY expired options data download: every strike, 1-minute, Parquet or CSV
- NIFTY 1-second options and spot files: structure and quality checks
- How to download NIFTY option data: 1-minute or 1-second, Parquet or CSV
- NIFTY open interest historical data by strike, minute by minute
- NIFTY 1-minute vs 1-second option data: which one to download
- Working with Parquet in Python for options backtesting
- SENSEX option chain historical data: BSE chains minute by minute
- How bid/ask data improves backtest quality
- How to chart historical NIFTY call and put option prices
- SENSEX option data download: what you get and how to start
- SENSEX futures historical data download at 1-minute
- BANKEX options data download
- MCX crude oil data download: 1-minute futures and options
- MCX natural gas data download
- MCX silver data download
- NIFTY futures historical data download at 1-minute
- NIFTY 50 index 1-minute data download
- NIFTY option data in Excel: download, filter and chart
- NIFTY tick data download: what you need and what 1-second bars give you
- How to model slippage in a NIFTY options backtest with 1-minute data
- Which data do you need to backtest a NIFTY weekly short straddle held to expiry?
- Do you need NIFTY futures and spot data, or only options, for a backtest?
- How do I download MCX GOLD 1-minute historical data?
- Which data do you need to backtest a NIFTY overnight gap strategy?
- What time does NIFTY make its day high or low?
- Which data do you need to backtest a NIFTY 9:20 short straddle?
- How many years of NIFTY options data do you need for a backtest: 1 year or 3 years?
- Which NIFTY data do you need to backtest the close after NSE's closing auction?
- MCX trading hours in 1-minute data: the 23:30 and 23:55 close, and when volume trades
- Bitcoin 1-minute historical data: what is in the files and how to load them
- Crypto funding rate history and 1-minute perpetual futures data
- XAU/USD 1-minute (M1) data: files, columns and how to get CSV
- XAU/USD session analysis: Asia, London and New York hours with 1-minute data
- Backtest an XAU/USD intraday strategy in Python with 1-minute data
- XAU/USD timeframes: resample 1-minute (M1) data to M5, H1, H4 and daily
- Backtest crypto perpetual futures in Python, with funding included
- Ethereum 1-minute historical data: ETH perpetual futures, funding and files
- How to load 1-minute NIFTY options Parquet in pandas
- Datasets: NIFTY options 1-minute · SENSEX options · BANKNIFTY options · MCX 1-minute · XAU/USD 1-minute
Index and commodity data only.