Spaces:
Running
Running
| """ | |
| Tax, brokerage, and slippage calculator for Indian equity intraday trades. | |
| Covers: brokerage (flat Rs 20), STT, exchange txn charge, GST, SEBI fee, stamp duty. | |
| """ | |
| def calculate_taxes_and_slippage( | |
| price_0930, price_1510, qty, | |
| high_0930, low_0930, high_1510, low_1510, | |
| is_short, | |
| ): | |
| """ | |
| Compute net PnL after realistic slippage and all Indian regulatory charges. | |
| Slippage model: 10% of the 1-min candle's (high - low) range, | |
| applied as an adverse fill on both entry and exit. | |
| Returns | |
| ------- | |
| (net_pnl, total_taxes, exec_buy_price, exec_sell_price) | |
| """ | |
| slip_0930 = (high_0930 - low_0930) * 0.10 | |
| slip_1510 = (high_1510 - low_1510) * 0.10 | |
| if not is_short: | |
| # LONG: Buy at 09:30 (ask penalty), Sell at 15:10 (bid penalty) | |
| actual_buy_price = price_0930 + slip_0930 | |
| actual_sell_price = price_1510 - slip_1510 | |
| else: | |
| # SHORT: Sell at 09:30 (bid penalty), Buy-to-cover at 15:10 (ask penalty) | |
| actual_sell_price = price_0930 - slip_0930 | |
| actual_buy_price = price_1510 + slip_1510 | |
| buy_turnover = actual_buy_price * qty | |
| sell_turnover = actual_sell_price * qty | |
| total_turnover = buy_turnover + sell_turnover | |
| brokerage = 20.0 | |
| stt = sell_turnover * 0.00025 | |
| exc_txn_charge = total_turnover * 0.0000325 | |
| gst = (brokerage + exc_txn_charge) * 0.18 | |
| sebi_fee = total_turnover * 0.000001 | |
| stamp_duty = buy_turnover * 0.00003 | |
| total_taxes = brokerage + stt + exc_txn_charge + gst + sebi_fee + stamp_duty | |
| gross_pnl = (actual_sell_price - actual_buy_price) * qty | |
| net_pnl = gross_pnl - total_taxes | |
| return net_pnl, total_taxes, actual_buy_price, actual_sell_price | |