Zerodha charges zero brokerage on equity delivery. That is the headline, it is true, and it is close to irrelevant.
A delivery round trip on NSE still costs roughly 0.22% of the value traded before a single rupee of brokerage, before slippage, and before you have made any decision about which stock to buy. Run a twenty-stock portfolio with a monthly rebalance and that becomes about 0.85% a year on ₹5 lakh of capital, and about 1.59% a year on ₹1 lakh. Same rules. Same trades. Same stocks. The gap comes almost entirely from one flat fee that does not care how much money you have.
Most backtests model none of this, or model it as one flat percentage, which is a different way of getting it wrong. Here is what is actually charged, and what leaving it out does to your numbers.
The seven layers
An Indian equity delivery trade attracts seven separate charges. They differ in who levies them, which leg they hit, and whether they scale with the size of the trade.
| Charge | On buy | On sell | Basis | Set by |
|---|---|---|---|---|
| Brokerage | Yes | Yes | Zero, flat per order, or percent | Your broker |
| Securities Transaction Tax | Yes | Yes | Percent of turnover | Finance Act |
| Exchange transaction charge | Yes | Yes | Percent of turnover | NSE / BSE |
| SEBI turnover fee | Yes | Yes | Percent of turnover | SEBI |
| Stamp duty | Yes | No | Percent of turnover | Indian Stamp Act |
| GST | Yes | Yes | Percent of brokerage plus fees | GST law |
| DP charge | No | Yes | Flat, per scrip, per day | Depository and broker |
Two of those seven do something a percentage cannot. Stamp duty is asymmetric, hitting only the buy leg. The DP charge is flat, which means its weight in your bill is inversely proportional to your position size.
The rest of this post is mostly about those two.
Securities Transaction Tax
STT is the largest single component of a delivery trade, and it is charged on both legs. NSE’s tax circular effective 1 April 2026 lists the rate for a delivery-settled equity purchase at 0.1%, payable by the purchaser, and 0.1% on the delivery-settled sale, payable by the seller (NSE circular NSE/FATAX/73524, 31 March 2026, checked 1 August 2026).
That is 0.2% on a round trip, which is roughly 90% of the statutory bill. Any conversation about costs on a delivery strategy is mostly a conversation about STT.
The rate is set by the Finance Act and has changed before. It stood at 0.125% a side until 2013. If your backtest runs from 2010, applying today’s rate across the whole window understates the early years.
Exchange transaction charges
NSE levies a charge per lakh of traded value on each side, revised periodically by circular. The current schedule, effective 1 March 2026, puts the total outflow for the cash market at ₹307 per crore of traded value each side, being ₹306.99 in transaction charges plus ₹0.01 towards the NSE Investor Protection Fund Trust (NSE circular NSE/FA/73061, 27 February 2026, checked 1 August 2026). That works out to 0.00307% of turnover.
Since October 2024 this has been a single uniform rate rather than a volume-tiered slab, following SEBI’s circular requiring market infrastructure institution charges to be equal for all members. Before that, what you paid depended partly on how much business your broker did.
SEBI turnover fee
SEBI collects a regulatory fee on turnover, passed through by the broker. Broker charge sheets publish it as ₹10 per crore, or 0.0001%, on non-debt securities (Zerodha charge list, checked 1 August 2026).
It is the smallest line on the bill by a wide margin. Include it for completeness and then stop thinking about it.
Stamp duty
Stamp duty is where the asymmetry starts. It is charged on the buy side only, at 0.015% of turnover for delivery-based equity, per published broker charge sheets (Zerodha charge list, checked 1 August 2026).
The one-sided treatment is deliberate. Before July 2020 stamp duty on securities was payable by both parties, at rates that varied by state. The Finance Act 2019 amendments to the Indian Stamp Act, 1899 replaced that with a single central rate collected by the exchange or clearing corporation, levied on one side only, and shared with the state where the buyer is domiciled (Ministry of Finance press release, 30 June 2020).
For a backtest that spans 2015 to today, this is a genuine regime change sitting in the middle of your window.
GST
Goods and Services Tax applies at 18% to the sum of brokerage, exchange transaction charges and SEBI turnover fees (Zerodha charge list, checked 1 August 2026). It does not apply to STT or to stamp duty, which are taxes rather than services.
At a zero-brokerage broker the GST base is tiny, so GST contributes about 0.0006% per leg. At a full-service broker charging 0.5% brokerage, GST adds 18% on top of that brokerage, which is no longer a rounding error.
DP charges
This is the one that breaks percentage thinking.
When you sell shares, they leave your demat account, and the depository and your Depository Participant both charge for that debit. The fee is flat. Zerodha publishes ₹15.34 per scrip, made up of ₹3.50 to CDSL, ₹9.50 to the broker and ₹2.34 of GST (Zerodha charge list, checked 1 August 2026). Other brokers publish their own figure, and you should read your own charge sheet rather than assume this one.
Two properties matter. It is charged per scrip per day, not per share and not per order, so selling 10 shares and selling 10,000 shares of HDFCBANK on the same day cost the same. And it is charged on the sell side only, because nothing leaves your demat account when you buy.
A flat fee on a ₹2,50,000 position is 0.006% of the trade. The same flat fee on a ₹5,000 position is 0.31%, which is fifty times heavier. Nothing about your strategy changed. Only your position size did.
What it costs a real portfolio
Take a twenty-stock portfolio, equal weight, monthly rebalance, with 25% turnover at each rebalance so five names get replaced each month. That is sixty round trips a year. Assume the statutory rates above with zero brokerage and Zerodha’s DP charge.
The arithmetic below is illustrative. It uses verified rates but an assumed turnover pattern, and it is not the result of any backtest.
| Capital | Position size | Percentage charges | DP charges | Total per year | As % of capital |
|---|---|---|---|---|---|
| ₹1,00,000 | ₹5,000 | ₹667 | ₹920 | ₹1,588 | 1.59% |
| ₹5,00,000 | ₹25,000 | ₹3,337 | ₹920 | ₹4,258 | 0.85% |
| ₹50,00,000 | ₹2,50,000 | ₹33,372 | ₹920 | ₹34,293 | 0.69% |
The DP column is identical in all three rows, because it is sixty sells times a flat fee. What changes is what it represents: 58% of the total bill at ₹1 lakh, 22% at ₹5 lakh, and under 3% at ₹50 lakh.
The percentage components behave the way you expect and are effectively a constant drag of 0.67% a year regardless of capital. The flat component is what makes a small account structurally more expensive to run than a large one on identical rules.
Now push turnover instead of capital. At 100% turnover per month, all twenty names replaced every rebalance, the ₹5 lakh portfolio pays roughly ₹17,030 a year, or 3.41% of capital. Same universe, same position sizing, four times the turnover, four times the bill.
What that does to your reported CAGR
Costs are a straight subtraction from the annual return, and the damage is in the compounding.
Assume a gross CAGR of 16% over fifteen years on ₹5 lakh. Gross, the terminal value is about ₹46.3 lakh. Net of the 0.85% annual cost drag, the same strategy ends at about ₹41.5 lakh. A smaller account running the identical rules pays 1.59% and keeps proportionally less again.
Roughly a tenth of your terminal wealth, on a figure that never appears anywhere in a gross backtest. And 16% gross is a generous assumption. On a strategy with a 9% gross CAGR, a 3.4% cost drag from high turnover removes more than a third of the return.
This is the specific reason a high-turnover strategy can look excellent on paper and fail in an account. The signal can be entirely real. The arithmetic underneath it is what decides whether you get to keep any of it.
The parameters that actually move the bill
Four things control your cost, in descending order of leverage.
Turnover dominates. Every percentage component and the DP charge are per-trade, so halving your rebalance frequency roughly halves the bill. This is the single largest lever available to you, and unlike expected return it is fully under your control.
Position size decides how much the flat component hurts. Twenty names on ₹1 lakh means ₹5,000 positions and a DP charge worth 0.31% of every sell. Ten names on the same capital halves that, at the cost of concentration.
Broker choice matters less than most people assume for delivery, because STT swamps brokerage at a discount broker. It matters a great deal at a full-service broker charging a percentage, where brokerage plus GST on it can exceed everything else combined.
Which leg you are on is worth knowing when you compare strategies. The buy leg carries stamp duty, so a buy costs about 0.119% against about 0.104% on a sell before the DP charge. The sell leg carries the DP charge, so on small positions the sell is far more expensive in practice.
Where cost modelling goes wrong
A single flat percentage misprices both ends. If you model costs as, say, 0.25% a side, you are simultaneously overcharging your ₹2.5 lakh positions and undercharging your ₹5,000 ones. The error is not random. It biases you toward strategies that hold many small positions, which is precisely the shape that suffers most in reality.
Today’s rate card applied to 2010 is a lookahead error of a sort. STT was 0.125% a side until 2013. Zero-brokerage delivery did not exist at scale before the discount brokers arrived. Stamp duty was state-varying and two-sided until 2020. A backtest that applies 2026 charges to a 2010 trade is testing a world that did not exist, in the direction that flatters you.
Costs interact with optimisation, badly. Run a parameter sweep on gross return and it will reliably prefer more trading, because more trading captures more of a real signal. Run the same sweep on net return and the answer often flips. If you optimise gross and then apply costs afterwards, you have selected the parameter set most exposed to the thing you ignored. That is a species of overfitting with a specific mechanism.
Statutory cost is the floor, not the total. Every number in this post is a published rate charged the same way to everyone. Slippage is separate, it is often larger, and it does not appear on any circular. A strategy that survives its charge stack can still die on execution, which is the subject of why your live fills are worse than your backtest’s.
Capital gains tax is not in this list. Nothing above is income tax. Short-term and long-term capital gains sit on top, they depend on your holding period and your personal situation, and a portfolio backtest does not model them.
How saral.money handles this
Every backtest run dialog carries a broker selector. Pick one and the engine applies that broker’s real equity-delivery charge stack, modelled as a time series so a trade in 2013 gets 2013’s STT rate and a trade today gets today’s. Brokerage, STT, exchange and SEBI fees, stamp duty, GST and the flat DP charge are computed per order, on the correct leg, at the rate in force on that date. Choose Manual instead and you enter flat buy and sell commission rates yourself, which is useful when you want a deliberately pessimistic assumption rather than an accurate one. Slippage stays a separate configurable input either way, because it is a different kind of cost. The features page covers the rest of the engine’s execution model.
The experiment worth running first: take any strategy you already believe in, run it with the broker cost model on, then halve the rebalance frequency and run it again. The difference between those two curves is the price of your turnover, quoted in the only unit that matters.
Further reading
- Backtesting trading strategies: a practical guide for the wider set of things a backtest can get wrong
- Backtesting an intraday strategy honestly for the intraday charge stack, which is materially cheaper and traded far more often
- Glossary: Securities Transaction Tax, turnover, slippage, CAGR
- Browse the strategy templates and compare a monthly rebalance against a quarterly one on the same universe