IBKR: Interactive Brokers
Run IBKR in style
This is an event-based ibkr client for node
| Feature |
---|
✅ | Accounts |
✅ | Portfolios |
✅ | Orders |
✅ | Historical Data |
✅ | Realtime price updates |
✅ | Contracts |
⬜️ | Mosaic Market scanner |
1. Install
npm i @stoqey/ibkr
2. Usage
Initialize
import ibkr, { AccountSummary, IBKREVENTS, IbkrEvents, PortFolioUpdate, getContractDetails } from '@stoqey/ibkr';
const ibkrEvents = IbkrEvents.Instance;
await ibkr({ port: IB_PORT, host: IB_HOST });
ibkr({ port: IB_PORT, host: IB_HOST }).then(started => {
if(!started){
console.log('error cannot start ibkr');
return process.exit(1);
}
})
Accounts, Summary e.t.c
const accountId = AccountSummary.Instance.accountSummary.AccountId;
const totalCashValue = AccountSummary.Instance.accountSummary.TotalCashValue;
Portfolios
const portfolios = Portfolios.Instance;
const accountPortfolios = await portfolios.getPortfolios();
ibkrEvents.on(IBKREVENTS.PORTFOLIOS, (porfolios: PortFolioUpdate[]) => {
})
Historical Data + Realtime price updates
import { HistoricalData } from '@stoqey/ibkr';
HistoricalData.Instance;
const args = {
symbol,
contract = [symbol, 'SMART', 'USD'],
endDateTime = '',
durationStr = '1 D',
barSizeSetting = '1 min',
whatToShow = 'ASK'
};
HistoricalData.Instance.getHistoricalData(args);
ibkrEvents.emit(IBKREVENTS.GET_MARKET_DATA, args);
ibkrEvents.on(IBKREVENTS.ON_MARKET_DATA, ({ symbol, marketData }) => {
})
import { PriceUpdates } from '@stoqey/ibkr';
PriceUpdates.Instance;
ibkrEvents.on(IBKREVENTS.ON_PRICE_UPDATES, (priceUpdates) => {
});
ibkrEvents.emit(IBKREVENTS.SUBSCRIBE_PRICE_UPDATES, { symbol: 'AAPL' });
Contracts
const contractDetails = await getContractDetails('AAPL');
Orders
import { Orders, OrderStock } from '@stoqey/ibkr';
const orderTrade = Orders.Instance;
const myStockOrder: OrderStock = { ... }
const placedOrder = await orderTrade.placeOrder(myStockOrder);
OrderStock
const stockOrderBuyOut: OrderStock = {
symbol: symbol,
action: "SELL",
type: "market",
parameters: ["1", "9999"],
size: 3,
capital: 1000,
exitTrade: false,
}
type
- limit
('SELL', 1, 9999)
like in example above - market
(action, quantity, transmitOrder, goodAfterTime, goodTillDate)
- marketClose
(action, quantity, price, transmitOrder)
- stop
(action, quantity, price, transmitOrder, parentId, tif)
- stopLimit
(action, quantity, limitPrice, stopPrice, transmitOrder, parentId, tif)
- trailingStop
(action, quantity, auxPrice, tif, transmitOrder, parentId)
Order events
ibkrEvents.on(IBKREVENTS.ORDER_FILLED, (data) => {
});
ibkrEvents.on(IBKREVENTS.ORDER_STATUS, (data) => {
});
ibkrEvents.on(IBKREVENTS.OPEN_ORDERS, (data) => {
});
see any .test.ts
file for examples
Stoqey Inc