IB@stoqey/ib
@stoqey/ibkr (High-Level Wrapper)Advanced Features

Market Data Only Mode

Using IBKR_MD_ONLY=true for lightweight market data feeders, scanners, and symbol lookup clients.

What is Market Data Only Mode?

In default mode, @stoqey/ibkr initializes account summary listeners, portfolio position tracking, open order tracking, and filled trade historical indexing.

However, if you are building a market data feeder, screener, scanner, or pricing ticker, you don't need account balance or order execution overhead.

Setting IBKR_MD_ONLY=true disables account and order tracking subscriptions while keeping contract lookup and market data streaming fully functional.


Enabling Market Data Only Mode

Method 1: Environment Variable

Set IBKR_MD_ONLY=true (or MD_ONLY=true) in your .env file:

IBKR_MD_ONLY=true

Method 2: Programmatic Initialization

import ibkr from "@stoqey/ibkr";

await ibkr({
  host: "127.0.0.1",
  port: 7497,
  // Additional options...
});

Features Available in MD Only Mode

FeatureAvailable in MD Only Mode?
Contract Search & Resolution (getContract, searchContracts)
Historical Bars (getHistoricalData)
Real-time Bar Streaming (getHistoricalDataUpdates)
Tick-by-tick Streaming (getTickByTickDataUpdates)
Instant Quotes (getQuote)
Account Summary Updates (AccountSummary)❌ Disabled
Portfolio Positions Cache (Portfolios)❌ Disabled
Order Placement & Trades (Orders)❌ Disabled

Example Usage

import ibkr, { MarketDataManager, IBKREvents, IBKREVENTS } from "@stoqey/ibkr";
import type { MarketData } from "@stoqey/ibkr";

// 1. Enable MD Only mode via env before initialization
process.env.IBKR_MD_ONLY = "true";

// 2. Initialize
await ibkr();

const mkdManager = MarketDataManager.Instance;

// 3. Resolve contract and stream prices without account overhead
const contract = await mkdManager.getContract({
  symbol: "NVDA",
  secType: "STK",
  exchange: "SMART",
  currency: "USD",
});

IBKREvents.Instance.on(IBKREVENTS.IBKR_BAR, (bar: MarketData) => {
  console.log(`[NVDA Bar] Close: $${bar.close} | Volume: ${bar.volume}`);
});

await mkdManager.getHistoricalDataUpdates(contract);

On this page