Naturally Pacifist Marsupials
    Wondering what’s next for npm?Check out our public roadmap! »

    custom-ibkr
    TypeScript icon, indicating that this package has built-in type declarations

    1.8.22 • Public • Published

    IBKR: Interactive Brokers

    NPM

    Run IBKR in style

    This is an event-based ibkr client for node

    Feature
    Accounts
    Portfolios
    Orders (stocks/forex/options/index .e.t.c)
    Historical Data
    Realtime price updates
    Contracts (stocks/forex/options/index .e.t.c)
    Mosaic Market scanner
    ⬜️ News

    1. Install

    npm i custom-ibkr

    2. Usage

    Initialize

    import ibkr, { AccountSummary, IBKREVENTS, IbkrEvents, PortFolioUpdate, getContractDetails } from 'custom-ibkr';
    
    const ibkrEvents = IbkrEvents.Instance;
    
    
    // 0. Using env process.env.IB_PORT and process.env.IB_HOST
    await ibkr();
    
    // 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 { HistoricalData } from 'custom-ibkr';
    
    // 1. Init
    const historyApi = HistoricalData.Instance;
    
    const args = {
      symbol,
      // contract: ib.contract.stock("AAPL"),
      endDateTime = '',
      durationStr = '1 D',
      barSizeSetting = '1 min',
      whatToShow = 'ASK'
    };
    
    // 2. Get market data async promise
    const data = await historyApi.reqHistoricalData(args);
    
    // OR 
    
    // 3.1 Request for market data using events
    historyApi.getHistoricalData(args);
    ibkrEvents.emit(IBKREVENTS.GET_MARKET_DATA, args); // the same
    
    // 3.2. Subscribe to market data results
    ibkrEvents.on(IBKREVENTS.ON_MARKET_DATA, ({ symbol, marketData }) => {
        //  Use the data here
    })
    • Real-time price updates
    import { PriceUpdates } from 'custom-ibkr';
    
    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' });
    // Unsubscribe from price updates
    ibkrEvents.emit(IBKREVENTS.UNSUBSCRIBE_PRICE_UPDATES, symbol);

    Contracts

     
    const contractDetails = await getContractDetails(ib.contract.stock("AAPL"));
    
    //  or e.g options
    const contractDetails = await getContractDetails({
        currency: 'USD',
        exchange: 'SMART',
        multiplier: 100,
        right: 'C',
        secType: 'OPT',
        strike: 300,
        symbol: 'AAPL'
    });
    
    // e.g forex
    const contractDetails = await getContractDetails({
        "symbol":"GBP",
        "secType":"CASH",
        "currency":"USD",
         // "localSymbol":"GBP.USD",
    });
    
    
    // or with just a symbol, defaults to stocks
     const contractDetails = await getContractDetails('AAPL');

    Orders

    import { Orders, Order, Contract } from 'custom-ibkr';
    
    const orderTrade = Orders.Instance;
    
    const myStockOrder: Order = { ... }
    const myStockContract: Contract = { ... }
    
    const placedOrder = await orderTrade.placeOrder(myStockContract, myStockOrder);
              

    Order

    const stockOrderBuyOut: Order = {
        action: OrderAction.BUY,
        orderType: OrderType.LMT,
        lmtPrice: 200
        totalQuantity: 5
    }
    
    const stockContractBuyOut: Contract = {
        symbol: symbol,
        secType: SecType.STK,
        exchange: exchange, // 'SMART'
        currency: currency // 'USD'
    }

    type

    • limit -> LMT (action, quantity, lmtPrice) like in example above
    • market -> MKT (action, quantity, transmitOrder, goodAfterTime, goodTillDate)
    • marketClose -> MOC (action, quantity, price, transmitOrder)
    • stop -> STP (action, quantity, price, transmitOrder, parentId, tif)
    • stopLimit -> STP_LMT (action, quantity, limitPrice, stopPrice, transmitOrder, parentId, tif)
    • trailingStop -> TRAIL (action, quantity, auxPrice, tif, transmitOrder, parentId)

    Order events

    • Order filled
    ibkrEvents.on(IBKREVENTS.ORDER_FILLED, (data) => {
    
    });
    • Order status
    ibkrEvents.on(IBKREVENTS.ORDER_STATUS, (data) => {
    
    });
    • Open Orders updates
    ibkrEvents.on(IBKREVENTS.OPEN_ORDERS, (data) => {
    
    });

    Mosaic Scanner

    import { MosaicScanner } from 'custom-ibkr';
    const mosaicScanner = new MosaicScanner();
    
    const scannerData = await mosaicScanner.scanMarket({
          instrument: 'STK',
          locationCode: 'STK.US.MAJOR',
          numberOfRows: 10,
          scanCode: 'TOP_PERC_GAIN',
          stockTypeFilter: 'ALL'
    })

    see any .test.ts file for examples

    3. Debug

    We use debug library for logging. Run with DEBUG=ibkr:* to see all logs, or DEBUG=ibkr:info for less verbose logs.

    See change log for updates

    Forked from Stoqey Inc IBKR

    Install

    npm i custom-ibkr

    DownloadsWeekly Downloads

    1

    Version

    1.8.22

    License

    MIT

    Unpacked Size

    377 kB

    Total Files

    177

    Last publish

    Collaborators

    • avatar