Realtime Order Updates¶
Use OrderUpdate to receive realtime order-state and trade-execution callbacks over WebSocket.
on_order_updatereceives non-fill execution events such as accepted, modified, cancelled, or triggered updateson_trade_updatereceives fill eventson_portfolio_updateis also available on the client when portfolio refresh events are enabled in the stream
LLM guidance
Use this page when the application needs event-driven order or trade state over WebSocket. Use Get Orders for fetched order snapshots, and use order placement or modification pages when the goal is to send trading requests rather than consume live updates. This client can also emit on_portfolio_update callbacks for streamed portfolio refresh events.
Basic Usage¶
from nubra_python_sdk.ticker import orderupdate
from nubra_python_sdk.start_sdk import InitNubraSdk, NubraEnv
nubra = InitNubraSdk(NubraEnv.UAT, env_creds=True)
def on_order_update(msg):
print("[OrderUpdate]", msg)
def on_trade_update(msg):
print("[TradeUpdate]", msg)
def on_connect(msg):
print("[status]", msg)
def on_close(reason):
print("[closed]", reason)
def on_error(err):
print("[error]", err)
socket = orderupdate.OrderUpdate(
client=nubra,
on_order_update=on_order_update,
on_trade_update=on_trade_update,
on_connect=on_connect,
on_close=on_close,
on_error=on_error,
)
socket.connect("V2")
socket.keep_running()
Running In A Background Thread¶
import threading
def run_socket():
socket.connect("V2")
socket.keep_running()
thread = threading.Thread(target=run_socket, daemon=True)
thread.start()
Callback Contract¶
| Callback | Payload | Meaning |
|---|---|---|
on_connect(msg) |
str |
connection confirmation message |
on_close(reason) |
str |
close reason |
on_error(err) |
str |
socket or callback error |
on_order_update(msg) |
ExecutionInfoWrapper |
non-fill order or basket execution update |
on_trade_update(msg) |
ExecutionInfoWrapper |
fill update |
How The Stream Is Classified¶
In V2, the SDK routes updates based on trade_qty:
- if
trade_qtyis present, the event goes toon_trade_update - if
trade_qtyis absent, the event goes toon_order_update
For non-flexi orders, the SDK checks msg.order_params.trade_qty.
For flexi basket events, the SDK checks the basket-level nested order params inside basket_params.order_params.
Response Contract¶
| Field | Type | Meaning |
|---|---|---|
order_id |
int |
order identifier when the update is order-specific |
basket_id |
int |
basket identifier for flexi basket updates |
response_type |
str |
event type such as accepted, triggered, or filled |
delivery_type |
str |
delivery type such as CNC or intraday |
execution_type |
str |
execution mode such as regular, stoploss, or flexi |
side |
str |
buy or sell side |
price_type |
str |
price style such as limit |
qty |
int |
requested quantity in the update |
execution_status |
str |
execution state such as open, triggered, or filled |
last_mdified_time |
int |
last update timestamp from the SDK field name |
creation_time |
int |
creation timestamp |
display_name |
str |
display name of the instrument or basket context |
order_params |
OrderParam |
nested order-level execution data |
basket_params |
BasktParams |
nested basket-level execution data for flexi updates |
ltp |
int |
latest traded price field when present |
update_msg |
str |
exchange or backend update message |
exchange |
str |
exchange field when present |
is_sor |
bool |
smart order routing flag when present |
tag |
str |
order or basket tag |
request_type |
str |
request type such as new, modify, or cancel |
Response Meaning¶
Important nested order fields include:
| Field | Meaning |
|---|---|
order_params.ref_id |
instrument reference ID |
order_params.order_price |
requested order price |
order_params.avg_fill_price |
average fill price when filled |
order_params.filled_qty |
filled quantity |
order_params.trade_qty |
trade quantity used by the SDK to identify fill events |
order_params.trade_price |
trade price when a fill occurs |
order_params.exchange_order_id |
exchange-assigned order ID |
order_params.validity_type |
validity style such as day or IOC |
order_params.lot_size |
lot size when available |
order_params.option_type |
option type for derivative contracts |
order_params.strike_price |
strike price for option contracts |
order_params.algo_params.trigger_price |
stoploss trigger price when applicable |
Example Event Patterns¶
Order Update¶
Use on_order_update for non-fill state transitions such as:
- order accepted
- order modified
- order cancelled
- order triggered
Trade Update¶
Use on_trade_update for fill events where execution details are available through:
order_params.trade_qtyorder_params.trade_priceorder_params.avg_fill_priceorder_params.filled_qty
Important Rules¶
Important Rules
- This is a realtime streaming feed, not a snapshot API.
- Call
socket.connect("V2")to use the documented V2 callback shape on this page. - The SDK field name is currently
last_mdified_time, notlast_modified. - Price fields such as
order_price,trade_price,avg_fill_price, andltpare typically returned in exchange-native integer units such as paise for NSE instruments. - Keep the process alive with
keep_running()or your own long-lived thread or event-management flow. - Use Get Orders when you need a fetched snapshot of current order state instead of a live stream.