@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);
});