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.

The fifteen columns as observed. Ranges are over the 2,647 EQ rows of 18 September 2026.
ColumnObservedWhat it isRead it as
SYMBOLtext, at most 10 charactersthe exchange's ticker for the securitya label that can be renamed
SERIEStwo characters; 145 codes in the cachesettlement type and instrument classthe first filter, applied after stripping spaces
DATE1text, such as 18-Sep-2026the session the row describesthe only date to trust; the file name can be another day's
PREV_CLOSE₹0.18 to 124,585.00the previous session's close, as printedunadjusted on an ex-date
OPEN_PRICErupees, two decimalsthe session's opening pricethe pre-open auction's price where one runs
HIGH_PRICE, LOW_PRICErupees, two decimalsthe range of the session's tradesa range of trades, not of quotes
LAST_PRICErupees, two decimalsthe last traded pricenot the close
CLOSE_PRICErupees, two decimalsthe official closehalf hour average, or the auction price for stocks with derivatives from 3 August 2026
AVG_PRICErupees, two decimalsturnover divided by quantitythe session VWAP, not a midpoint
TTL_TRD_QNTY1 to 350,366,817 sharesshares tradednot value, not lots
TURNOVER_LACS0.00 to 286,838.51traded value in rupees lakhmultiply by 1,00,000 for rupees
NO_OF_TRADES1 to 964,557executed tradesnot orders, not participants
DELIV_QTYshares, or the text -net per client code, added across codesmissing, never zero, where it is -
DELIV_PER0.50 to 100.00 per centDELIV_QTY over TTL_TRD_QNTY, times 100a 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.

Rows by series across 1,164 sessions, and whether the delivery columns are filled
SeriesWhat the exchange's legend saysRowsShareDelivery figure present
EQFully paid equity shares and exchange traded funds, rolling settlement2,308,08674.59 pcon all but 1 rows
BE, BZThe same instruments moved to trade for trade: surveillance, or the Z category279,5979.04 pcnever: all 279,597 rows carry -
SMSME platform equity, rolling settlement244,6767.91 pcon all but 15 rows
ST, SZSME platform equity, trade for trade64,7532.09 pcon all but 4 rows
GBSovereign gold bonds59,0931.91 pcon all but 2 rows
GSGovernment securities39,8201.29 pcon every row
IVInvIT units6,4510.21 pcon every row
RRREIT units4,6750.15 pcon every row
E1Partly paid equity shares5,1220.17 pcon every row
134 other codesMostly non-convertible debt, plus preference shares, warrants and fund units82,1002.65 pcon 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.

How deliverable quantity is built from four client codes in one session A grid of four client codes with the quantity each bought and sold during the session and the net position left at the close. One client bought and sold the same quantity and nets to zero. The net buying positions add up to exactly the same figure as the net selling positions, and that shared figure is the deliverable quantity, a little under two fifths of the traded quantity. One session, four client codes: how deliverable quantity is built. Illustrative figures. Client code Bought Sold Net at the close What the file does with it A6006000round trip: nothing left to deliverB3000+300kept past the close: countsC0500-500sold from holdings: countsD400200+200partly netted: 200 counts Traded quantity 1,300 each share counted once Net buyers equal net sellers 500 = 500 the same shares, seen from both ends Deliverable quantity 500, or 38.5 per cent and no direction
Illustrative figures, following the exchange's own label for the quantity, gross across client level: net inside each client code, then add across codes without netting between them.

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.

Median delivery percentage falls as the number of trades in the session rises Six bars, one for each band of trades per session, showing the median DELIV_PER of EQ rows in that band. A single trade reads one hundred per cent every time. The median falls steadily through each band to a little over two fifths for rows with more than ten thousand trades. Median DELIV_PER of EQ rows by trades in the session, 3 January 2022 to 18 September 2026 100.01 trade696 rows96.72 to 108,489 rows78.411 to 100117,580 rows65.4101 to 1,000527,789 rows52.21,001 to 10,000942,801 rows43.9over 10,000710,730 rows One trade has one buyer and one seller, so nothing can net. Every added trade is another chance to.
Measured over 2,308,085 EQ rows with a delivery figure. The bands are counts of executed trades from NO_OF_TRADES. The pattern is arithmetic before it is behaviour: the same client code has to appear on both sides for anything to net, and that becomes more likely as trades accumulate.

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.

Each stock's heaviest tenth of sessions against its middle fifth, medians across 2,105 stocks
MeasureMiddle sessionsHeaviest tenthChange
Median DELIV_PER54.442.5-11.3 points per stock; lower for 86.6 pc of stocks
Delivered quantity, against middle sessions1.00 times5.21 timeshigher 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 session on which LAST_PRICE started to equal CLOSE_PRICE for stocks with derivatives Two series of dots, one per session from June to mid September 2026. For stocks with derivatives contracts the share of rows whose last price equals the close sits between zero and four per cent until 31 July, then jumps to nearly one hundred per cent on 3 August 2026 and stays there. For every other EQ row the share stays near six to nine per cent throughout. Share of EQ rows where LAST_PRICE equals CLOSE_PRICE, per cent, each session 0255075100 JuneJulyAugustSeptember closing auction live, 3 August 2026 208 of 208 on 3 August, on that day's own list June and July: 1.9 per cent for stocks with derivatives the 210 stocks with contracts in the derivatives file of 18 September 2026 every other EQ row
Measured from the full bhavcopy, 1 June 2026 to 18 September 2026, 78 sessions. Before the change the close was the last half hour's volume weighted average and rarely equalled the last trade. From 3 August the close of a stock with derivatives is the closing auction price, and the last trade is that auction. The gold series uses the 18 September list, which includes 3 stocks whose derivatives began later in August, so it sits just under 100 until 26 August. The other series does not move on the day, which rules out a change in the file itself.

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.

