Home · Guides · NIFTY open interest historical data by strike, minute by minute
GUIDE · NIFTY OPEN INTEREST HISTORY · CATALOG VERIFIED 2026-11-11
NIFTY open interest historical data by strike, minute by minute
Options Data (optionsdata.shop) sells NIFTY open interest history as part of its option chain files: every 1-minute row carries the open interest of that strike and side at that minute, for every traded strike of the nearest expiries, covering JAN 2023 → NOV 2026. From those rows you can rebuild the OI profile of the chain at any minute, the change in OI since the open, and the put-call OI ratio. Files download as Parquet or CSV from the NIFTY option chain dataset.
NIFTY option chain dataNIFTY Complete, 1 year 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.
What the open interest column holds
open_interest (named oi in older files) is the number of open contracts in that strike, side and expiry at that bar. It sits on every row next to OHLC and volume, so you never join two datasets to see price and positioning together.
OI moves more slowly than price. It can stay flat for several minutes and then step, so treat it as a positioning signal rather than a minute-by-minute trigger. A strike only has a row in a minute when it traded, so for far strikes carry the last OI forward within that one strike, side and expiry.
NIFTY options (1-min and 1-sec) and futures carry open interest. NIFTY futures OI is in the Complete packs, on the same clock.
Change in OI and the OI profile at any minute
Change in OI is not a separate column, because it depends on the window you choose. Since the open, it is the OI at your minute minus the OI of that strike's first row of the day. The snippet builds the profile at 11:00 and the change since the open, per strike and side:
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"})
df["datetime"] = pd.to_datetime(df["datetime"])
df = df.sort_values("datetime")
key = ["strike_price", "right"]
first = df.groupby(key)["open_interest"].transform("first")
df["oi_change"] = df["open_interest"] - first
# latest known OI per strike and side at 11:00
upto = df[df["datetime"] <= "2026-09-10 11:00:00"]
prof = upto.groupby(key)[["open_interest", "oi_change"]].last().unstack("right")
print(prof.sort_values(("open_interest", "Put"), ascending=False).head(10))
Put-call OI ratio through the day
The put-call ratio by open interest is total put OI divided by total call OI for one expiry. Computed every minute, it shows how positioning shifted during the session instead of one end-of-day number.
# continue from the frame above
last_oi = df.set_index("datetime").groupby(key)["open_interest"].resample("1min").last()
last_oi = last_oi.groupby(level=[0, 1]).ffill().reset_index()
tot = last_oi.groupby(["datetime", "right"])["open_interest"].sum().unstack("right")
tot["pcr_oi"] = tot["Put"] / tot["Call"]
print(tot["pcr_oi"].between_time("09:15", "15:40").describe())
Expiry-day and roll behaviour to expect
On expiry day the expiring series usually loses open interest as positions are closed or rolled, while the next weekly gains it. Comparing the two expiry files of the same trading day shows the roll directly.
NIFTY weekly and monthly contracts expired on Thursday up to 31 August 2025 and expire on Tuesday from 1 September 2025 (first Tuesday weekly: 2 September 2025). Take the expiry from each row's expiry column, not from the weekday. More on that in the weekly expiry data format 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
Where can I get historical NIFTY open interest data by strike?
Options Data sells NIFTY option chain files with open interest on every row, per strike and side, at 1-minute for JAN 2023 → NOV 2026. See the NIFTY options historical data page.
Is change in open interest included?
Not as its own column. Each row has the OI at that bar, so change in OI over any window is one groupby, as shown above.
How often does NIFTY open interest update in the files?
OI is reported on every row, but its value changes less often than price, so you will see runs of the same OI followed by a step.
Can I calculate the put-call ratio from this data?
Yes. Sum put OI and call OI across strikes of one expiry at each minute and divide; the code on this page does it for a whole session.
Does the 1-second NIFTY data have open interest?
Yes. NIFTY 1-second option files carry open interest too, for the nearest expiries and strikes around the money. See the 1-second dataset.
Get the data
Free sample · Schema · Ask the AI for your data
NIFTY option chain dataNIFTY Complete, 1 year 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 weekly expiry data format: file names, expiry dates and weekly vs monthly
- 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.