Skip to main content

IB Data SDK

A Python SDK for retrieving historical market data from Interactive Brokers with a clean, extensible interface.

Features

  • 🚀 Easy to use: Simple, intuitive API for data retrieval
  • 🔧 Extensible: Plugin architecture for custom data processors
  • 📊 Pandas integration: Built-in DataFrame support
  • 🛡️ Type safe: Full type hints and Pydantic validation
  • 📱 CLI included: Command-line interface for quick data retrieval
  • 🏗️ Production ready: Proper error handling, logging, and testing

Installation

pip install ib-data-sdk

For development:

pip install ib-data-sdk[dev]

Quick Start

Environment Setup

Set up your IB connection parameters:

export TWS_HOST=127.0.0.1
export TWS_PORT=7497  # or 7496 for live trading
export TWS_CLIENT_ID=1

Basic Usage

from ib_data_sdk import IBDataClient, HistoricalDataRequest
from ib_data_sdk.enums import Duration, BarSize, DataType

# Create client
client = IBDataClient()

# Create request
request = HistoricalDataRequest(
    symbol="AAPL",
    duration=Duration.DAY_1, 
    bar_size=BarSize.MIN_5,
    data_type=DataType.TRADES
)

# Get data as DataFrame
df = client.get_historical_data_as_dataframe(request)
print(df.head())

# Clean up
client.disconnect_from_ib()

Using the CLI

# Get daily AAPL data
ib-data-sdk get-data AAPL --duration '1 D' --bar-size '5 mins'

# Save to file
ib-data-sdk get-data AAPL --duration '1 D' --bar-size '5 mins' --output aapl_data.csv

# List available options
ib-data-sdk list-enums

Advanced Usage

Custom Data Processors

from ib_data_sdk import DataProcessor, DataType

class VolumeWeightedDataProcessor(DataProcessor):
    def process_bar_data(self, price):
        return {
            "date": price.date,
            "vwap": (price.open + price.close) / 2 * price.volume,
            "volume": price.volume,
        }
    
    def get_data_type(self):
        return DataType.TRADES

# Register the processor
from ib_data_sdk.processors import DataProcessorFactory
DataProcessorFactory.register_processor(DataType.TRADES, VolumeWeightedDataProcessor)

Options Data

request = HistoricalDataRequest(
    symbol="AAPL",
    asset_type=AssetType.OPT,
    expiry="20240119",
    strike=150.0,
    right="C"  # Call option
)

df = client.get_historical_data_as_dataframe(request)

Error Handling

from ib_data_sdk.exceptions import ConnectionError, DataRequestError, TimeoutError

try:
    df = client.get_historical_data_as_dataframe(request)
except ConnectionError:
    print("Failed to connect to IB")
except DataRequestError as e:
    print(f"Data request failed: {e}")
except TimeoutError:
    print("Request timed out")

API Reference

Classes

  • IBDataClient: Main client class for data retrieval
  • HistoricalDataRequest: Request model with validation
  • HistoricalDataResponse: Response model with metadata
  • DataProcessor: Abstract base for custom processors

Enums

  • AssetType: STK, OPT, FUT, CASH, IND
  • BarSize: 1 sec to 1 month intervals
  • Duration: 1 D to 2 Y periods
  • DataType: TRADES, BID_ASK, MIDPOINT, etc.

Development

Setup

git clone https://github.com/quantphantom/ib-data-sdk
cd ib-data-sdk
pip install -e .[dev]
pre-commit install

Testing

pytest tests/ -v --cov=src/ib_data_sdk

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

Disclaimer

This project is not affiliated with Interactive Brokers. Use at your own risk. Trading

Metadata

Release files for ib-data-sdk 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ib-data-sdk 0.1.8
File Size Uploaded
ib_data_sdk-0.1.8.tar.gz 11.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ib-data-sdk 0.1.8
File Interpreter ABI Platform
ib_data_sdk-0.1.8-py3-none-any.whl Python 3 none any Details

Total release size: 22.8 kB

Release files / ib_data_sdk-0.1.8.tar.gz

Download URL ib_data_sdk-0.1.8.tar.gz
Size 11.0 kB
Tags Source
SHA-256 checksum
How to use checksums
023cc1605bf21c60e74ab1075f24c006d80c6be4b2ab466cf39d82ebcaa5f2d9
BLAKE2b-256 checksum
How to use checksums
cc007ad9ab5c6999164cbc5029477337311e34cff1bc9761b481de4f9d927687
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.5

Release files / ib_data_sdk-0.1.8-py3-none-any.whl

Download URL ib_data_sdk-0.1.8-py3-none-any.whl
Size 11.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
69893ec3790d115c18a0bfaee89380275112ba2ed24629d6021c4438722baed7
BLAKE2b-256 checksum
How to use checksums
184fd11a67854cbc83b08ac329d81047bbb87950a64686ed56d3fd9e6a7c5fee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

0.1.8 This release

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page