Realtime Order Updates Streaming¶
Order update streaming is the control plane for execution logic.
Use this stream to react to:
- order accepted, modified, cancelled states
- trade fills and partial fills
- execution lifecycle without polling get-order repeatedly
Callback Model¶
You typically process:
on_order_updatefor non-fill state transitionson_trade_updatefor fill events
WebSocket Order Updates Example¶
from nubra_python_sdk.ticker import orderupdate
from nubra_python_sdk.start_sdk import InitNubraSdk, NubraEnv
nubra = InitNubraSdk(NubraEnv.UAT, env_creds=True)
def pick(obj, *names):
for name in names:
value = getattr(obj, name, None)
if value is not None:
return value
return None
def clean(d):
return {k: v for k, v in d.items() if v is not None}
def on_order_update(msg):
print(
"[OrderUpdate]",
clean(
{
"order_id": pick(msg, "order_id"),
"basket_id": pick(msg, "basket_id"),
"status": pick(msg, "execution_status", "response_type"),
"request_type": pick(msg, "request_type"),
"update_msg": pick(msg, "update_msg"),
"exchange": pick(msg, "exchange"),
}
),
)
def on_trade_update(msg):
params = pick(msg, "order_params")
print(
"[TradeUpdate]",
clean(
{
"order_id": pick(msg, "order_id"),
"basket_id": pick(msg, "basket_id"),
"trade_qty": pick(params, "trade_qty") if params else None,
"trade_price": pick(params, "trade_price") if params else None,
"filled_qty": pick(params, "filled_qty") if params else None,
"avg_fill_price": pick(params, "avg_fill_price") if params else None,
}
),
)
def on_connect(msg):
print("[OrderSocket] Connected:", msg)
socket = orderupdate.OrderUpdate(
client=nubra,
on_order_update=on_order_update,
on_trade_update=on_trade_update,
on_connect=on_connect,
)
socket.connect("V2")
socket.keep_running()
Practical Notes¶
- keep this stream running independently from market-data streams
- write updates to a durable event log for post-trade auditability
- use get-order APIs for reconciliation snapshots, not for primary live state