CNC vs MIS vs NRML
"Product" tells the broker/exchange how long you intend to hold a position and how margin/settlement should treat it. Getting this wrong on an order either causes a rejection or, worse, an unintended auto-square-off.
| Product | Segment | Meaning | Auto square-off |
|---|---|---|---|
| CNC (Cash and Carry) | Equity delivery | You intend to hold past today — full payment, shares go to demat | No auto square-off |
| MIS (Margin Intraday Square-off) | Equity/F&O intraday | Position must close same day — broker gives extra leverage | Yes, forced square-off ~15-20 min before close (broker-specific, e.g. 3:20 PM) |
| NRML (Normal) | F&O carry-forward | Futures/options held overnight, margin-based, no intraday leverage bump | No (until expiry, or margin shortfall triggers RMS action) |
Practical implications for a bot
- CNC requires full funds upfront (no leverage) — use for anything you want to actually own past today.
- MIS gives leverage (often 3-5x for equity, varies by broker/stock) but will be force-closed by the broker's RMS near end of day regardless of your own square-off logic. If your bot's square-off routine (chapter 70) is late or crashes, the broker closes it for you — at whatever price is available, not necessarily favorable.
- NRML is required for any F&O position you intend to carry past the trading day. Placing an F&O order as MIS when you meant to hold overnight will get it auto-closed at end of day, silently defeating your strategy.
def choose_product(intraday: bool, segment: str) -> str:
if segment == "equity":
return "MIS" if intraday else "CNC"
return "MIS" if intraday else "NRML" # F&O
Checklist before every order
Ask explicitly: *is this position meant to survive today's close?* The answer picks the product code — don't hardcode one product type across an entire bot if it serves both intraday and swing strategies.