Place an MIS limit order
order_id = kite.place_order(
variety="regular",
exchange="NSE",
tradingsymbol="INFY",
transaction_type="BUY",
quantity=10,
product="MIS",
order_type="LIMIT",
price=1470.00,
validity="DAY",
)
Combines chapter 46's limit-price mechanics with chapter 48's intraday-leverage-and-mandatory-close mechanics.
Why intraday traders often prefer limit over market for entries
Intraday strategies frequently trade on tight margins per trade — a few ticks of slippage from a market order can be a meaningful fraction of the expected edge. A limit order at or near the current best price avoids paying the spread on entry, at the cost of not being guaranteed a fill (chapter 46's three-outcome breakdown applies).
IOC validity is common for intraday limit entries
order_id = kite.place_order(
variety="regular", exchange="NSE", tradingsymbol="INFY",
transaction_type="BUY", quantity=10, product="MIS",
order_type="LIMIT", price=1470.00, validity="IOC",
)
validity="IOC" fills whatever portion is immediately available at your limit price and cancels the rest instantly, rather than resting on the book for the whole day. Use this when your strategy logic wants an immediate answer (filled or not) rather than a pending order sitting around that might fill much later under different market conditions than when you decided to enter.
Check pending-quantity, not just order status, after an IOC order
def get_ioc_fill_result(kite, order_id: str) -> dict:
history = kite.order_history(order_id)
latest = history[-1]
return {
"filled": latest["filled_quantity"],
"cancelled_remainder": latest["quantity"] - latest["filled_quantity"],
"status": latest["status"],
}
An IOC order commonly ends in status: CANCELLED with a non-zero filled_quantity — that's a *partial success*, not a failure. Don't treat CANCELLED status as "nothing happened" without checking filled_quantity first.