Ask for a full year and you will get roughly 245 to 250 rows, not 365. Ask for the same range for two different stocks and the row counts may not match each other either. And the newest rows will have empty delivery columns.
All three are expected. Here is what causes each, and what it means for analysis.
Why a year is about 250 rows
The arithmetic is simple:
- 365 calendar days
- minus roughly 104 weekend days
- minus the exchange’s declared trading holidays
That leaves somewhere near 250 sessions. The exact figure changes each year, because Indian market holidays follow a mix of fixed-date and lunar-calendar festivals, and some fall on weekends in one year and midweek in the next.
Your export contains sessions, not calendar days. There is no row for a day the market was shut, because nothing happened. This is correct behaviour, not missing data.
The exchange publishes its holiday list annually, and it is the authoritative source — do not infer the calendar from your data.
One curiosity worth knowing: the exchange occasionally holds a short ceremonial session on Diwali, outside normal hours. It is a real trading session and produces a real row, often on a date the market is otherwise closed. If you find a lone session on an apparent holiday, that is usually the explanation.
Why two stocks give different row counts
This one surprises people, and it matters more than the holiday arithmetic because it silently breaks multi-stock analysis.
The market being open does not mean every stock traded. Reasons a specific stock is missing a date:
- No trades at all. In genuinely illiquid stocks, whole sessions pass with nobody transacting. No trade, no row.
- Suspension. Trading can be halted in a security for regulatory or compliance reasons, sometimes for extended periods.
- Listing date. A stock listed partway through your range simply has no history before it.
- Series changes. Movement between segments can affect which rows appear and how many rows exist per date. Details.
The practical consequence: never assume two exports align row for row. Pasting them side by side and comparing is the single most common way to produce confidently wrong analysis, because after the first missing date every subsequent comparison is off by a row and nothing looks obviously broken.
Always join on the date column. The mechanics are in the benchmarking guide and the portfolio tracker.
Settlement, and why delivery data lags
When you buy a share, the trade executes immediately but the shares arrive in your demat account on a later settlement day. Indian equity markets operate on a short rolling settlement cycle — T+1 has been the standard for equities in recent years, meaning settlement completes the business day after the trade, and the exchanges have since introduced even shorter optional cycles.
The detail that affects your data: delivery figures are a settlement output, not a trading output. The exchange knows the traded quantity the moment the session ends, but it only knows how much was actually delivered once settlement has been processed.
So in a fresh export:
- Price, volume, turnover and trade count are present for every session including the most recent.
DELIVERY QTYandDELIVERY %may be blank for the newest rows.
Blank means not yet published — never zero. A formula treating blank as zero will report a dramatic collapse in delivery that did not occur. AVERAGE ignores blanks correctly; SUM divided by a hardcoded row count does not. Check which behaviour yours has.
Re-downloading the same range a few days later usually fills these in.
What gaps do to your calculations
Missing sessions are not neutral. They change what your formulas actually measure.
Moving averages span more time than you think
A 20-row moving average is twenty sessions — about four calendar weeks normally, but longer across a holiday cluster. In a stock that misses sessions to illiquidity, a 20-row average might span two calendar months. The window is constant in rows, never in time.
Returns across gaps cover more than a day
=H3/H2-1 gives the move from one row to the next. If those rows are a week apart, that is a weekly return sitting in a column labelled daily, and it will show up as an outlier in your volatility.
Check the actual spacing:
=A3-A2
Values of 1 and 3 are routine — the 3 is a weekend. Anything much larger is a holiday cluster or a genuine gap in that stock’s trading, and those rows deserve a look before you trust statistics computed over them.
Annualisation assumes a session count
The conventional SQRT(252) multiplier assumes roughly 252 trading days a year. For a stock that only traded 180 sessions, that factor is wrong. Count the actual sessions per year and use that figure instead.
Quick diagnostic checks
| Question | Formula |
|---|---|
| How many sessions did I get? | =COUNT(A2:A1000) |
| Any unusually long gaps? | =MAX(A3:A1000-A2:A999) |
| Where is the biggest gap? | =IF(A3-A2>5,"GAP",""), filled down |
| Missing delivery rows? | =COUNTBLANK(N2:N1000) |
| Duplicate dates? | =SUMPRODUCT((COUNTIF(A2:A1000,A2:A1000)>1)*1) |
Running these five before any analysis takes under a minute and catches most of the problems that otherwise surface as a conclusion that quietly does not hold.
Summary
- ~250 rows a year is correct; the rest are weekends and holidays.
- Different stocks legitimately have different session counts — always join on date, never paste side by side.
- Blank delivery on recent rows is a settlement timing lag, not a zero.
- Row-based windows measure sessions, not time, and gaps stretch them.
Related: what this dataset does and does not cover. Nothing here is investment advice — see the disclaimer.
Keep reading
- Every column in your NSE export, explained — What OPEN, HIGH, LOW, PREV. CLOSE, LTP, CLOSE, VWAP, VOLUME, VALUE, NO OF TRADES, DELIVERY QTY and DELIVERY % actually mean in an NSE historical data file — and where people misread them.
- NSE series codes: EQ, BE, BZ, SM and ST — Why your export sometimes has two rows for the same date, what each NSE series code means for how a stock trades, and which rows you probably want to keep.
- Delivery percentage: how to read it, and its limits — How NSE delivery quantity and delivery percentage are calculated, what high and low readings suggest about participation, and the cases where the number misleads.
Or go straight to the download console and pull a file.