IBKR: Interactive Brokers
Run IBKR in style
This is an event-based ibkr client for node
- Accounts
- Portfolios
- Orders/Trades
- Historical Data + Realtime price updates
- Contracts
1. Install
npm i @stoqey/ibkr
2. Usage
Initialize
import ibkr, { AccountSummary, IBKREVENTS, IbkrEvents, HistoryData, PortFolioUpdate, getContractDetails } from '@stoqey/ibkr';
const ibkrEvents = IbkrEvents.Instance;
// 1. Async
await ibkr({ port: IB_PORT, host: IB_HOST });
// 2. Callback
ibkr({ port: IB_PORT, host: IB_HOST }).then(started => {
if(!started){
// Error IBKR has not started
console.log('error cannot start ibkr');
// Not to proceed if not connected with interactive brokers
return process.exit(1);
}
// Your code here
})
Accounts, Summary e.t.c
const accountId = AccountSummary.Instance.accountSummary.AccountId;
const totalCashValue = AccountSummary.Instance.accountSummary.TotalCashValue;
Portfolios
// Get current portfolios
const portfolios = Portfolios.Instance;
const accountPortfolios = await portfolios.getPortfolios();
// Subscribe to portfolio updates
ibkrEvents.on(IBKREVENTS.PORTFOLIOS, (porfolios: PortFolioUpdate[]) => {
// use porfolios updates here
})
Historical Data + Realtime price updates
- Market data
import AccountHistoryData from '@stoqey/ibkr/dist/history/history.data';
// 1. Async
const myData = await AccountHistoryData.Instance.getHistoricalData(symbol);
// 2. raw callback events
// Requeust market data
ibkrEvents.emit(IBKREVENTS.GET_MARKET_DATA, { symbol: 'AAPL' });
// Subscribe to market data
ibkrEvents.on(IBKREVENTS.ON_MARKET_DATA, ({ symbol, marketData }) => {
// Use the data here
})
- Real-time price updates
import PriceUpdates from '@stoqey/ibkr/dist/realtime/price.updates';
PriceUpdates.Instance; // init
// subscribe for price updates
ibkrEvents.on(IBKREVENTS.ON_PRICE_UPDATES, (priceUpdates) => {
// use the price updates here
});
// Request price updates
ibkrEvents.emit(IBKREVENTS.SUBSCRIBE_PRICE_UPDATES, { symbol: 'AAPL' });
Contracts
const contractDetails = await getContractDetails('AAPL');
Orders/Trades (TODO doc)
see any .test.ts
file for examples