🚀 Try the Interactive Brokerage Calculator: Want to calculate exact breakeven prices and compare transaction costs across Finvasia Shoonya, Zerodha, Groww, and Angel One? Use our instant tool: Launch the Indian Brokerage & STT Calculator.
When you buy and sell shares or derivatives on Indian exchanges (NSE and BSE), your final profit or loss rarely matches the raw price difference between your buy and sell orders.
Every evening, your stockbroker sends an official Contract Note itemizing a bewildering array of statutory fees: Securities Transaction Tax (STT), Exchange Transaction Charges, SEBI Turnover Fees, Stamp Duty, and 18% Goods and Services Tax (GST).
For algorithmic traders and high-frequency retail scalpers executing dozens of orders per session, these frictional costs can quietly consume 20% to 50% of gross trading profits.
In this deep-dive guide, we unpack the exact mathematical formulas behind Indian stock market charges across every segment, explore the real-world difference between traditional discount brokers and true zero-brokerage models, and implement a complete, production-grade calculation engine in Java.
The Complete Indian Stock Market Charges Flowchart
When you execute a trade, charges are levied by five distinct governing and operational bodies:
Let us examine each component in detail.
1. Securities Transaction Tax (STT / CTT)
The Securities Transaction Tax (STT) was introduced in the 2004 Union Budget to curb tax evasion on capital gains. It is direct tax collected automatically by the broker and remitted directly to the Central Government of India.
STT rates vary dramatically depending on whether you hold shares for delivery, square off intraday, or trade derivatives:
| Segment | Rate | Applied On | Buy or Sell Side |
|---|---|---|---|
| Equity Delivery (Cash) | 0.10% (100 bps) | Total Turnover (Price × Qty) | Both Buy & Sell |
| Equity Intraday (Cash) | 0.025% (25 bps) | Total Turnover | Sell Side Only |
| Futures (Equity & Index) | 0.02% (20 bps) | Total Contract Turnover | Sell Side Only |
| Options (Equity & Index) | 0.10% (100 bps) | Premium Turnover (Premium × Qty) | Sell Side Only |
[!IMPORTANT] Options STT Clarification: In options trading, STT is calculated strictly on the traded option premium, NOT on the underlying strike price. For example, selling 1 lot (75 qty) of Nifty Call options at ₹100 premium generates a premium turnover of 75 × ₹100 = ₹7,500. The STT at 0.1% is ₹7.50.
2. Exchange Transaction Charges
Both the National Stock Exchange (NSE) and Bombay Stock Exchange (BSE) charge an infrastructure access fee for routing orders through their matching engines:
- NSE Cash (Equity): ~0.00297% (₹2.97 per lakh of turnover on both Buy and Sell).
- NSE Equity Futures: ~0.00173% (₹1.73 per lakh of turnover).
- NSE Equity Options: ~0.03503% (calculated on the option premium turnover).
3. SEBI Turnover Charges
The Securities and Exchange Board of India (SEBI) imposes a uniform regulatory fee across all exchanges:
- Rate: ₹10 per crore (₹10 / 10,000,000 = 0.0001%).
- Applicable To: All segments, on both Buy and Sell turnover.
4. Stamp Duty
Under the Indian Stamp Act, stamp duty is collected by the clearing corporation and disbursed to the trader’s home state government. Stamp duty is levied exclusively on the BUY turnover:
- Equity Delivery: 0.015% (₹1,500 per crore).
- Equity Intraday: 0.003% (₹300 per crore).
- Futures: 0.002% (₹200 per crore).
- Options: 0.003% (₹300 per crore on premium).
5. Goods and Services Tax (GST)
GST in India is levied at 18%. A common beginner misconception is that GST is charged on your stock turnover or capital gains. It is not.
GST is levied strictly on services provided:
Notice that STT and Stamp Duty are government taxes, so GST is not levied on STT or Stamp Duty.
Discount Brokers vs. True Zero-Brokerage: The Annual Impact
Most modern discount brokers (Zerodha, Groww, Angel One) charge:
- ₹20 or 0.03% (whichever is lower) for Intraday.
- Flat ₹20 per executed order for Futures & Options.
In contrast, zero-brokerage brokers like Finvasia Shoonya charge ₹0 brokerage across Cash Delivery, Intraday, Futures, and Options.
Concrete Example: 5 Options Trades Per Day
Assume an active derivative trader executes 5 round-trip option trades (10 executed orders: 5 buys, 5 sells) daily over 250 trading sessions per year:
By eliminating brokerage fees, an algorithmic options trader saves ₹59,000 each year in non-statutory overhead, regardless of whether their trading strategies finish positive or negative.
Production Java Implementation: BrokerageEngine.java
Here is a clean, runnable Java class that calculates the exact statutory tax breakdown, gross profit, net profit, and breakeven point per share:
package com.thoughtstopen.algo.tax;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* Production-ready Indian Stock Market Transaction Tax & Brokerage Engine.
*/
public final class BrokerageEngine {
public enum Segment {
DELIVERY, INTRADAY, FUTURES, OPTIONS
}
public enum Broker {
SHOONYA_ZERO, ZERODHA_DISCOUNT
}
public record TaxBreakdown(
double buyTurnover,
double sellTurnover,
double totalTurnover,
double brokerage,
double stt,
double exchangeCharges,
double sebiCharges,
double stampDuty,
double gst,
double totalTaxes,
double grossPnl,
double netPnl,
double breakevenPerShare
) {}
public static TaxBreakdown calculate(
Segment segment,
Broker broker,
double buyPrice,
double sellPrice,
int quantity) {
double buyTurnover = buyPrice * quantity;
double sellTurnover = sellPrice * quantity;
double totalTurnover = buyTurnover + sellTurnover;
double grossPnl = sellTurnover - buyTurnover;
// 1. Brokerage
double brokerage = 0.0;
if (broker == Broker.ZERODHA_DISCOUNT) {
if (segment == Segment.INTRADAY) {
brokerage = Math.min(20.0, buyTurnover * 0.0003) + Math.min(20.0, sellTurnover * 0.0003);
} else if (segment == Segment.FUTURES || segment == Segment.OPTIONS) {
brokerage = 40.0; // ₹20 buy + ₹20 sell
}
} // Shoonya is 0.0 across all segments
// 2. STT
double stt = switch (segment) {
case DELIVERY -> totalTurnover * 0.001; // 0.1% buy & sell
case INTRADAY -> sellTurnover * 0.00025; // 0.025% sell
case FUTURES -> sellTurnover * 0.0002; // 0.02% sell
case OPTIONS -> sellTurnover * 0.001; // 0.1% on premium sell
};
// 3. Exchange Charges (NSE)
double excRate = switch (segment) {
case DELIVERY, INTRADAY -> 0.0000297;
case FUTURES -> 0.0000173;
case OPTIONS -> 0.0003503;
};
double exchangeCharges = totalTurnover * excRate;
// 4. SEBI Turnover Charges (₹10 per crore)
double sebiCharges = totalTurnover * 0.000001;
// 5. Stamp Duty (Buy side only)
double stampRate = switch (segment) {
case DELIVERY -> 0.00015;
case INTRADAY, OPTIONS -> 0.00003;
case FUTURES -> 0.00002;
};
double stampDuty = buyTurnover * stampRate;
// 6. GST (18% on Brokerage + Exchange + SEBI)
double gst = (brokerage + exchangeCharges + sebiCharges) * 0.18;
double totalTaxes = brokerage + stt + exchangeCharges + sebiCharges + stampDuty + gst;
double netPnl = grossPnl - totalTaxes;
double breakevenPerShare = totalTaxes / quantity;
return new TaxBreakdown(
round(buyTurnover), round(sellTurnover), round(totalTurnover),
round(brokerage), round(stt), round(exchangeCharges),
round(sebiCharges), round(stampDuty), round(gst),
round(totalTaxes), round(grossPnl), round(netPnl),
round(breakevenPerShare)
);
}
private static double round(double val) {
return BigDecimal.valueOf(val).setScale(2, RoundingMode.HALF_UP).doubleValue();
}
public static void main(String[] args) {
// Example: Intraday trade of 100 shares of Reliance (Buy 2900, Sell 2920)
TaxBreakdown shoonya = calculate(Segment.INTRADAY, Broker.SHOONYA_ZERO, 2900, 2920, 100);
TaxBreakdown zerodha = calculate(Segment.INTRADAY, Broker.ZERODHA_DISCOUNT, 2900, 2920, 100);
System.out.println("=== Reliance Intraday Trade (100 Shares) ===");
System.out.println("Gross PnL : ₹" + shoonya.grossPnl());
System.out.println("Shoonya Net PnL : ₹" + shoonya.netPnl() + " (Taxes: ₹" + shoonya.totalTaxes() + ")");
System.out.println("Zerodha Net PnL : ₹" + zerodha.netPnl() + " (Taxes: ₹" + zerodha.totalTaxes() + ")");
System.out.println("Shoonya Advantage: ₹" + (shoonya.netPnl() - zerodha.netPnl()) + " saved!");
}
}
Conclusion & Actionable Takeaways
Understanding your cost breakdown is essential for consistent trading profitability:
- Always calculate your breakeven spread: High-frequency trades with narrow target margins (e.g. 0.20% gain) can easily be wiped out by delivery STT or flat order charges.
- Account for GST on services: Every rupee in broker and exchange fees incurs an additional 18% tax.
- Audit your contract notes monthly: Ensure your broker accurately credits STT and exchange fee adjustments.
To run real-time simulations for your own portfolio and trade setups, visit our free Indian Stock Brokerage & STT Calculator.