Home · Guides · NIFTY options data for backtesting

GUIDE · NIFTY BACKTESTING · CATALOG VERIFIED 2026-10-04

NIFTY options data for backtesting

For NIFTY options backtests, AI Options Data Store (optionsdata.shop) sells the historical option chain as Parquet files: expired weekly and monthly contracts, every traded strike on calls and puts, with OHLC, volume and open interest at 1-minute from JAN 2023 to OCT 2026 and at 1-second from JAN 2023 to OCT 2026. NIFTY futures (JAN 2023 → OCT 2026) and spot (JAN 2023 → OCT 2026) 1-minute bars are sold alongside, so the underlying sits on the same clock. No Greeks or bid/ask.

NIFTY options packNIFTY Complete (options, futures, spot)Free sample Free sample (no email) File schema

Dates on this page are read from the live file catalog, not typed by hand. Full matrix: /coverage.

What a NIFTY options backtest needs

The expired contracts. Weeklies drop out of live broker chains the day they expire. A backtest needs them as they traded, with the expiry on every row.

Every traded strike. A rolling "ATM" series quietly swaps into strikes you never held once the market moves.

Intraday bars with open interest. Entries, stop-losses and exits happen inside the day. NIFTY options (1-min and 1-sec) and futures carry open interest.

The underlying on the same timestamps. Futures and spot bars let you mark moneyness and hedges minute by minute.

1-minute or 1-second

1-minute (JAN 2023 → OCT 2026): the default for most strategy research.

1-second (JAN 2023 → OCT 2026): Nearest NIFTY expiries, strikes around the money. Use it for tight stops, slippage and expiry-afternoon studies. See NIFTY 1-second data.

Neither is tick-by-tick trade prints.

Price an intraday ATM straddle from one file

Columns follow the free sample (layout A); the schema page lists both layouts.

import pandas as pd
df = pd.read_parquet("NIFTY_OPT_1min_2026-09-10_exp2026-09-15.parquet")
p = df.pivot_table(index="datetime", columns=["strike_price", "right"], values="close")
first = p.iloc[0].unstack()   # strikes x Call/Put at the first bar
atm = (first["Call"] - first["Put"]).abs().idxmin()
straddle = p[(atm, "Call")] + p[(atm, "Put")]
print(atm, straddle.resample("15min").last())

Caveats

Nearest NIFTY and SENSEX expiries, every traded strike. Full detail on the coverage page.

Bars are traded prices with no bid/ask, so model spread and slippage yourself, especially far out of the money.

Flat zero-volume bars are stale prices, not fills.

Expiry weekdays have changed over the years. Read the expiry from the file name or the expiry column, never a hard-coded weekday.

Exactly which fields are in the files

Options files

Column (layout A · layout B)TypeMeaning
datetime · timestamptimestampBar start time, IST wall-clock (e.g. 2026-09-10 09:15:00)
stock_code · —stringUnderlying as the source names it: NIFTY, or BSESEN for SENSEX
exchange_code · —stringNFO (NSE F&O) or BFO (BSE F&O)
product_type · —stringOptions
expiry_date · expirystringContract expiry (A: 15-SEP-2026, B: 2026-09-15)
strike_price · strikenumberStrike price
right · option_typestringA: Call / Put, B: CE / PE
open / high / low / closefloatTraded premium OHLC within the bar
volumeintVolume traded in the bar, as reported by the source
open_interest · oiintOpen interest at that bar (SENSEX has gaps where it is 0 — see /free/schema)
— · ivfloatImplied volatility taken as-is from the data feed; not independently computed or verified. Layout B only

No Greeks or bid/ask.

Format: Parquet. Validate on the free sample and the schema page before buying.

FAQ

Where can I get NIFTY options data for backtesting?

AI Options Data Store sells NIFTY option chains with expired weekly and monthly contracts, every traded strike, OHLC, volume and open interest, at 1-minute (JAN 2023 → OCT 2026) and 1-second (JAN 2023 → OCT 2026), as Parquet files. NIFTY futures and spot 1-minute bars are sold alongside.

Does it include expired weekly options?

Yes. Each file is one trading day and one expiry, and expired weeklies and monthlies are kept.

Is the data CSV or Parquet?

Parquet. Any file converts to CSV in one line: pd.read_parquet(f).to_csv("out.csv", index=False).

Does it include Greeks or bid/ask?

No. Compute Greeks yourself from the option close and the spot or futures bar on the same timestamp if you need them.

Can I check the data first?

Yes. The free sample is three real trading days of the NIFTY option chain as Parquet, with no email needed.

Get the data

Free sample · Schema · Ask the AI for your data

NIFTY options packNIFTY Complete (options, futures, spot)Free sample Free sample

Related guides

Index and commodity data only.