A modern, TypeScript-based Node.js client for Interactive Brokers (IBKR) that provides a simplified interface to the IBKR API. This package is a wrapper around @stoqey/ib, which implements the official IBKR API. It offers a more developer-friendly way to interact with Interactive Brokers' trading platform, abstracting away the complexity of the underlying API.
Feature | |
---|---|
β | Accounts |
β | Portfolios |
β | Orders |
β | Historical Data |
β | Realtime price updates |
β | Contracts (stocks/forex/options/index .e.t.c) |
β¬οΈ | Mosaic Market scanner |
β¬οΈ | News |
npm i @stoqey/ibkr
Create a .env
in the root dir of your project, set IBKR_HOST
and IBKR_PORT
, IBKR_CLIENT_ID
(Optional, it'll use 0 by default), and DEBUG
for logs, like this
IBKR_HOST=localhost
IBKR_PORT=7497
IBKR_CLIENT_ID=123
DEBUG=ibkr*
import ibkr from '@stoqey/ibkr';
await ibkr();
// your code
import { AccountSummary } from "@stoqey/ibkr";
const accountInstance = AccountSummary.Instance;
// account summaries is automatically updated for you
const accountSummaries = accountInstance.accountSummary;
const accountId = accountSummaries.accountId;
const totalCashValue = accountSummaries.TotalCashValue.value;
import { Portfolios } from "@stoqey/ibkr";
// Get current portfolios
const portfolios = Portfolios.Instance;
// positions is automatically updated for you
const accountPortfolios = portfolios.positions;
- Market data
import { MarketDataManager } from '@stoqey/ibkr';
// 1. Get market data manager
const mkdManager = MarketDataManager.Instance;
// 2. Get market data async promise
const data = await mkdManager.getHistoricalData(contract, endDateTime, durationStr, barSizeSetting, whatToShow,useRTH );
- Real-time price updates
import { MarketDataManager, IBKREvents, IBKREVENTS } from '@stoqey/ibkr';
// 1. Get IBKR events
const ibkrEvents = IBKREvents.Instance;
// 2. Get market data manager
const mkdManager = MarketDataManager.Instance;
// 3. Request historical data updates
await mkdManager.getHistoricalDataUpdates(contract,barSizeSetting, whatToShow);
// 3. Subscribe for historical data updates
ibkrEvents.on(IBKREVENTS.IBKR_BAR, (bar: MarketData) => {
// use the historical data updates here
});
// 4. get the cached marketdata
const cachedData = await mkdManager.historicalData(contract, start, end)
// Unsubscribe from historical data updates
mkdManager.removeHistoricalDataUpdates(contract);
import { MarketDataManager } from '@stoqey/ibkr';
// 1. Get market data manager
const mkdManager = MarketDataManager.Instance;
const contract = {
symbol: "PLTR",
secType: "STK"
};
const contractDetails = await mkdManager.getContract(contract);
// or e.g options
const contractDetails = await mkdManager.getContract({
currency: 'USD',
exchange: 'SMART',
multiplier: 100,
right: 'C',
secType: 'OPT',
strike: 300,
symbol: 'AAPL'
});
// e.g forex
const contractDetails = await mkdManager.getContract({
"symbol":"GBP",
"secType":"CASH",
"currency":"USD",
});
import { Orders, OrderStock, IBKREvents, IBKREVENTS } from '@stoqey/ibkr';
// 1. Get IBKR events
const ibkrEvents = IBKREvents.Instance;
// 2. Get orders manager
const ordersManager = Orders.Instance;
// 3. Place order
const contract = await mkdManager.getContract({...})
const myOrder = {...}
const placedOrder = await ordersManager.placeOrder(contract, myOrder);
// 4. Modify order
const modifyOrder = await ordersManager.placeOrder(id, contract, myOrder);
// get orders, this is automatically updated
const orders = ordersManager.orders;
// get filled orders(trades), this is automatically updated
const trades = ordersManager.trades;
// subscribe for trades, when orders are filled in real time
ibkrEvents.on(IBKREVENTS.IBKR_SAVE_TRADE, (bar: Trade) => {
// use trade here
});
// other methods e.t.c....
await ordersManager.cancelOrder(orderId)
await ordersManager.cancelAllOrders()
see any .test.ts
file for examples
We use debug library for logging.
Run with DEBUG=ibkr:*
to see all logs, or DEBUG=ibkr:info
for less verbose logs.
Join our Discord community to get help, share ideas, and connect with other developers:
- Get help with implementation
- Share your projects
- Connect with other developers
- Stay updated on new releases
- Contribute to discussions