NSE·histdataOpen console

ANALYSIS · 8 MIN READ

Reading an NSE price chart: gaps, circuits and price bands

Why a stock sits at the same price for days, what a flat line at the top of a range means, and how price bands and market-wide halts shape the chart you are looking at.

Chart an Indian stock and you will eventually see something that looks like a data error: a flat line for four sessions, a price that opens far from where it closed, or a day where high, low and close are all identical. None of those are bugs. They are the market’s structural rules showing up in the data, and each one means something specific.

Gaps: the price jumps between sessions

A gap is when a session opens away from the previous close. In your export it shows as OPENsitting well above or below the prior row’s CLOSE.

This is normal and expected. Trading runs for part of the day, but news does not. Earnings, regulatory decisions, global market moves overnight — all of it accumulates while the market is shut, and the pre-open auction prices it in before continuous trading starts.

Find them with a formula in a free column, at row 3:

=IF(ABS(C3/H2-1)>0.03,"GAP","")

That flags any open more than 3% away from the previous close. Two things to keep in mind:

  • A very large gap is often not a gap at all. It is a stock split or bonus issue, where the price legitimately halves overnight. Check corporate actions before concluding anything happened.
  • Gaps distort intraday range measures. High minus low ignores the overnight move entirely, which is exactly why true range exists — it includes the previous close in the calculation. The formula is in the spreadsheet guide.

Price bands: why a stock stops moving

NSE applies daily price bands to many securities — a maximum percentage move from the previous close, beyond which orders outside the band are not accepted. Bands are commonly set at levels such as 2%, 5%, 10% or 20% depending on the security, and securities in the derivatives segment operate under a different, more flexible arrangement.

The exact band for a given stock is set by the exchange and can change. Do not assume a level — check the exchange’s own published information for the security if it matters to your analysis.

What a band looks like in your data:

  • Close equals high, exactly, on an up day — the stock hit its upper limit and stayed there.
  • High, low and close are all the same number — the stock opened at the limit and never traded away from it. Volume is usually tiny, because at a limit there is a queue on one side and almost nobody on the other.
  • The same pattern repeats for several sessions. A stock repricing by more than its band needs multiple days to get there. This is the flat-line-then-cliff shape people mistake for missing data.

Flag limit days with:

=IF(AND(D2=E2,E2=H2),"LIMIT","")

This matters more than it sounds. During a limit sequence the quoted price is not a price at which you could have transacted in size — there was no liquidity on the other side. Any backtest assuming you bought or sold at those closes is fiction. Volatility measured across such a run is also understated, because the band suppressed the move that wanted to happen.

Market-wide circuit breakers

Separately from individual stock bands, the exchange halts all trading when a benchmark index moves by a large percentage. These are tiered — progressively larger moves trigger progressively longer halts, and a sufficiently large move ends the session entirely. The halt duration also depends on what time of day the trigger occurs.

In your data a market-wide halt shows up as an unusually short session: volume far below normal across effectively every stock on the same date, often with a big move into the close. It is a market-level event, not something about the company. If you see one date where every stock you have downloaded behaves strangely at once, that is the explanation.

Flat lines that are not circuits

A price that does not change for several days has three possible causes, and telling them apart is straightforward using volume:

What you seeWhat it means
Flat price, near-zero volume, few tradesIlliquidity. Nobody is trading it. The price is stale — the last transaction happened days ago and nothing has repriced it.
Flat price, tiny volume, high = low = closeCircuit limit. There is demand, but it cannot execute past the band.
Flat price, normal volumeGenuine equilibrium. Unusual over several days, but it happens in large, stable names during quiet periods.

The illiquid case is the dangerous one for analysis. A stale price produces a string of zero returns, which drags measured volatility down and makes the stock look far calmer than it is. Always check VOLUME and NO OF TRADES alongside price before trusting any statistic computed from a thin stock.

Volume spikes worth investigating

A day where volume is several times its recent average is worth a look, but the interesting question is what kind of spike it was. Average trade size answers it:

=J2/L2

Volume up sharply with trade count roughly flat means a small number of very large transactions — a block, an institutional position being built or unwound. Volume and trade count rising together means broad participation. Same headline number, completely different events.

Cross-check with DELIVERY % for a third dimension: a spike that was mostly delivered is different from one that was churned intraday and left no ownership change behind. The caveats in the delivery guide apply.

A sanity pass before you chart anything

  1. Filter to one series. Duplicate dates from multiple series corrupt everything downstream. Details.
  2. Scan for corporate actions. Compare each row’s PREV. CLOSE against the previous row’s CLOSE; mismatches are candidates.
  3. Flag limit days where high, low and close coincide.
  4. Check for stale runs — consecutive sessions with near-zero volume.
  5. Only then compute returns, averages and volatility.

Nothing above is a trading strategy or a recommendation — it is how to avoid misreading a chart. See the disclaimer.


Keep reading

Or go straight to the download console and pull a file.