Every column in the bhavcopy answers a narrower question than its name, and the closing price changed its answer on 3 August 2026
The short answer
The full security bhavcopy is one row per symbol, per series, per session, fifteen columns wide. Measured across 1,164 sessions of the exchange's own files (3 January 2022 to 18 September 2026, 3,094,373 rows): the series code decides what a row is, and only 74.6 per cent of rows are EQ. Delivered quantity is netted inside each client code and then added across codes, so it carries no direction, and on every trade for trade row it is a dash, not a zero. Turnover is in lakhs. The derivatives file counts volume in contracts and open interest in shares. A symbol is not a key: 203 of the 276 symbols that vanished from EQ were renamed, not delisted. And from 3 August 2026, for stocks with derivatives, CLOSE_PRICE is the closing auction price: LAST_PRICE equalled it on 1.9 per cent of those stocks' rows in June and July, and on 208 of 208 on the first auction day.
The bhavcopy is the exchange's end of day record of every security that traded, and most Indian market research begins by loading it. Most of the errors in that research begin in the same place: a column read as what its name suggests rather than what it measures, a filter that silently matches nothing, a key that stops being a key.
Every figure below was computed from the files, not quoted. The instrument is a cache of 1,217 daily files named sec_bhavdata_full, the version of the bhavcopy that carries delivery, cross-checked against four other files the exchange published: the delivery position file, the UDiFF common bhavcopy for cash and for derivatives, and the participant-wise open interest file. Where a field's meaning could not be settled from the data or the exchange's documents, the page says so.
One row is a symbol, in a series, on a session
The file has fifteen columns: SYMBOL, SERIES, DATE1, PREV_CLOSE, OPEN_PRICE, HIGH_PRICE, LOW_PRICE, LAST_PRICE, CLOSE_PRICE, AVG_PRICE, TTL_TRD_QNTY, TURNOVER_LACS, NO_OF_TRADES, DELIV_QTY and DELIV_PER. It carries no ISIN, no instrument type, no lot size and no face value, and it lists only securities that traded: not one of its 3,094,373 rows has a traded quantity of zero. A row is identified by symbol and series alone, which is the root of two failures below.
Sessions hold between 1,963 and 3,520 rows, median 2,622, and the count drifts: a January 2022 session averaged 2,185 rows, a September 2026 session 3,499. Three formatting facts break naive parsers. Of the 15 header names, 14 begin with a space, so the second column is literally named " SERIES". Every value after the first is padded with a space. And a missing delivery figure is the character "-", which turns two numeric columns into text for any reader that infers types.
The file name is not the date either. Asked for a trading holiday, the exchange's archive answers with a success code and the previous session's file, byte for byte: a request made for this page for 14 September 2026 returned the file for 11 September. Of the 1,217 files in this cache, 55 carry a DATE1 that differs from their name; 53 are exact duplicates of a session already held, and two Saturday sessions, 20 January 2024 and 18 May 2024, exist only under the name of the holiday that followed. The cache holds 1,164 sessions, not 1,217, and a pipeline that trusts file names manufactures 53 sessions in which nothing moved.
| Column | Observed | What it is | Read it as |
|---|---|---|---|
| SYMBOL | text, at most 10 characters | the exchange's ticker for the security | a label that can be renamed |
| SERIES | two characters; 145 codes in the cache | settlement type and instrument class | the first filter, applied after stripping spaces |
| DATE1 | text, such as 18-Sep-2026 | the session the row describes | the only date to trust; the file name can be another day's |
| PREV_CLOSE | ₹0.18 to 124,585.00 | the previous session's close, as printed | unadjusted on an ex-date |
| OPEN_PRICE | rupees, two decimals | the session's opening price | the pre-open auction's price where one runs |
| HIGH_PRICE, LOW_PRICE | rupees, two decimals | the range of the session's trades | a range of trades, not of quotes |
| LAST_PRICE | rupees, two decimals | the last traded price | not the close |
| CLOSE_PRICE | rupees, two decimals | the official close | half hour average, or the auction price for stocks with derivatives from 3 August 2026 |
| AVG_PRICE | rupees, two decimals | turnover divided by quantity | the session VWAP, not a midpoint |
| TTL_TRD_QNTY | 1 to 350,366,817 shares | shares traded | not value, not lots |
| TURNOVER_LACS | 0.00 to 286,838.51 | traded value in rupees lakh | multiply by 1,00,000 for rupees |
| NO_OF_TRADES | 1 to 964,557 | executed trades | not orders, not participants |
| DELIV_QTY | shares, or the text - | net per client code, added across codes | missing, never zero, where it is - |
| DELIV_PER | 0.50 to 100.00 per cent | DELIV_QTY over TTL_TRD_QNTY, times 100 | a netting residue, not a direction |
The series code decides what kind of thing a row is
The exchange's legend of series defines EQ as rolling settlement for fully paid equity shares and exchange traded funds, and BE and BZ as the same instruments moved to trade for trade: BE for surveillance, BZ for the Z category of companies not complying with listing conditions under SEBI circular CIR/MRD/DSA/31/2013 of 30 September 2013. The SME platform has the same split, SM for rolling settlement and ST and SZ for trade for trade, and codes beginning N, Y, Z, A and B are non-convertible debt.
The cache holds 145 distinct codes, and the mix is not stable. The codes outside the main groups, overwhelmingly debt, filled 138 rows in the median session until 6 May 2024, when they fell from 146 to 9 overnight, and they have run at a median of 3 since. A count of securities traded built from unfiltered rows records a mass disappearance that day with no market event behind it: on 18 September 2026 the UDiFF cash file still carried 152 rows that the full bhavcopy omits, every one of them corporate debt, a state development loan or a treasury bill.
| Series | What the exchange's legend says | Rows | Share | Delivery figure present |
|---|---|---|---|---|
| EQ | Fully paid equity shares and exchange traded funds, rolling settlement | 2,308,086 | 74.59 pc | on all but 1 rows |
| BE, BZ | The same instruments moved to trade for trade: surveillance, or the Z category | 279,597 | 9.04 pc | never: all 279,597 rows carry - |
| SM | SME platform equity, rolling settlement | 244,676 | 7.91 pc | on all but 15 rows |
| ST, SZ | SME platform equity, trade for trade | 64,753 | 2.09 pc | on all but 4 rows |
| GB | Sovereign gold bonds | 59,093 | 1.91 pc | on all but 2 rows |
| GS | Government securities | 39,820 | 1.29 pc | on every row |
| IV | InvIT units | 6,451 | 0.21 pc | on every row |
| RR | REIT units | 4,675 | 0.15 pc | on every row |
| E1 | Partly paid equity shares | 5,122 | 0.17 pc | on every row |
| 134 other codes | Mostly non-convertible debt, plus preference shares, warrants and fund units | 82,100 | 2.65 pc | on every row |
The filter fails first on whitespace. On 18 September 2026 the test SERIES equals "EQ" matches 0 of 3,508 raw rows, because every value is " EQ"; after stripping it matches 2,647. Zero rows is at least visible. The two quieter failures run in opposite directions.
Too loose, and the statistics absorb bonds and SME counters. An unfiltered count for the same day finds 2,261 advancing rows against 1,164 declining; EQ alone has 1,775 against 839. The unfiltered median delivery percentage is 61.9, the EQ median 58.2, because gold bonds and government securities deliver almost everything. EQ is not a list of companies either: in the exchange's UDiFF file for that day, 348 of the 2,647 EQ rows carry an ISIN beginning INF, the issuer type for mutual fund units, which makes them exchange traded funds, 2.7 per cent of EQ turnover.
Too tight, and the panel loses stocks at the moments that matter. Of 3,270 symbols that traded in EQ at some point in the cache, 1,270, or 38.8 per cent, also spent time in BE or BZ. The files record 3,107 moves from EQ into trade for trade and 3,160 moves back, with a median spell of 63 sessions. An EQ-only panel shows each of those stocks vanishing for about a quarter and returning, and the vanishing coincides with the exchange's own decision to move the stock to trade for trade, the mechanics of which are set out in the surveillance frameworks guide. The defensible key is symbol plus an explicit set of equity series, with the series kept as an attribute rather than used as a gate.
Delivered quantity is netted inside each client code, then added across codes
The delivery columns come from a separate exchange file, the security-wise delivery position, titled "Security Wise Delivery Position - Compulsory Rolling Settlement". Its header names the two figures exactly: "Deliverable Quantity(gross across client level)" and "% of Deliverable Quantity to Traded Quantity". For 18 September 2026 the full bhavcopy's DELIV_QTY and DELIV_PER equal that file's figures on all 3,233 rows present in both, and a header record in the delivery file carries control totals, the record count and the sum of deliverable quantity, 2,37,69,32,903 shares, which a parser can check itself against.
Gross across client level is the whole mechanism. Inside one client code, the session's buys and sells are netted to a single position. Across client codes nothing is netted: the positions are added. For every share a client ended the session long, another client ended it short, so the net buying positions sum to exactly the same figure as the net selling positions, and deliverable quantity is that one number. Two consequences follow. It can never exceed traded quantity, and it has no direction.
Read the picture as the exchange reads the day. A client who buys and sells the same 600 shares adds 600 to traded quantity and nothing to delivery. The 500 shares one client sold and did not buy back are delivery exactly as much as the 500 that two others bought and kept. A day on which one large holder distributes into many small buyers produces the same deliverable quantity as the reverse. And anything held past the session inside one client code counts, whatever its purpose: a cash purchase held against a short future in an arbitrage is delivery by this definition, with no view on the stock at all.
The dash has a cause as well. The delivery position file is titled for the compulsory rolling settlement and lists settlement type N only; on 18 September 2026 it held no BE or BZ rows, and the full bhavcopy carried "-" on all 275 of its BE and BZ rows. Across the cache every one of the 279,597 trade for trade rows carries the dash, against a single EQ row in 2,308,086. Trade for trade withdraws netting, so every trade settles on its own and there is nothing to report. Parsing the dash as zero turns a stock in which every share was delivered into one in which none was. One pattern the documents consulted do not explain: the SME trade for trade series, ST and SZ, do carry figures, and 29,329 of their 64,749 filled rows fall below 100 per cent.
The percentage is partly a count of the day's trades
Netting needs the same client code on both sides of the book, so the chance of it rises with the number of trades, and the percentage falls with it. Across 2,308,085 EQ rows the relationship is monotonic.
A single trade reads 100 per cent by construction: one buyer, one seller, nothing to net. The 10,080 EQ rows at 100 per cent, 0.44 per cent of the total, had a median of 22 trades against 3,696 for EQ rows generally. A thin day looks like conviction because it holds too few trades for anything to cancel.
The percentage also moves against the quantity it is meant to summarise. For each of the 2,105 stocks with at least 500 EQ sessions in the cache, rank its sessions by traded quantity and compare the heaviest tenth with the middle fifth.
| Measure | Middle sessions | Heaviest tenth | Change |
|---|---|---|---|
| Median DELIV_PER | 54.4 | 42.5 | -11.3 points per stock; lower for 86.6 pc of stocks |
| Delivered quantity, against middle sessions | 1.00 times | 5.21 times | higher for 100.0 pc of stocks |
On the heavy days the percentage fell and the delivered quantity multiplied: more shares changed hands between client codes and stayed changed, outnumbered by more shares churned. A falling delivery percentage on a heavy day is therefore more often a sign of extra delivery than of less. The same arithmetic separates the typical stock from the typical share. The median EQ row reads 53.4 per cent, but the market-wide ratio of delivered to traded quantity in EQ had a median of 38.4 per cent across sessions, ranging from 25.3 to 58.1, because the most traded stocks net the most.
What survives is narrower than the folklore and more useful. DELIV_QTY, read as a quantity against the same stock's own history, says how much stock moved between different client codes and stayed moved at the close. It says nothing about who, and nothing about which way. The volume guide and the Wyckoff reading of delivery data treat the figure as one input to a judgement about conviction; the mechanism above sets the limits on that judgement.
The close is an auction price now, for the most traded stocks
Until August 2026 the definition was settled. The exchange's capital market consolidated circular, NSE/CMTR/67774 of 30 April 2025, section 3.4, defines the closing price as the last half hour's value weighted average price; the day's last traded price if the security did not trade in the last half hour; the latest available close if it did not trade at all. LAST_PRICE is the last trade, so the two columns differ on almost every liquid row.
SEBI circular SEBI/HO/47/11/11(3)2025-MRD-POD2/I/2765/2026 of 16 January 2026 introduced a closing auction session in the equity cash segment. The exchange's operating guidelines, NSE/CMTR/73362 of 18 March 2026, apply it first to stocks on which derivatives contracts are available: their close is the equilibrium price the auction discovers, falling back to a reference price, the volume weighted average of trades between 3:00 and 3:15 pm, else the day's last traded price, else the previous close, when no equilibrium price is found. Every other security keeps the half hour average. NSE/CMTR/75479 of 30 July 2026 made the change live from 3 August 2026.
The files show the switch to the session. For the 210 stocks in the derivatives file of 18 September, LAST_PRICE equalled CLOSE_PRICE on 1.9 per cent of their EQ rows across June and July, and never on more than 3.8 per cent in any session. On 3 August, measured against that day's own list of 208 stocks with derivatives, it was 208 of 208; on 31 July, 3 of 208. Every session from 26 August shows all 210. The rest of the EQ series read 6.3 per cent over the ten sessions before and 6.7 over the ten after.
The column name did not change, and neither did its type, so nothing in a pipeline flags it. For the most traded stocks in the market, CLOSE_PRICE before 3 August 2026 is an average over half an hour and after it is a single auction price, and a close to close return computed across the date straddles two definitions. In 2026 before the change, the last trade and the close differed by a median of 13.9 basis points for these stocks and 27.5 for the rest of EQ, which is the size of the seam. LAST_PRICE has also stopped being an independent observation for them, because the last trade now prints at the auction price. Any page that describes the exchange's close as the last half hour's average, as every page written before August 2026 had reason to, now describes the rule only for stocks without derivatives. The pre-open call auction runs the same equilibrium logic at the other end of the day.
Turnover is in lakhs, the average is a VWAP, and the previous close is unadjusted
TURNOVER_LACS is rupees divided by one lakh, rounded to two decimals, and the file proves it internally: on every one of its 3,094,373 rows, AVG_PRICE equals TURNOVER_LACS times 1,00,000 divided by TTL_TRD_QNTY within the rounding of the two printed fields. The exchange's UDiFF file carries the same value in rupees, and the two agree to within ₹500 on every row of 18 September 2026. Summed over that day's EQ rows the column reads 1,43,65,967.03: as lakh, the day's EQ turnover of ₹1,43,660 crore; as rupees, about ₹1.44 crore, a hundred thousand times too small. Added to a rupee figure from the UDiFF file, it mixes units without complaint. The rounding also costs precision at the bottom: 6,235 rows show 0.00 lakh with shares traded.
AVG_PRICE is the session's volume weighted average price, turnover over quantity, not a midpoint of high and low, and it lies inside the day's range on every row. TTL_TRD_QNTY counts shares, not value and not lots. NO_OF_TRADES counts executed trades, not orders and not participants, so volume over trades is an average trade size, the closest the file comes to saying who was trading.
PREV_CLOSE is the previous session's CLOSE_PRICE as printed, unadjusted even on an ex-date. 438 EQ rows open more than a quarter below it, 389 of them at ratios such as a half, a fifth or a tenth, which is the arithmetic of bonus issues and sub-divisions rather than of trading. A return computed as CLOSE_PRICE over PREV_CLOSE records each of those as a crash. Adjusting for corporate actions is separate work the file does not do.
The same unadjusted link makes PREV_CLOSE the best integrity check in the file. Across 2,301,035 EQ rows whose symbol also traded in EQ in the session before, PREV_CLOSE equalled that session's close on all but 9,647, and 9,646 of those fell on five sessions. Each of the five follows a session this cache does not hold: four weekend special sessions, 12 November 2023 (a Sunday), 2 March 2024 (a Saturday), 1 February 2025 (a Saturday) and 1 February 2026 (a Sunday), which a fetcher that skips weekends never requests, and 8 August 2022, for which the archive serves an Excel workbook under a .csv name, which the fetcher rejected. With the archive's copies of those five sessions, the next session's PREV_CLOSE matches their close on every one of 9,818 rows. One isolated row remains.
| File | Field | Unit or meaning | Evidence |
|---|---|---|---|
| Full bhavcopy | TURNOVER_LACS | rupees lakh, two decimals | AVG_PRICE equals it times 1,00,000 over quantity, within rounding, on all 3,094,373 rows |
| UDiFF cash | TtlTrfVal | rupees | within ₹500 of TURNOVER_LACS times 1,00,000 on every row of 18 September 2026 |
| Full bhavcopy | TTL_TRD_QNTY | shares | equal to the UDiFF cash TtlTradgVol on all 3,508 rows |
| UDiFF derivatives | TtlTradgVol | contracts | value over volume times lot, less strike, falls in the premium range on 13,574 of 13,574 traded option rows |
| UDiFF derivatives | OpnIntrst | shares or index units | summed over lot size it equals the participant-wise totals: 451,729 and 8,191,350 futures contracts |
| UDiFF derivatives | TtlTrfVal | rupees of notional; options include the strike | the same identity as the volume row |
| Full bhavcopy | CLOSE_PRICE | rupees; definition changed on 3 August 2026 for stocks with derivatives | LAST_PRICE equals it on 208 of 208 such stocks on the first auction day, 3 of 208 the session before |
The derivatives file counts contracts, not companies
The derivatives bhavcopy is a different file in a different format. The exchange's reports page marks the legacy cash and derivatives bhavcopy CSV files "Discontinued w.e.f July 08,2024", citing NSE Circular No. 62424 of 12 June 2024, and points to the UDiFF common bhavcopy, the format built from SEBI's work with its Market Data Advisory Committee to unify more than 200 exchange and clearing files into 11 formats. A tutorial built on the old derivatives columns describes a file that no longer exists. The full security bhavcopy with delivery was not converted: it still arrives in the fifteen column layout above.
The UDiFF derivatives file for 18 September 2026 has 34 columns and 35,960 rows, and a row is one contract: an underlying, an expiry, and for options a strike and a call or put. It lists 29,824 stock option rows, 5,489 index option rows, 629 stock futures and 18 index futures across 216 underlyings, 210 stocks and 6 indices. One underlying fans out into between 60 and 1,703 rows.
Of those rows, 21,748, or 60.5 per cent, are contracts that did not trade at all, listed anyway: open, high and low print 0.00 on all 21,748, the close is the previous close carried forward on all 21,748, and the last price is 0.00 on 15,933. An average of OpnPric across the file averages in zeros, and the close on an untraded contract is yesterday's number.
The quantity fields use three units in one row. TtlTradgVol, which the UDiFF catalogue labels Total Traded Qty while describing the lot size field as the way to derive total traded lots, is already in contracts in the exchange's file: for all 13,574 traded option rows, value divided by volume and lot size, less the strike, lands inside the day's premium range, and for 637 of 638 traded futures the same division lands inside the price range. OpnIntrst is in shares or index units: divided row by row by the lot size and summed, it reproduces the exchange's participant-wise open interest totals, 451,729 index futures contracts and 8,191,350 stock futures contracts. TtlTrfVal is rupees of notional value, and for options it includes the strike, which is why option turnover figures run so far above the premium that changed hands.
The price fields need the same care. SttlmPric equals ClsPric on 603 of 647 futures rows but on only 10,472 of 35,313 option rows, so an option's settlement price is not its close. UndrlygPric is one figure per underlying, within 7.4 basis points of the cash close for every stock that day but equal to it for only 80 of 210; the catalogue calls it the underlying asset price without saying which price. ISIN and series are blank on all 35,960 rows, as the catalogue specifies for segments other than equity. FinInstrmId is the nearest thing to a key: of 16,678 contracts listed on both 3 August and 18 September, 16,566 kept the same identifier.
| Full security bhavcopy | UDiFF derivatives bhavcopy | |
|---|---|---|
| Layout | 15 legacy columns, values padded with a space | 34 UDiFF columns with ISO style names |
| One row is | one symbol in one series | one contract: underlying, expiry, strike, call or put |
| Rows on 18 September 2026 | 3,508 | 35,960 |
| Untraded instruments | absent: every row traded | listed: 21,748 rows, 60.5 pc |
| Identifier | SYMBOL and SERIES only | FinInstrmId, unchanged for 16,566 of 16,678 contracts from 3 August |
| ISIN | not carried | blank on all 35,960 rows |
| Volume unit | shares | contracts |
| Value unit | rupees lakh | rupees of notional |
| Delivery | DELIV_QTY and DELIV_PER | none |
| Open interest | none | OpnIntrst, in shares or index units |
A symbol is a label, not a key
Symbols change when a company renames itself or a fund sponsor rebrands a scheme. The exchange publishes a symbol change list; 268 of its 1,061 entries fall inside this cache's window, and for 234 of them both the old and the new symbol appear in equity series rows.
PREV_CLOSE finds renames without the list, because a renamed security's first row under its new symbol carries the last close printed under the old one. Pairing every symbol's first appearance with any symbol last seen within the five sessions before it at exactly that close finds 247 pairs: 227 are on the exchange's list, and 20 more pass the test without being on it. Of the list's 234 equity pairs, the test recovers 227.
Keyed on SYMBOL, a rename is a delisting followed by a listing. Of the 276 symbols last seen in EQ that stopped appearing more than a month before the end of the cache, 203, or 73.6 per cent, were renames. A survivorship count that reads every disappearance as a failure overstates failures 3.8 times over in this window. The trade for trade series tell a different story: of 289 symbols last seen in BE or BZ, only 31 were renames, so a disappearance from a surveillance series is a different event and has to be classified from other records.
Run the naive join directly. Take the 2,229 symbols with an EQ row on 18 September 2025 and look each one up on 18 September 2026: 60 have no row in any equity series. Of those, 45 were renamed and trade under another symbol, four traded within the final month but not that day, and 11 had stopped trading. A join on SYMBOL treats all 60 alike.
The durable identifier is the ISIN, and this file does not carry one. The UDiFF cash bhavcopy does: all 3,660 of its rows on 18 September 2026 have one, and joining it to the full bhavcopy on symbol and series for the same date matches all 3,508 full bhavcopy rows, with identical close, last price, previous close, volume and trade count on 3,508 of them. The join is exact within a date. Across dates the ISIN is what survives a rename: on three rename dates in 2026, 11 of the 11 renamed securities kept theirs.
One file, worked end to end
The steps below take the exchange's file for 18 September 2026, sec_bhavdata_full_18092026.csv, from raw text to three numbers that can be defended, and each result can be checked by anyone who downloads the same file.
| Step | Operation | Result on 18 September 2026 |
|---|---|---|
| 1 | Read sec_bhavdata_full_18092026.csv | 3,508 rows, 15 columns; 14 header names begin with a space |
| 2 | Keep rows whose SERIES equals EQ, without stripping | 0 rows |
| 3 | Strip every field, then keep EQ | 2,647 rows |
| 4 | Read the dash in DELIV_QTY as missing | 275 dashes, all BE or BZ (248 and 27); none among EQ rows |
| 5 | Sum TURNOVER_LACS over EQ, divide by 100 | ₹1,43,660 crore |
| 6 | Sum DELIV_QTY over sum TTL_TRD_QNTY, EQ | 44.36 pc; the median row reads 58.21 |
| 7 | Match to the delivery position file | 3,233 of 3,233 rows identical; control total 2,37,69,32,903 shares |
| 8 | Split EQ by the day's derivatives list | LAST equals CLOSE on 210 of 210 with derivatives, 195 of 2,437 without |
The unfiltered versions of the same numbers are the naive analysis: 3,508 rows, 2,261 advances, turnover of ₹1,45,137 crore, a median delivery of 61.9 per cent. None is wildly wrong on one day, which is why the errors survive review. They compound when the same code runs across a series change, a composition step, a rename or 3 August 2026.
What the file is for, and what it cannot tell you
The full bhavcopy is an end of day ledger of what traded, at what prices, in what size, and how much of it was left standing after netting inside each client code. It is the right instrument for building a universe, screening for liquidity, estimating the cost side of a backtest, since every charge in the real cost of a trade is levied on traded value, which this file prices, and for any claim that must be reproduced from the exchange's own record.
It cannot say who traded, in what order within the session, or which way the delivered shares moved. It does not adjust for corporate actions. And three of its facts changed inside three years while the column names stayed put: the legacy bhavcopy it sits beside was retired, the debt codes left it, and the close became an auction price for the most traded stocks. The discipline that follows is mechanical. Key sessions on DATE1, never on the file name. Filter series explicitly and keep the series. Read the dash as missing. Convert lakhs deliberately. Check the PREV_CLOSE chain. Record which definition of close each session carries. Publishing a result someone else can check covers the rest, and the data snapshot, which this file shows to be harder than it looks, is the part most results skip.
Treating a data file as evidence to be interrogated rather than a table to be loaded is a habit rather than a fact, and it is the habit the curriculum is built to train.
Frequently asked questions
What is the difference between the bhavcopy and the full bhavcopy?
The full bhavcopy, sec_bhavdata_full, adds DELIV_QTY and DELIV_PER to the day's prices, volume, turnover and trade count, in a fifteen column legacy layout. The legacy cash and derivatives bhavcopy CSV files were discontinued from 8 July 2024 in favour of the UDiFF common bhavcopy, which carries ISIN but no delivery. The full bhavcopy kept its old layout.
What exactly does DELIV_PER measure?
Deliverable quantity as a percentage of traded quantity. The exchange labels deliverable quantity gross across client level: each client code's buys and sells in the session are netted, and the resulting positions are added across codes. It is the part of the day's volume that did not cancel inside a single client code, and it carries no direction.
Why is delivery shown as a dash for some stocks?
Those rows are trade for trade, series BE or BZ, where netting is withdrawn and every trade settles on its own, and the exchange's delivery position file covers the rolling settlement only. All 279,597 trade for trade rows in this sample carry the dash. Read it as missing, never as zero.
Is a high delivery percentage bullish?
Not by itself. For every client that ended the day long, another ended it short, so the figure is identical whether a large holder is distributing or accumulating. It also rises mechanically on thin days: the 10,080 EQ rows at 100 per cent had a median of 22 trades, against 3,696 for EQ rows generally.
Why does LAST_PRICE now equal CLOSE_PRICE for some stocks?
Since 3 August 2026, stocks with derivatives close through the closing auction session introduced by SEBI's circular of 16 January 2026, so the close is the auction price and the last trade prints at it. On the first auction day the two matched for 208 of 208 such stocks, against 3 the session before. Other stocks still close on the last half hour's average.
What unit is TURNOVER_LACS in?
Rupees lakh: rupees divided by 1,00,000, rounded to two decimals. Multiply by 1,00,000 for rupees or divide by 100 for crore. The UDiFF common bhavcopy reports the same value in rupees, so mixing the two files without converting is a silent error of a hundred thousand times.
Which series should an equity analysis keep?
An explicit set, with SERIES kept as a column rather than used as a gate. EQ alone drops stocks during trade for trade spells, and 38.8 per cent of symbols that traded in EQ here also spent time in BE or BZ. No filter at all mixes in gold bonds, government securities, trust units, SME counters and debt. EQ also holds exchange traded funds.
Why does a stock disappear from the file?
In the EQ series, most often because it was renamed: 73.6 per cent of symbols last seen in EQ that stopped appearing in this sample were renames. Otherwise it moved series, was suspended or delisted, or did not trade, because the file lists only securities that traded in the session.
What does one row of the derivatives bhavcopy represent?
One contract: an underlying, an expiry and, for options, a strike and a call or put. On 18 September 2026 the file had 35,960 rows for 216 underlyings, 60.5 per cent of them untraded. Volume is in contracts, open interest in shares or index units, and value in rupees of notional.
Is PREV_CLOSE adjusted for splits and bonus issues?
No. It is the previous session's close as printed, even on an ex-date, so a return computed from it records a bonus or split as a collapse: 438 EQ rows here open more than a quarter below PREV_CLOSE, most at ratios such as a half or a tenth. The same unadjusted link makes it a reliable check that no session is missing.
As at 23 September 2026. File layouts, series legends and closing price rules change by exchange and SEBI circular, and three facts on this page changed inside the last three years. Confirm the current specification with the exchange before relying on any field description here.
How the figures were produced. tools/build-article-122.py reads 1,217 full bhavcopy files, 2022-01-03 to 2026-09-18, from the repository's market data cache, identifies each session by DATE1, drops 53 byte identical duplicates and parses 1,164 sessions, 3,094,373 rows, after stripping every field. Cross checks use the delivery position file, the UDiFF cash and derivatives bhavcopies and the participant-wise open interest file for 18 September 2026, the derivatives bhavcopy for 3 August 2026, UDiFF cash files either side of three 2026 rename dates, the exchange's symbol change list, and the archive's copies of the five sessions the cache lacks, all fetched from the exchange's public archive and stored beside the cache. Trade count bands use every EQ row with a delivery figure. The heavy day comparison ranks each stock's EQ sessions by traded quantity and compares medians in the top tenth with the 40th to 60th percentile band, for stocks with at least 500 sessions. The rename test pairs a symbol's first row with any symbol last seen within five sessions before it whose last close equals the new row's PREV_CLOSE exactly; a vanished symbol is one last seen more than 21 sessions before the final session, counted as renamed if it passes the test or appears on the exchange's list within ten sessions of its last row. The closing auction measurement uses the stocks with derivatives in the 18 September file, and that day's own list for 3 August and the session before. No sampling, simulation or random draw is involved, so no seed or replication count applies: every figure is a deterministic count over the named files, re-derived by a separate script before publication.
Not verified this session. Whether markets outside India publish an equivalent per security delivery figure: the research brief for this page proposed that most do not, that was not verified, and it is not claimed. Why the SME trade for trade series carry delivery figures when BE and BZ do not. Which price UndrlygPric reports. Why the UDiFF catalogue labels TtlTradgVol a quantity while the exchange's derivatives file populates it in contracts, which is measured here and not explained by any document consulted. The reading of the ISIN prefix INF as mutual fund units rests on the depository's issuer type structure as reproduced in secondary documentation. The discontinuation of the legacy bhavcopy is taken from the exchange's reports page, which cites Circular No. 62424; the circular itself was not retrieved.
Bharath Shiksha is an educational publisher and not a SEBI-registered investment adviser or research analyst. Nothing on this page is a recommendation to buy, sell or hold any security, and no figure on it is a forecast.
Ready to go deeper than this article?
Bharath Shiksha is a 90-volume curriculum across 6 stages, from chart reading at ₹14,999 through capital raising, or the full bundle at ₹1,49,999. What a field measures, how the file was produced and what it cannot say are taught as method, so the checks on this page become a routine rather than a rescue.
Take the free diagnostic →