Skip to content

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_params only 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_id values for every leg.
  • Prices are typically passed in exchange-native integer units such as paise for NSE instruments.
  1. Place Order
  2. Get Order
  3. Get Margin
NEO Assistant