Stop asking whether the strategy survives your cost estimate. Compute the cost at which it stops working.
The short answer
A trading cost has three layers. A backtest prices the first, sometimes allows for the second, and almost never models the third. On an illustrative equity round trip the statutory and brokerage charges come to 8.3 basis points, while the square root impact model, run on volatility measured from 634 trading days of real data, puts the impact of an order at one per cent of the day's turnover at 36 basis points for the same round trip, roughly 4 times the layer everyone prices. Worse, the omission is not evenly spread. Measured across 531,559 stock days, the impact index on the largest move decile is 1.33 against 0.91 on the quietest, and the share of turnover that settles to delivery falls from 51.3 to 40.8 per cent, so the extra volume that arrives on a violent day is partly the same stock changing hands again. Signals fire on violent days. The fix is not a better estimate. It is to compute the break-even cost, the all-in figure at which the strategy nets to zero, and report that instead.
Every figure below is either a published rate, verified and cited, or a number this page computes from real end of day exchange files covering 2024-04-01 to 2026-09-18: 634 sessions and 1,671 securities.
Three layers, and a price file contains one of them
The word "costs" in a backtest usually means the easiest of three things, and separating them is the whole exercise, because each needs different data and each fails differently.
The explicit charges are the statutory levies and the brokerage. Published, arithmetic, knowable exactly before the order goes in. This is the layer every retail cost article covers, and the line by line decomposition for Indian equities is worked in the real cost of an Indian trade, so it is not repeated here.
The spread is the distance between the best bid and the best offer at the moment you act, and you pay roughly half of it at each end if you cross. No daily bar file contains it. Neither does a minute bar file. It needs quote data, and a researcher who has never held quote data has never seen this number for the instruments being traded.
The impact is the price movement your own order causes while it fills, and it is what separates a research result from a live one. It depends on how large your order is against what the book can absorb, a quantity that exists nowhere in history because the order was never placed. It must be modelled, and the model carries a coefficient only live trading pins down.
| Layer | What it needs | Recoverable from a price file? | Typical treatment |
|---|---|---|---|
| Explicit charges | A published rate schedule | Yes, exactly, before the trade | Almost always modelled |
| The spread | Quote data, or a traded-price estimator | Not from any daily price file | Sometimes, usually as a flat allowance |
| Market impact | Your own order size and the book at that instant | Not from any historical file at all | Almost never modelled |
The ordering by size is the reverse of the ordering by how often they are modelled. On the illustrative round trip above, the charges come to 8.3 basis points and the modelled impact at one per cent participation to 36. A researcher who computes the charges to two decimal places and leaves impact out has been precise about the small number and has set the large one to zero.
The last traded price is a print, not an offer
The default fill in almost every home-built backtest is the close of the bar the signal fired on. Two things are wrong with that, and only one is the familiar problem of using a price the signal itself depends on.
The deeper problem is that the price is a print. It records that some quantity changed hands at that level at that instant. It does not record that your quantity could have. In Indian end of day files that is directly visible rather than philosophical, because the file publishes two prices for the end of the same session: the last traded price, and the official close, which for most securities is the volume weighted average of trades in the final half hour. Both are correct. They are not the same number.
| Liquidity decile | Median traded value, crore | Median last-trade to close gap, bp | 90th percentile of that gap, bp | Median trade size, rupees | Delivered share, per cent |
|---|---|---|---|---|---|
| 1 | 0.08 | 29.3 | 126.3 | 3,578 | 68.1 |
| 2 | 0.31 | 30.9 | 103.7 | 4,768 | 62.0 |
| 3 | 1.01 | 27.9 | 91.3 | 6,756 | 56.9 |
| 4 | 2.27 | 26.7 | 83.9 | 8,436 | 52.7 |
| 5 | 4.04 | 24.6 | 78.5 | 9,291 | 51.0 |
| 6 | 7.15 | 22.2 | 71.1 | 10,370 | 49.7 |
| 7 | 12.85 | 20.3 | 66.5 | 12,030 | 47.7 |
| 8 | 22.84 | 17.9 | 58.8 | 14,562 | 47.2 |
| 9 | 56.65 | 15.6 | 50.2 | 21,409 | 44.7 |
| 10 | 200.91 | 11.4 | 37.1 | 36,634 | 48.4 |
Read the third column down. In the busiest decile the two published prices for the same moment differ by a median of 11.4 basis points and in the quietest by 29.3, with one day in ten diverging by more than 126. That is a floor under the error in a fill assumption rather than an estimate of it, because it only measures the disagreement between two prices that both actually happened.
The fifth column is the one people find hardest to believe. The median trade in the busiest decile of this market is about 36,634 rupees, so an order of five lakh rupees there is roughly 14 median trades stacked end to end. It does not fill at one price because there was never one price to fill it at.
The close itself changed in August 2026
Here is the fact that dates most live material on this subject. The market regulator's circular of 16 January 2026 introduced a closing auction session in the equity cash segment, effective 3 August 2026 for securities that have derivative contracts available on them. It runs as a separate session at the end of the trading day, collecting orders and matching them at a single equilibrium price chosen to maximise executable volume within a band around a reference price. For those securities it replaces the volume weighted average mechanism that had determined the official close.
That matters to a cost model three ways at once. The close for the most liquid part of the market is now an auction clearing price rather than an average of the last half hour, so research that fills at the close is filling at a different construct than it was, and a series spanning the change contains both. A clearing price is also something you can submit an order into, which makes a close fill more defensible than it was, provided the order goes into the auction rather than the continuous session. And no auction prices exist in the record before August 2026, so a multi-year backtest is modelling a mechanism that applied for part of the period. For where the session boundaries sit, see the structure of Indian trading hours.
What a conservative fill assumption costs, measured
The standard conservative step is to stop filling at the signal bar and fill at the next session's opening instead. The interesting question is not whether to apply it but how much it takes, and from which trades. That is measurable. For each pair of consecutive sessions in a security, take the direction of the first day's move and measure the next morning's opening gap signed in that direction. A positive figure means the market opened further along the way the move had gone, so a signal acting on that move paid more than a fill at the previous close implied. Pairs that do not link cleanly are dropped, because a break of more than two per cent between one close and the next reference price is a corporate action rather than an overnight move.
| Universe | Securities | Linked session pairs | After a middling move, bp | After a top decile move, bp | Standard error | Ratio to its own error |
|---|---|---|---|---|---|---|
| Traded value of 5 crore a day or more | 850 | 520,764 | 1.88 | 17.50 | 0.98 | 17.9 |
| 50 crore a day or more | 272 | 168,134 | 5.44 | 14.35 | 1.73 | 8.3 |
| 200 crore a day or more | 85 | 52,728 | 9.41 | 12.49 | 3.66 | 3.4 |
Across the 850 securities trading at least five crore rupees a day, a signal acting after an ordinary move pays 1.9 basis points for the honest fill. A signal acting after a top decile move, where the median move was 5.0 per cent, pays 17.5, which is 9 times as much and 18 times its own standard error. Raising the liquidity floor shrinks it to 14.4 and then 12.5 basis points, the right direction for a liquidity effect and the control that says this is not an artefact of thin names.
Now the part that matters. The conservative fill does not take a uniform slice off every trade. It takes 1.9 basis points off the ordinary ones and 17.5 off those that followed the largest moves, and a momentum or breakout rule draws a wholly disproportionate share of its positions from that second group. The haircut lands where the backtest made its money. That is the shape of every omission in this article.
Impact is not a constant, and it peaks where the signal does
The usual reassurance about trading on violent days is that volume arrives with the volatility, so the extra liquidity offsets the extra movement. It is half true, and the square root model says which half. Under that model the impact of a fixed order scales with the instrument's volatility and with the square root of the share of the day's turnover the order represents, so a day twice as volatile carrying twice the volume is not neutral: volatility enters linearly and volume under a square root. That is a statement about the model. Whether it survives on real data is a measurement.
| Absolute move, per cent | Intraday range, bp | Turnover against its own normal | Impact index for a fixed order | Last-trade to close gap, bp | Delivered share, per cent |
|---|---|---|---|---|---|
| 0.08 | 196 | 0.81 | 0.91 | 12.1 | 51.3 |
| 0.29 | 214 | 0.81 | 0.90 | 14.9 | 49.4 |
| 0.52 | 222 | 0.82 | 0.92 | 15.1 | 49.2 |
| 0.77 | 236 | 0.84 | 0.96 | 15.6 | 48.8 |
| 1.04 | 254 | 0.88 | 1.00 | 16.1 | 48.5 |
| 1.37 | 279 | 0.93 | 1.05 | 16.8 | 48.1 |
| 1.76 | 313 | 1.01 | 1.11 | 17.5 | 47.6 |
| 2.30 | 362 | 1.15 | 1.18 | 19.0 | 46.7 |
| 3.13 | 442 | 1.37 | 1.27 | 20.9 | 45.5 |
| 5.00 | 640 | 2.36 | 1.33 | 25.6 | 40.8 |
The turnover column confirms the reassurance: on the largest move decile, volume runs at 2.36 times the security's own normal against 0.88 at the middle. The impact index, which credits that extra volume in full under the square root, still rises from 0.91 to 1.33. For the same order, the model puts impact on the days a breakout fires about 47 per cent above the quietest days, after the extra volume has been counted in full.
The delivered share column is the part no other market's end of day file lets you see: the fraction of traded quantity that settled to a demat account rather than being squared off within the session. It falls from 51.3 per cent on the quietest days to 40.8 on the most violent. So part of the extra turnover arriving on a big day is not new stock offered to absorb your order. It is the same stock changing hands again inside the session, and the consolation is smaller than the volume figure alone suggests.
| Order as a share of the day's turnover, per cent | Impact on one side, bp | Round trip, bp | Multiple of the explicit charges |
|---|---|---|---|
| 0.1 | 5.7 | 11.3 | 1.4 |
| 0.5 | 12.7 | 25.3 | 3.1 |
| 1 | 17.9 | 35.8 | 4.3 |
| 5 | 40.1 | 80.2 | 9.7 |
| 10 | 56.7 | 113.4 | 13.7 |
Against the 8.3 basis points of charges, an order at one per cent of the day's turnover carries 36 basis points of modelled round trip impact, and one at five per cent carries 80. The coefficient is arguable. That a term worth several times the charges is being carried at zero is not. And one per cent of a day's turnover is not a large order in this market.
| Order size, rupees | Above 1 per cent of turnover, per cent of names | Above 5 per cent | Above 10 per cent |
|---|---|---|---|
| 250,000 | 37.0 | 18.2 | 12.4 |
| 1,000,000 | 61.1 | 33.2 | 24.9 |
| 5,000,000 | 83.7 | 61.1 | 49.1 |
| 25,000,000 | 96.3 | 83.7 | 76.4 |
An order of five lakh rupees is more than one per cent of a normal day's turnover in 84 per cent of this universe and more than a tenth of it in 49 per cent. The participation rates in the impact table are not institutional. They are what a serious individual account reaches on the second page of any liquidity-ranked list, which is also why a strategy tested on a broad universe and traded on a narrow one is a different strategy, alongside the sampling arithmetic in how many trades it takes to tell an edge from luck.
A cost error is multiplied by turnover, so frequency is the amplifier
The sections above concern the level of costs. This one concerns the error in the level, which behaves differently and is why a small modelling mistake is decisive for one strategy and irrelevant for another. The error is paid once per round trip, so the annual damage is the error multiplied by the number of round trips and nothing else. Hold the gross edge for the year constant and vary only how it is collected.
| Round trips a year | Gross edge needed per trade, bp | Annual damage from the error, bp | Share of the gross edge consumed, per cent |
|---|---|---|---|
| 20 | 300.0 | 60 | 1.0 |
| 60 | 100.0 | 180 | 3.0 |
| 250 | 24.0 | 750 | 12.5 |
| 1,000 | 6.0 | 3,000 | 50.0 |
| 2,000 | 3.0 | 6,000 | 100.0 |
The same 3 basis point error costs the twenty trade version 60 basis points a year, being 1.0 per cent of its gross edge, and the thousand trade version 3,000 basis points, being 50 per cent of the identical gross edge. That is a factor of 50 in sensitivity between two strategies whose research results, before costs, are indistinguishable.
At two thousand round trips the error alone accounts for 100 per cent of the gross edge, which is the formal version of a familiar situation: the whole result sits inside the uncertainty of the cost model, and no amount of extra price history resolves it, because the missing quantity is not in the price history. That is why the frequency decision is a research decision rather than an execution detail. The converse is worth stating plainly: a low turnover strategy is not immune to cost errors, merely insensitive to them, and that insensitivity is one of the few free advantages in this business.
Solve for the cost that kills it, not for the strategy that survives your estimate
Everything above argues that a cost estimate is uncertain in a way historical data cannot resolve. The usual response is to pick a conservative number and hope. There is a better move, and it is the spine of this article. Do not ask whether the strategy survives your cost estimate. Ask instead: at what cost does it stop working? That number is the gross edge per round trip. It is arithmetic rather than assumption, it does not move when somebody disagrees with your cost model, and it turns an argument into a question a reader can settle.
| Gross edge per round trip, bp | Against charges only, 8.3 bp | Against charges plus a flat allowance, 18.3 bp | Against charges plus modelled impact, 44.1 bp |
|---|---|---|---|
| 15 | 1.81 | 0.82 | 0.34 |
| 25 | 3.02 | 1.37 | 0.57 |
| 40 | 4.84 | 2.19 | 0.91 |
| 60 | 7.26 | 3.28 | 1.36 |
| 100 | 12.09 | 5.47 | 2.27 |
Read the 25 basis point row. The identical strategy has 3.0 times the headroom it needs under the first model, 1.4 times under the second, and is dead under the third. Nothing about the strategy changed. The only thing that changed is which layer the researcher happened to model, and all three models are defensible. A result that flips sign across defensible assumptions has not been tested.
The break-even figure survives that. The strategy stops working at 25 basis points of all-in round trip cost, full stop. Whether the market charges more or less than that is now a question about the market rather than about your spreadsheet, and it is answerable by measurement. The last step makes it operational: under the square root model cost rises with the square root of participation, so setting that cost equal to the break-even figure and solving returns the participation rate, and therefore the order size, at which the edge is gone.
| Gross edge per round trip, bp | Break-even participation, per cent of a day's turnover | Order size at the median liquid name, rupees |
|---|---|---|
| 15 | 0.035 | 79,000 |
| 25 | 0.218 | 490,000 |
| 40 | 0.784 | 1,700,000 |
| 60 | 2.083 | 4,600,000 |
| 100 | 6.548 | 15,000,000 |
A strategy with a gross edge of 25 basis points a round trip stops working once the order exceeds about 0.22 per cent of a normal day's turnover, which at the median of the liquid subset is roughly 490,000 rupees. One with 60 basis points survives to about 2.08 per cent, or roughly 4,600,000 rupees. That is a capacity figure out of the same arithmetic, and it is what a researcher should know before deciding whether a result is worth anything at the size they intend to trade. It is also one reason two people running the same rules get different outcomes, seen from the sizing side in position sizing from first principles.
The rate card your model inherited may no longer exist
A cost model built two years ago and never revisited is wrong in both directions at once here, which is worse than being wrong in one. On the statutory side, the securities transaction tax on derivatives moved twice in eighteen months: it rose on futures and on option premium with effect from 1 October 2024, and again with effect from 1 April 2026, to 0.05 per cent on futures and 0.15 per cent on option premium. A model carrying the older figures understates that line substantially, on the sell side, which is where a derivatives strategy pays it.
On the exchange side the change was structural rather than numerical. Until 30 September 2024 the exchanges levied volume-based slab charges, so what an exchange received depended on a broker's aggregate monthly turnover across all its clients, while the client was billed a daily figure that was a billing convention rather than a pass-through. The true-to-label requirement, effective 1 October 2024, required a uniform charge structure equal for all members, and required that what is recovered from the end client match what the institution receives. The exchanges republished uniform per-unit rates to comply.
For a cost model that is the more important of the two. A slab charge is a function of somebody else's turnover, so it was never a per-trade cost and could not honestly be modelled as one. A uniform per-unit rate can be. Any model, spreadsheet or article still describing the exchange charge as broker-dependent or slab-based describes an arrangement abolished on 1 October 2024, and a figure lifted from a cost sheet of that vintage overstates some lines while the tax line understates others. Two errors of opposite sign do not cancel. They make the total unknowable without redoing it. So rebuild the explicit layer from current published rates rather than a stored constant, and treat the date of the rebuild as part of the model. Rates here move more often than the code does.
What cannot be modelled, and must be measured live
Some of this is irreducible, and naming which parts keeps a researcher from claiming precision they do not have.
The coefficient in front of the impact model. Every figure in the impact table scales directly with it, and it was set to one here and said so. It depends on the venue, the instrument, the order type and how patiently the order is worked, and it cannot be recovered from historical bars. It is estimated by comparing the price when the decision was made with the price obtained, on your own orders, over time.
Queue position and partial fills. Whether a resting order filled depends on where it sat in a queue history does not record. A backtest that fills a limit order whenever the price touched its level takes the favourable branch of that question every time, which is a bias rather than an approximation. The honest alternative is to require the price to trade through the level rather than merely to it, and to accept that this too is an approximation.
What the remainder did. An order that fills half and then chases is a different trade from the one the backtest recorded, and the cost of the second half is not the cost of the first.
Your own behaviour under a bad fill. The distance between what the rule instructed and what was actually submitted is real, usually unfavourable, and visible only if recorded at the time.
So the measurement to keep is one series: for every order, the price when the decision was made, the price obtained, the size, and that security's traded value that day. The difference between the first two, in basis points, is the second and third layers together, observed rather than modelled. It converges quickly precisely because it is observed, unlike an edge, which needs an enormous sample before it says anything. A few hundred orders give a usable distribution of realised cost against participation, and that distribution replaces every assumption on this page with a measurement of your own market.
Then the loop closes. Put the measured cost next to the break-even cost. If the measured figure sits close to it, the strategy is not marginal, it is untested, because the two numbers are inside each other's error. If it sits well below, the result has survived the only test costs can give it. What remains is judgement about whether the conditions that produced the edge still hold, which is the part no arithmetic supplies and the part the method here is built around.
Frequently asked questions
What are the three layers of a trading cost?
Explicit charges, the spread, and market impact. The charges are statutory levies and brokerage, published rates computable exactly before the trade. The spread is the distance between where you can buy and where you can sell at that instant. Impact is the price movement your own order causes while it fills. The three need entirely different data, which is why a backtest prices the first, sometimes allows for the second, and almost never models the third.
Why do so few backtests model market impact?
Because it alone depends on something absent from every historical price file: the size of your own order against the liquidity available when you trade. Charges are a published rate. The spread at least existed and can in principle be reconstructed from quote data. Impact is a counterfactual about an order never placed, so it must be modelled rather than looked up, and any such model carries a coefficient only live trading pins down.
What is wrong with filling a backtest at the last traded price?
It is one print, usually for a small quantity, at a moment you did not choose, and not a price at which your quantity could have transacted. Indian end of day files publish both the last traded price and the official close for the same security on the same day, and the two routinely differ. The divergence widens as liquidity falls and as the day's move grows, which is exactly when a signal is most likely to have fired.
What does a conservative fill assumption do to a result?
It removes the part of the result that came from a price nobody could have transacted at. The usual step is to fill at the next session's opening rather than the signal bar's close. Measured here, that step costs several times as much after a large move as after an ordinary one, so it is not a flat haircut. It falls hardest on the trades the strategy liked most.
Why is a flat per-trade cost assumption biased rather than just imprecise?
Because the error has a sign that lines up with the signal. Impact is worst when volatility is high and the book is thin, and a great many signals fire in exactly those conditions. A flat charge treats a quiet day and a violent one alike, so it understates the cost of the trades the strategy takes most eagerly. The average error is not zero, it is systematically favourable.
How does turnover amplify a cost modelling error?
The error is paid once per round trip, so the annual damage is the error multiplied by the number of round trips and nothing else. Two strategies with the same gross edge for the year, one trading twenty times and one a thousand, carry the same per-trade error to completely different effect. On the illustrative arithmetic here a three basis point error costs the first a hundredth of its gross edge and the second half of it.
What is the break-even cost and why is it better than a cost estimate?
It is the all-in cost per round trip at which the net edge reaches zero, and it equals the gross edge per trade. It is better because it assumes nothing about costs. An estimate is a guess that can be argued with. A break-even is arithmetic, and it turns the question into one a reader can settle: is the real cost of trading this above that number or below it?
Can a break-even cost be turned into a position size?
Yes, and that is what makes it operational. Under a square root model the cost rises with the square root of the share of a day's turnover your order represents, so setting that cost equal to the break-even figure and solving returns the participation rate at which the edge is gone. Multiplied by the traded value of the securities concerned, that is a rupee capacity figure to hold against your intended order size.
Which parts of the cost cannot be modelled at all?
Anything depending on how your order actually met the market: the queue position you got, how much filled before the price moved, what the remainder did, and the constant in front of any impact model. None of it is recoverable from historical bars. It has to be measured by comparing the price when you decided to trade with the price you got, on your own orders, kept as a running series.
Has anything changed recently that dates older cost models?
Two things. The regulator's circular of January 2026 introduced a closing auction session in the equity cash segment, effective 3 August 2026 for securities with derivative contracts available, replacing the last-thirty-minute volume weighted average as the way their close is determined. Separately, the true-to-label requirement effective 1 October 2024 removed the volume-based slab structure from exchange charges. A model assuming the old close or the old slabs describes arrangements that no longer apply.
How these numbers were produced. Measured figures come from 634 daily security files covering 2024-04-01 to 2026-09-18, restricted to the rolling settlement equity series, excluding securities under five rupees and any that did not trade on at least four fifths of the sessions, leaving 1,671 names ranked into liquidity deciles by median daily traded value. Move deciles use the 850 names with a median daily traded value of five crore rupees or more; every ratio is taken against that security's own median first and the deciles then summarised by median, so no single name can drive a result. The opening gap figures link consecutive sessions within a security, drop any pair whose reference price breaks by more than two per cent, sign the gap by the direction of the prior day's move, and are reported at three liquidity floors with their standard errors. Daily volatility is the Parkinson estimator applied to the measured median intraday range. Impact applies the square root model with its coefficient set to one, stated rather than fitted, so every impact figure scales linearly with that choice. Explicit charges are computed from the published rates above on a one lakh rupee per leg round trip with an illustrative flat brokerage of 20 rupees an order. All strategy edges, cost multiples and capacity figures are illustrative arithmetic, not a measurement of or a claim about any actual system.
The position is stated as at September 2026. Rates, charge structures and session mechanics in this market are revised frequently and more than one of the items above changed within the last two years. Verify each current rate against the live rulebook and exchange circulars before relying on anything here, and take advice on your own circumstances.
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. Knowing the cost at which a result stops working, rather than arguing about what the cost is, is the difference between research and a spreadsheet, and it is taught here as method.
Take the free diagnostic →