Units and definitions that are routinely misread, and how each was established from the files
FileFieldUnit or meaningEvidence
Full bhavcopyTURNOVER_LACSrupees lakh, two decimalsAVG_PRICE equals it times 1,00,000 over quantity, within rounding, on all 3,094,373 rows
UDiFF cashTtlTrfValrupeeswithin ₹500 of TURNOVER_LACS times 1,00,000 on every row of 18 September 2026
Full bhavcopyTTL_TRD_QNTYsharesequal to the UDiFF cash TtlTradgVol on all 3,508 rows
UDiFF derivativesTtlTradgVolcontractsvalue over volume times lot, less strike, falls in the premium range on 13,574 of 13,574 traded option rows
UDiFF derivativesOpnIntrstshares or index unitssummed over lot size it equals the participant-wise totals: 451,729 and 8,191,350 futures contracts
UDiFF derivativesTtlTrfValrupees of notional; options include the strikethe same identity as the volume row
Full bhavcopyCLOSE_PRICErupees; definition changed on 3 August 2026 for stocks with derivativesLAST_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.

One underlying fans out into many rows of the derivatives bhavcopy A single underlying on the left splits into futures, one row per expiry, and options, one row per expiry, strike and call or put. A panel on the right counts the rows by instrument type in the derivatives file of 18 September 2026, and a band along the bottom notes that most rows did not trade that day. One underlying a stock or an index Futures: one row per expiry 3 expiries for 209 of 210 stocks Options: one row per expiry, strike, and call or put 142 rows for the median stock 1,703 rows for the busiest index On 18 September 2026 29,824 stock option rows 5,489 index option rows 629 stock future rows 18 index future rows 35,960 rows in all 216 underlyings 60.5 per cent of rows did not trade: open, high and low print 0.00, the close is yesterday's
Counts measured from the exchange's UDiFF derivatives bhavcopy for 18 September 2026. A company-level question, such as how active a stock's derivatives were, needs every one of its rows aggregated first, and a price question needs the untraded rows removed first.

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.

The two files side by side, 18 September 2026
 Full security bhavcopyUDiFF derivatives bhavcopy
Layout15 legacy columns, values padded with a space34 UDiFF columns with ISO style names
One row isone symbol in one seriesone contract: underlying, expiry, strike, call or put
Rows on 18 September 20263,50835,960
Untraded instrumentsabsent: every row tradedlisted: 21,748 rows, 60.5 pc
IdentifierSYMBOL and SERIES onlyFinInstrmId, unchanged for 16,566 of 16,678 contracts from 3 August
ISINnot carriedblank on all 35,960 rows
Volume unitsharescontracts
Value unitrupees lakhrupees of notional
DeliveryDELIV_QTY and DELIV_PERnone
Open interestnoneOpnIntrst, 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.

A rename seen through the file: two symbols, one security, joined by the previous close A session axis with rows for an old symbol up to session t and rows for a new symbol from session t plus one. An arc joins the last old row to the first new row, labelled with the fact that the new row's previous close equals the old row's close. Below, a symbol keyed join reads a delisting and a new listing, while a join on the price bridge or on the ISIN reads one uninterrupted security. A rename as the file records it. Schematic; the counts are in the caption. t-3t-2t-1tt+1t+2t+3 old symbol: last row at t new symbol: first row at t+1 CLOSE at t = PREV_CLOSE at t+1 Keyed on SYMBOL a delisting at t, a new listing at t+1 Keyed on the price bridge or the ISIN one security, uninterrupted
Measured in this cache: 203 of the 276 symbols last seen in EQ that stopped appearing more than a month before its end were renames, found by the price bridge or on the exchange's own symbol change list. On three rename dates checked in the UDiFF cash file, 11 of 11 renamed securities kept their ISIN.

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.

A worked, reproducible pass over one day's file
StepOperationResult on 18 September 2026
1Read sec_bhavdata_full_18092026.csv3,508 rows, 15 columns; 14 header names begin with a space
2Keep rows whose SERIES equals EQ, without stripping0 rows
3Strip every field, then keep EQ2,647 rows
4Read the dash in DELIV_QTY as missing275 dashes, all BE or BZ (248 and 27); none among EQ rows
5Sum TURNOVER_LACS over EQ, divide by 100₹1,43,660 crore
6Sum DELIV_QTY over sum TTL_TRD_QNTY, EQ44.36 pc; the median row reads 58.21
7Match to the delivery position file3,233 of 3,233 rows identical; control total 2,37,69,32,903 shares
8Split EQ by the day's derivatives listLAST 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.

Related guides

Reproducibility: publishing a result someone else can check

Read →

The real cost of a trade in India, worked to the paisa

Read →

Vectorised backtesting of Indian equities in pandas

Read →

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 →