India's tax engine has three distinctive features that the optimizer has to honour: the Securities Transaction Tax that levies a small basis-point cost on every buy and sell, the ₹1 lakh annual exemption on long-term capital gains under §112A, and the §112A(4) grandfathering provision that protects pre-31-Jan-2018 acquirers from gains accrued before the date listed-equity LTCG was reintroduced. Each shows up as first-class structure in the engine.
A flat basis-point cost on every leg of every trade
STT (Securities Transaction Tax) is collected by the exchange on every transaction in listed securities. For delivery-based equity it's currently 0.1% on both buy and sell — so 20 bp round-trip per name traded. The optimizer's holding-cost builder folds STT into the per-name turnover penalty, which means the harvest signal has to clear a higher threshold in India than in jurisdictions without a transaction tax.
| Leg | STT | Notes |
|---|---|---|
| Buy (delivery) | 0.1% | Paid by buyer |
| Sell (delivery) | 0.1% | Paid by seller |
| Intraday (sell) | 0.025% | Not used by the optimizer (no intraday) |
| F&O — futures (sell) | 0.0125% | Not used by long-only DI |
Why the optimizer treats the first ₹1L of long-term gain as zero-tax
Section 112A taxes long-term capital gains on listed equity at 10% — but only to the extent the holder's aggregate LTCG in a financial year exceeds ₹1 lakh. The first ₹1 lakh is exempt. For the optimizer, this is a piecewise tax-rate function, not a flat rate. The engine carries a per-account running tally of realised LTCG across the year and applies 0% to the first ₹1L, 10% to the excess.
The 31 January 2018 fair-market-value floor
Before April 2018, long-term capital gains on listed equity were exempt under §10(38). When LTCG was reintroduced in the 2018 Finance Act, §112A(4) grandfathered pre-existing positions: for any acquisition before 31 January 2018, the cost basis for LTCG calculation is max(historical cost, FMV on 31 Jan 2018). This protects pre-2018 holders from being taxed on gains that accrued during the exempt period.
For a lot acquired in 2010 at ₹100, with FMV on 31 Jan 2018 of ₹400, and current price ₹500 — the taxable LTCG is computed off a basis of ₹400, not ₹100. The optimizer carries both numbers and uses the right one.
The engine maintains two basis fields per pre-2018 lot: historical cost and FMV-on-31-Jan-2018. When the engine evaluates a sell, it uses the larger of the two for LTCG calculation and the historical cost for STCG (the grandfathering applies only to LTCG). Without this, harvest signals on long-tenured pre-2018 lots are systematically too aggressive.
12 months for listed equity, longer for unlisted
Listed equity crosses to long-term at 12 months. Below that the gain is short-term and taxed at 15% (§111A) plus surcharge and cess. Above 12 months the gain is long-term and taxed under §112A as described. The optimizer's tax penalty has the same step-function shape as the Australian engine, but with smaller rate magnitudes.
| Holding period | Rate | Notes |
|---|---|---|
| ≤ 12 months | 15% + surcharge + cess | §111A · STCG |
| > 12 months · first ₹1L | 0% | §112A exemption |
| > 12 months · above ₹1L | 10% + surcharge + cess | §112A |
Per-account inputs the IN tax engine consumes
- Lot history with grandfathering FMV. Per-ticker, per-acquisition-date, with both cost and (where applicable) the 31-Jan-2018 FMV.
- Running LTCG tally for the financial year. Carried on the Account record; reset on April 1.
- Marginal-rate inputs. STCG rate (incl. surcharge + cess) and LTCG rate (incl. surcharge + cess). The ₹1L exemption is applied inside the engine.
- STT rate. Hardcoded 0.1% per leg; configurable for jurisdictions that adjust.
High turnover, calendar effects, and exempted-window concentration
Three patterns show up in Indian backtests:
- Higher turnover than other jurisdictions. The combination of FIFO + the LTCG exemption + STT pushes the optimizer into more frequent rebalances — particularly around year-end when the exemption window can be absorbed before March 31.
- Pre-2018 lots are sticky. The grandfathering protects basis at 31-Jan-2018 FMV; the optimizer therefore prefers to realise post-2018 lots on gains and pre-2018 lots only when the harvest signal is decisive.
- Q4 (Jan–Mar) loss-harvest weight. The optimizer's annual-budget logic naturally concentrates harvest in Q4 to absorb the exemption and reset positions before the new financial year.
For the cross-jurisdiction comparison see the multi-jurisdiction deep-dive.
- Income Tax Act, 1961 — §10(38) (exemption pre-2018), §112A (long-term capital gains on listed equity), §111A (short-term capital gains).
- Finance (No. 2) Act, 2004 — Securities Transaction Tax provisions.
- Finance Act, 2018 — introduced §112A; the §112A(4) grandfathering protects pre-31-Jan-2018 acquisition basis.
Educational illustration · not advice. Indian tax law is amended yearly through the Finance Act; consult a chartered accountant.