Historical Data Limitations

Tick-by-tick data is not relayed back through any API technology, we only provide the raw values used to calculate the time bars.

Studies and Indicators are not relayed back through any API technology.

Intra-day bar sizes are relayed back in Local Time Zone, daily bar sizes and greater are relayed back in Exchange Time Zone.

For daily bar sizes and greater, the date value will only return in format "yyyymmdd", formatDate = 2 are only supported for intra-day bars.

For Stocks, CMDTY, ETFs, Forex, Indices and CFDs

Historical data requests that use a bar size of "30 secs" or less can only go back six months.

Historical data requests can go back one full calendar year or more, depending on the number of concurrent real-time market data lines:

Number of Market Data Lines

Historical Data Request Limit

499 or less

One year

500 - 749

Two years

750 - 999

Three years

1000 -1249

Four years

1250 - 1499

Five years

Market data lines can be increased based on monthly commission amounts, amount of equity and Quote Booster subscriptions. A "market data line" refers to a quote line in TWS and to each reqMktData() and reqRealTimeBars() method invoked in the API.

For more information on how market data is affected by commissions and equity, expand the "How Market Data is Calculated" section of the Market Data Display page on our website.

Quote Boosters are counted on top of your current real-time market data line limits. For more information on how market data is manually affected by quote booster subscriptions, see the Quote Booster section of the Market Data Display page. You subscribe to Quote Boosters on the Market Data Subscriptions page in Account Management.

The following table lists the monthly commission required, equity required, and/or quote booster packs required to increase the total years of historical data:

Total Years of Historical Data

Com x Data = Mthly ComMthly Commission Required

Equity x Data = Mthly Equity DataMthly Equity Required

Data - Default = Data Needed|Data Needed/Per Booster| = Total Booster

One year

Less than USD 4000

Less Then USD 5,000,000

3 Booster packs or less

Two years

USD 8.0 x 500 = USD 4,000

USD 10,000 x 500 = USD 5,000,000

500 - 100 = 400

|400 / 100| = 4

4 Booster Packs

Three years

USD 8.0 x 750 = USD 6,000

USD 10,000 x 750 = USD 7,500,000

750 - 100 = 650

|650 / 100| = 7

7 Booster Packs

Four years

USD 8.0 x 1000 = USD 8,000

USD 10,000 x 1000 = USD 10,000,000

1000 - 100 = 900

|900 / 100| = 9

9 Booster Packs

Five years

USD 8.0 x 1250 = USD 10,000

USD 10,000 x 1250 = USD 12,500,000

N/A (Max Quote Booster Packs is limited to 10)

Note: Increasing how far back historical data is available will have no effect on the pacing limitations. Pacing limitations are hard coded on IB’s Server backend and as such not user adjustable. Please see the below Pacing Violation section for more details.

For Futures, SSFs and Metals

Historical data requests are available for expired Futures, 2 years from current expiration.

Historical data requests are typically available for up to 6 months per expiration.

Historical data requests require the expiration to be specified, at this time continuous contract is not supported.

For Options, FOPS, Warrants and Structure Products

Historical data requests are only available for current expirations.

No End of Day (EOD) data are available, the valid bar sizes are from “1 secs” to “8 hours”

Historical data requests are typically available for up to 2calendar months per expiration.

For Bonds and Funds

Historical data requests are not available through the API, only real time data can be requested.

Note: For more information on requesting real time data see Using the Tickers Page in the DDE for Excel chapter, reqMktDataEx() in the ActiveX chapter, reqMktData() in the C++ chapter, reqMktData() in the Java chapter, reqMktData() in the C# chapter and Using the Tickers Page in the ActiveX for Excel chapter.

For Real Time Bars

When requesting Real Time Bars this is a query for streaming Historical Data, the data is relayed back from the same servers that provide Historical Data. As such when initiating the request it is subjected to the same pacing limitations outlined below in the Pacing Violation section. Also since the Real Time Bars requests are being provided as streaming, it will count towards the total number of Market Data Lines outlined in the Market Data Display page on our Website.

Note: Real time bars not available for DDE. For more information about real time bar requests, see reqRealTimeBarsEX() in the ActiveX chapter,reqRealTimeBars() in the C++ chapter, reqRealTimeBars() in the Java chapter, reqRealTimeBars() in the C# chapter and Real Time Bars in the ActiveX for Excel chapter.

Pacing Violations

All of the API technologies support historical data requests. However, requesting the same historical data in a short period of time can cause extra load on the backend and subsequently cause pacing violations. The error code and message that indicates a pacing violation is:

The following table lists the valid whatToShow values based on the corresponding products.

*Only applies for CFD Indices. For CFD stock, you must specify the underlying stock.

Valid Duration and Bar Size Settings for Historical Data Requests

The following table lists the valid duration andbar size settings for API historical data requests. Please note that these are only guidelines but if you attempt to exceed them then each request may count as more than one and can cause a pacing violation as outlined above.