free expiry day ↓

blog /

One-second or one-minute bars for the last hour of expiry?

When an option can move 9x in twelve minutes, the bar size changes your fills. When 1-second data is worth it for expiry-day backtests, and when 1-minute is enough.

Most expiry-day backtests run on one-minute bars, and for most questions that is the right choice. The last hour is the exception. In the 14 October 2025 NIFTY session, the 25,150 straddle fell from 22.40 to 6.15 between 15:00 and 15:10, and the 25,150 put went from 0.70 to 6.60 between 15:01 and 15:13. Inside each of those minutes there was a lot of path.

What a one-minute bar hides

A bar gives you four prices: open, high, low, close. It does not tell you whether the high came before the low. For a stop-loss or a target inside a fast minute, that order decides whether the trade won or lost. Backtests on minute bars usually assume the worse case or the close, and both can be wrong by a meaningful share of a cheap option's price.

When one-minute is enough

When one-second pays off

Working with one-second files

A full session is up to 22,500 seconds per contract, so load only the strikes and window you need, then resample when you want to compare against minute bars. The free 1-second sample has the same layout:

import pandas as pd

sec = pd.read_parquet("NIFTY_OPT_1sec_2025-10-14_exp2025-10-14.parquet",
                      filters=[("strike_price", "=", 25150.0)])
ts = "datetime" if "datetime" in sec else "timestamp"
sec = sec.set_index(ts).sort_index().between_time("15:00", "15:29:59")
put = sec[sec["right"].str.startswith("P")]["close"]
minute = put.resample("1min", label="left").ohlc()
print(minute.head(15))

If the one-second path crosses your stop before your target in a minute where the one-minute bar says "both", you have found a trade your minute-bar backtest scored incorrectly. Count those across a year of expiries before deciding which resolution to trust. Our NIFTY 1-second packs cover 2023 onward; SENSEX 1-second covers May 2024 to date.

more guides

Building an expiry-day dataset in Python: pandas and DuckDB recipesDoes NIFTY pin to max pain on expiry day? Testing it with open interest by strikeFar out-of-the-money options on expiry day: measuring the late spikes