[ platform · orders ]

Orders

Live pending + filled orders across every broker NVTrader is wired to. Same wire shape regardless of broker — SimBroker, Alpaca paper, Webull (pending UAT) — so the table is identical and you can pivot accounts without restarting the app.

Overview

Two tables stacked: Pending (working at the venue) and Filled (terminal — filled, partially filled, cancelled, rejected). Toolbar at the top lets you switch the active broker and refresh.

Broker switcher

Click the broker chip in the header. The dropdown shows every broker with a linked account. The switch:

  1. Writes data/runtime/active_broker.txt (a tiny file, atomic).
  2. Future REST calls to get_broker() read from that file first, then BROKER env, then settings, then "sim".
  3. No process restart needed.

This is how you can be running an Alpaca paper account in the morning and a Webull UAT account in the afternoon, with one user, one server.

warn

Switching brokers does not migrate positions. Each broker keeps its own position book. The dashboard shows whichever broker is active.

Columns explained

columnmeaning
idNVTrader-internal order id (UUID). Used in audit + observability.
broker_order_idWhat the venue assigned. Pasteable into the Alpaca / Webull dashboard for the underlying order.
symbol · side · qtySelf-explanatory.
typemarket · limit · stop.
limit / stopThe price for non-market types.
statusPending: new · accepted · partial. Filled: filled · cancelled · rejected.
avg_fillVWAP across fills.
submitted_at · filled_atUTC timestamps from the broker.
rationaleShort string from the agent that placed it (or "manual" if from the chat).

Placing an order

Three paths:

  1. From the chatbuy 2 NVDA at market. Kimi picks place_order, fills args, calls the active broker, you get a table row back with the broker order id.
  2. From the rebalance modalPortfolio → Rebalance. Approving fans out N orders, one per non-zero target weight delta.
  3. From an agent — anything that publishes RebalanceApproved on the bus reaches ExecutionBusAgent.handle(), which calls the same broker code path. See A2A event bus.

How to interpret fill behavior

REST surface

VerbPathPurpose
GET/api/broker/activeWhich broker is the runtime override pointing at.
POST/api/broker/switchAtomically swap the active broker.
GET/api/broker/orders?status=pendingWorking orders.
GET/api/broker/orders?since=ISOOrders submitted in a window.
POST/api/broker/placeOne-shot order. Body: {symbol, side, qty, type, limit?, stop?, rationale}.
DELETE/api/broker/orders/{id}Cancel a working order.
NVTrader v0.1.18 · docs ·⚠ Not financial advice ·Docs home ·App