Indian Market Specifics
Subject: Stock-Market · Chapter: Indian Market Specifics Time Limit: 90 minutes · Total Marks: 60
Instructions: Answer all three questions. Show every computation step. Where code is requested, write clean, runnable Python. Use current Indian regulatory conventions (FY 2024-25) unless the question states otherwise. State all assumptions explicitly.
Question 1 — Full-Cost Transaction Engine (Build + Derive) [22 marks]
A trader executes the following on NSE in the equity delivery and equity intraday segments:
- Trade A (Delivery): Buy 200 shares of RELIANCE at , sell all 200 after 8 months at .
- Trade B (Intraday): Buy 500 shares of TCS at , sell same day at .
Charge conventions (FY 2024-25) you must apply:
- STT: Delivery — on both buy and sell turnover. Intraday — on the sell side only.
- Exchange transaction charge (NSE): of turnover (both legs).
- SEBI turnover fee: per crore (i.e. ) of turnover (both legs).
- Stamp duty: Delivery — on buy side. Intraday — on buy side.
- GST: on (brokerage + exchange transaction charge + SEBI fee).
- Brokerage: Delivery — . Intraday — per leg, capped at per executed order.
(a) Build a Python function trade_cost(buy_val, sell_val, segment) that returns a dict of every individual charge plus the total. Then invoke it for Trade A and Trade B. [10]
(b) Compute by hand the total charges for Trade B (intraday) to precision, showing each component. [6]
(c) Derive a symbolic expression for the break-even price move (per share, as a fraction of buy price ) required for an intraday round trip on quantity to cover all costs, ignoring brokerage caps. State clearly which charges scale with turnover and which are fixed. [6]
Question 2 — Capital-Gains, Grandfathering & Dividend Optimisation (Prove + Compute) [20 marks]
An investor holds shares of INFY:
- Bought 300 shares on 10-Jan-2017 at .
- Closing price on 31-Jan-2018 (grandfathering date) was .
- Sold all 300 on 20-Jun-2024 at .
- During holding, received a dividend of /share once in FY 2023-24.
(a) State the LTCG grandfathering rule as an algorithm: given (actual cost , FMV on 31-Jan-2018 , sale price ), define the cost of acquisition used for LTCG. Then prove that under this rule the taxable gain is always and — i.e. show grandfathering never increases tax versus using actual cost. [7]
(b) Compute the LTCG for this sale, apply the lakh exemption (FY 2024-25) and the LTCG rate. Give the final tax. [7]
(c) The investor is in the slab. Explain the taxation of the /share dividend and compute the tax on it. Then argue quantitatively whether it is tax-efficient to hold for dividends vs. sell before record date for capital gain, given the differing rates. [6]
Question 3 — F&O Business Income, Turnover, Audit & Ban Period (Cross-domain) [18 marks]
A trader runs an F&O book on NIFTY and BANKNIFTY weekly options for FY 2024-25. Aggregate results:
- Sum of absolute profits across all F&O trades: .
- Sum of absolute losses across all F&O trades: .
- Total premium received on options written (sold): .
- Net actual profit for the year: .
(a) Using the current ICAI-accepted method, compute the F&O trading turnover for tax purposes and state precisely which components enter it. Write a Python one-liner expression evaluating it. [6]
(b) Given the turnover from (a), determine whether a tax audit under Sec 44AB is triggered. State the turnover thresholds and the digital-transaction condition ( rule), and conclude. [6]
(c) A single stock (say XYZ) enters the F&O ban period. Explain the trigger (MWPL threshold), what positions are permitted during a ban, and the penalty for increasing OI. Separately, contrast this with a circuit filter and explain why index F&O (NIFTY/BANKNIFTY) never enters a stock-style ban. [6]
End of paper.
Answer keyMark scheme & solutions
Question 1
(a) Code [10]
def trade_cost(buy_val, sell_val, segment):
seg = segment.lower()
turnover = buy_val + sell_val
if seg == "delivery":
stt = 0.001 * buy_val + 0.001 * sell_val # both legs
stamp = 0.00015 * buy_val # buy only
brokerage = 0.0
elif seg == "intraday":
stt = 0.00025 * sell_val # sell only
stamp = 0.00003 * buy_val # buy only
brokerage = min(0.0003 * buy_val, 20) + min(0.0003 * sell_val, 20)
else:
raise ValueError("segment must be delivery/intraday")
exch = 0.0000297 * turnover # both legs
sebi = 0.000001 * turnover # ₹10/crore
gst = 0.18 * (brokerage + exch + sebi)
total = stt + stamp + brokerage + exch + sebi + gst
return {"stt": round(stt,2), "stamp": round(stamp,2),
"brokerage": round(brokerage,2), "exchange": round(exch,2),
"sebi": round(sebi,2), "gst": round(gst,2),
"total": round(total,2)}
# Trade A: buy 200*2450=490000, sell 200*2690=538000
print(trade_cost(490000, 538000, "delivery"))
# Trade B: buy 500*3800=1900000, sell 500*3845=1922500
print(trade_cost(1900000, 1922500, "intraday"))Marks: correct STT logic per segment (2), stamp only on buy (1), brokerage cap logic (2), exchange+SEBI both legs (2), GST base excludes STT/stamp (2), correct invocation values (1).
Trade A values: buy , sell , turnover .
- STT
- Stamp
- Exch
- SEBI
- GST
- Total
(b) Trade B hand computation [6]
Buy ; Sell ; Turnover .
| Charge | Calculation | Value |
|---|---|---|
| STT (sell only) | ||
| Stamp (buy) | ||
| Brokerage | ||
| Exchange | ||
| SEBI | ||
| GST | ||
| Total | sum |
(1 mark each row; brokerage cap correctly hit both legs earns the key insight.)
(c) Break-even derivation [6]
Let buy price , quantity , sell price . Turnover-scaling charges (fraction of turnover):
- STT (sell): rate on sell turnover.
- Exchange , SEBI on both legs.
- Stamp on buy only.
- Brokerage (ignoring cap): per leg.
- GST applied on .
Gross P&L . Total costs (small , approximate both legs' turnover ):
Break-even requires gross cost:
Numerically: . Sum . (Fixed vs scaling: all listed scale with turnover; brokerage becomes fixed once cap binds, which is why large tickets break even on smaller moves.)
Marks: identify scaling charges (2), correct GST placement (2), assembled inequality (2).
Question 2
(a) Grandfathering rule + proof [7]
Algorithm for cost of acquisition (Sec 55(2)(ac)):
- Let — FMV capped at sale price.
- Then . Taxable LTCG (if ).
Proof grandfathering never increases tax vs. actual cost: Gain under rule . Since nothing forces : because , we have . Hence taxable gain . Also, when (price rose before 31-Jan-18), shelters the pre-2018 appreciation , so gain whenever . Thus the rule exempts gains accrued up to 31-Jan-2018.
Marks: correct 3-step (3), inequality gain (2), grandfathering-exempts-pre-2018 argument (2).
(b) LTCG computation [7]
, qty .
- per share
- Gain/share
- Total LTCG
- Exemption ⇒ taxable
- Tax (plus cess ⇒ ).
Marks: correct (2), gain (2), apply exemption (2), tax / (1). Holding months on listed equity ⇒ LTCG confirmed.
(c) Dividend taxation [6]
Since FY 2020-21 dividends are taxed in the investor's hands at slab rate (DDT abolished). Dividend ; at (+cess) tax (+cess ). TDS ( here since threshold is borderline; so TDS applies, adjustable).
Efficiency argument: Dividend income taxed at vs LTCG at (or STCG ). A dividend of costs in tax while the share price typically drops ex-date. If instead sold before record date, that value realises as capital gain taxed at (long-term) — far lower. Hence for a high-slab investor realising as LTCG is more tax-efficient than receiving the dividend, by roughly saved. (Ignoring transaction costs and market timing.)
Marks: slab-rate rule + abolition of DDT (2), tax (2), quantitative efficiency comparison (2).
Question 3
(a) F&O turnover [6]
ICAI Guidance Note (current view): absolute profit method. Turnover = sum of absolute profits + sum of absolute losses. Premium on options sold is NOT separately added under the revised 2023 guidance (older method added it; state assumption).
Python: turnover = 4200000 + 3850000 → 8050000.
Marks: absolute-profit+absolute-loss method (3), value lakh (2), note premium excluded under revised guidance (1).
(b) Tax audit [6]
Sec 44AB thresholds (FY 2024-25):
- Standard: turnover crore.
- Enhanced crore limit if cash receipts and payments each of totals (digital condition). F&O is fully digital, so rule satisfied ⇒ threshold crore applies.
Turnover lakh crore crore ⇒ no audit under 44AB on turnover. Caveat: If opting out of 44AD presumptive after previously using it, or if declaring profit and total income exceeds basic exemption, 44AB(e) audit may apply. Here net profit L on L turnover — below , so if not using presumptive and income exemption, audit could be required under 44AB(e). Conclusion: no turnover-based audit; check the 44AD/44AB(e) low-profit clause.
Marks: ₹1cr & ₹10cr thresholds (2), 95% digital rule (2), correct conclusion with 44AB(e) caveat (2).
(c) Ban period vs circuit filter [6]
F&O ban (MWPL): A stock enters ban when aggregate open interest (OI) across all F&O contracts exceeds 95% of Market-Wide Position Limit (MWPL). During ban, traders may only reduce/close existing positions — no new positions increasing OI. Penalty for increasing OI in ban: exchange penalty (typically 1% of increased position value, min ₹5000–₹1,00,000). Stock exits ban when OI falls below 80% MWPL. (Trigger 3, permitted-positions 1.)
Circuit filter: a price band (e.g. ±5/10/20%) halting trading in the underlying when price moves too far in a session — unrelated to OI; it protects against price manipulation/panic. (1)
Why index F&O never bans: Indices (NIFTY/BANKNIFTY) have no single-issuer MWPL — position limits are set per-client/market but there is no company-level free-float constraint, so the MWPL-based ban mechanism (designed to prevent cornering a stock) does not apply. (1)
[
{"claim":"Trade B intraday total charges = 723.30",
"code