Place Multi Order¶
multi_order() places multiple independent orders in one request. Use it when you want to submit several standard orders together without using the flexi basket workflow.
LLM guidance
Use this page for multiple independent orders submitted together, where each order still uses its own single-order payload and ref_id. Do not use this page for basket-level F&O strategies with shared basket parameters. For those workflows, use Place Flexi Order.
Basic Usage¶
from nubra_python_sdk.start_sdk import InitNubraSdk, NubraEnv
from nubra_python_sdk.trading.trading_data import NubraTrader
nubra = InitNubraSdk(NubraEnv.UAT, env_creds=True)
trader = NubraTrader(nubra, version="V2")
result = trader.multi_order([
{
"ref_id": 12345,
"order_type": "ORDER_TYPE_REGULAR",
"order_qty": 1,
"order_side": "ORDER_SIDE_BUY",
"order_delivery_type": "ORDER_DELIVERY_TYPE_CNC",
"validity_type": "DAY",
"price_type": "LIMIT",
"order_price": 15000,
"exchange": "NSE"
},
{
"ref_id": 23456,
"order_type": "ORDER_TYPE_REGULAR",
"order_qty": 1,
"order_side": "ORDER_SIDE_SELL",
"order_delivery_type": "ORDER_DELIVERY_TYPE_IDAY",
"validity_type": "DAY",
"price_type": "LIMIT",
"order_price": 24500,
"exchange": "NSE"
}
])
print(result.orders)
Example Order Patterns¶
These examples show how to send multiple independent orders in one multi_order() request using different ref_id values.
- use one payload per order
- keep the order-specific fields inside each item
- add
algo_paramsonly for the orders that require it
from nubra_python_sdk.start_sdk import InitNubraSdk, NubraEnv
from nubra_python_sdk.refdata.instruments import InstrumentData
from nubra_python_sdk.marketdata.market_data import MarketData
from nubra_python_sdk.trading.trading_data import NubraTrader
from nubra_python_sdk.trading.trading_enum import ExchangeEnum
nubra = InitNubraSdk(NubraEnv.UAT, env_creds=True)
instruments = InstrumentData(nubra)
market_data = MarketData(nubra)
trader = NubraTrader(nubra, version="V2")
hdfc_ref_id = instruments.get_instrument_by_symbol("HDFCBANK", exchange=ExchangeEnum.NSE).ref_id
reliance_ref_id = instruments.get_instrument_by_symbol("RELIANCE", exchange=ExchangeEnum.NSE).ref_id
hdfc_ltp = market_data.quote(ref_id=hdfc_ref_id, levels=1).orderBook.last_traded_price
reliance_ltp = market_data.quote(ref_id=reliance_ref_id, levels=1).orderBook.last_traded_price
result = trader.multi_order([
{
"ref_id": hdfc_ref_id,
"order_type": "ORDER_TYPE_REGULAR",
"order_qty": 1,
"order_side": "ORDER_SIDE_BUY",
"order_delivery_type": "ORDER_DELIVERY_TYPE_CNC",
"validity_type": "DAY",
"price_type": "LIMIT",
"order_price": hdfc_ltp + 10,
"exchange": "NSE",
"tag": "multi_limit_hdfc"
},
{
"ref_id": reliance_ref_id,
"order_type": "ORDER_TYPE_REGULAR",
"order_qty": 1,
"order_side": "ORDER_SIDE_SELL",
"order_delivery_type": "ORDER_DELIVERY_TYPE_IDAY",
"validity_type": "DAY",
"price_type": "LIMIT",
"order_price": reliance_ltp - 10,
"exchange": "NSE",
"tag": "multi_limit_reliance"
}
])
print(result.orders)
Use this pattern when each order is a standard limit order and no order-specific algo fields are required.
from nubra_python_sdk.start_sdk import InitNubraSdk, NubraEnv
from nubra_python_sdk.refdata.instruments import InstrumentData
from nubra_python_sdk.marketdata.market_data import MarketData
from nubra_python_sdk.trading.trading_data import NubraTrader
from nubra_python_sdk.trading.trading_enum import ExchangeEnum
nubra = InitNubraSdk(NubraEnv.UAT, env_creds=True)
instruments = InstrumentData(nubra)
market_data = MarketData(nubra)
trader = NubraTrader(nubra, version="V2")
hdfc_ref_id = instruments.get_instrument_by_symbol("HDFCBANK", exchange=ExchangeEnum.NSE).ref_id
reliance_ref_id = instruments.get_instrument_by_symbol("RELIANCE", exchange=ExchangeEnum.NSE).ref_id
hdfc_ltp = market_data.quote(ref_id=hdfc_ref_id, levels=1).orderBook.last_traded_price
reliance_ltp = market_data.quote(ref_id=reliance_ref_id, levels=1).orderBook.last_traded_price
result = trader.multi_order([
{
"ref_id": hdfc_ref_id,
"order_type": "ORDER_TYPE_REGULAR",
"order_qty": 1,
"order_side": "ORDER_SIDE_BUY",
"order_delivery_type": "ORDER_DELIVERY_TYPE_CNC",
"validity_type": "DAY",
"price_type": "LIMIT",
"order_price": hdfc_ltp + 10,
"exchange": "NSE",
"tag": "multi_limit_leg"
},
{
"ref_id": reliance_ref_id,
"order_type": "ORDER_TYPE_STOPLOSS",
"order_qty": 1,
"order_side": "ORDER_SIDE_BUY",
"order_delivery_type": "ORDER_DELIVERY_TYPE_IDAY",
"validity_type": "DAY",
"price_type": "LIMIT",
"order_price": reliance_ltp + 50,
"exchange": "NSE",
"tag": "multi_stoploss_leg",
"algo_params": {
"trigger_price": reliance_ltp + 30
}
}
])
print(result.orders)
Use this pattern when one order is a regular limit order and another requires stop-loss-specific algo_params.
Request Contract¶
- Input is a list of order dictionaries.
- Each item follows the same request contract as Place Order.
Response Contract¶
| Field | Type | Meaning |
|---|---|---|
orders |
list[CreateOrderResponseV2] |
one response item per submitted order |
Important Rules¶
Important Rules
- Each order in the batch is validated independently against the single-order contract.
- This method is for multiple regular orders, not flexi basket strategy logic.
- Use environment-correct
ref_idvalues for every leg. - Prices are typically passed in exchange-native integer units such as paise for NSE instruments.