IB@stoqey/ib
@stoqey/ibkr (High-Level Wrapper)Orders & Executions

Orders & Trade Execution

Placing, modifying, cancelling orders, and tracking filled trades with Orders.Instance in @stoqey/ibkr.

Overview (Orders)

Orders.Instance manages order placement, modification, cancellations, and filled trade tracking.

It automatically maintains cached snapshots of all open orders (ordersManager.orders) and completed trades (ordersManager.trades).


1. Placing an Order

To submit a new order, resolve a contract using MarketDataManager first, then call ordersManager.placeOrder:

import ibkr, { MarketDataManager, Orders } from "@stoqey/ibkr";
import { OrderAction, OrderType } from "@stoqey/ib";

await ibkr();

const mkdManager = MarketDataManager.Instance;
const ordersManager = Orders.Instance;

// 1. Resolve target contract
const contract = await mkdManager.getContract({
  symbol: "AAPL",
  secType: "STK",
  exchange: "SMART",
  currency: "USD",
});

// 2. Define order parameters
const order = {
  action: OrderAction.BUY,
  totalQuantity: 10,
  orderType: OrderType.LMT,
  lmtPrice: 220.0,
  transmit: true,   // true to submit immediately, false for draft
  outsideRth: false, // true to allow Outside Regular Trading Hours
  tif: "DAY",       // 'DAY', 'GTC', 'IOC'
};

// 3. Submit order
const placedResult = await ordersManager.placeOrder(contract, order);
console.log("Order placed successfully!");

2. Modifying an Active Order

To update price, quantity, or parameters of an existing open order:

const modifiedOrder = {
  ...order,
  lmtPrice: 222.50, // Updated limit price
  totalQuantity: 15,
};

await ordersManager.modifyOrder(orderId, contract, modifiedOrder);

3. Cancelling Orders

Cancel Single Order

await ordersManager.cancelOrder(orderId);

Cancel All Orders

await ordersManager.cancelAllOrders({});

4. Accessing Cached Orders & Trades

// Get list of active open orders
const openOrders = ordersManager.orders;

// Get list of completed trades (filled orders)
const filledTrades = ordersManager.trades;

5. Listening for Real-Time Trade Fills

Subscribe to trade execution events on IBKREvents.Instance:

import { IBKREvents, IBKREVENTS } from "@stoqey/ibkr";
import type { Trade } from "@stoqey/ibkr";

const ibkrEvents = IBKREvents.Instance;

// Emitted immediately when an order is filled
ibkrEvents.on(IBKREVENTS.IBKR_SAVE_TRADE, (trade: Trade) => {
  console.log(`[TRADE FILLED] ${trade.action} ${trade.quantity} x ${trade.instrument?.symbol} @ $${trade.price}`);
});

// Emitted when open order cache changes
ibkrEvents.on(IBKREVENTS.IBKR_OPEN_ORDERS_UPDATED, () => {
  console.log("Open orders updated! Count:", ordersManager.orders.length);
});

// Emitted when completed trades cache changes
ibkrEvents.on(IBKREVENTS.IBKR_COMPLETED_TRADES_UPDATED, () => {
  console.log("Completed trades updated! Count:", ordersManager.trades.length);
});

On this page