Skip to main content

pfund-ibapi

Interactive Brokers TWS Python API repackaged for easy install

Python API (the ibapi folder) was downloaded from https://interactivebrokers.github.io/index.html.

Installation

pip install pfund-ibapi

Documentation

https://www.interactivebrokers.com/campus/ibkr-api-page/twsapi-doc/

Below is the original README.md from the IBKR TWS API solely for reference.


Installation Guide for TWS API Library

This guide provides step-by-step instructions for setting up the TWS API library, including creating virtual environments using both Anaconda and standard Python, building distributions, and testing the installation.

Please see Understanding Code Organization and Functionality section at the bottom for an explanation of the key terms, conventions, and code organization used.

Step 1: Clone the TWS API repository and set up a virtual environment:

  • Open a terminal or Anaconda prompt on your Windows laptop.
  • Change to the directory where you want to store the TWS API repository.
  • Clone the TWS API repository from GitHub using git:
git clone https://github.com/your_username/tws-api.git

Replace your_username with your actual GitHub username.

Step 2: Create a new Python virtual environment (using Anaconda):

  • First, ensure you are within the '\tws-api\source\pythonclient' folder inside the "tws-api" repository:
cd tws-api/source/pythonclient
  • Create a new Python virtual environment using Anaconda:
conda create -n tws_env python=3.9

Replace tws_env with your desired environment name. Here, we are using Python 3.9 as an example, but you can choose another Python version if needed.

  • Alternative: Create a new Python virtual environment without Anaconda:
python3 -m venv tws_env

Replace tws_env with your desired environment name.

Step 3: Activate the virtual environment:

  • Activate the newly created virtual environment:
conda activate tws_env
  • Alternative: Activate the virtual environment without Anaconda:
source tws_env/bin/activate

Step 4: Install the TWS API library:

  • Build the source distribution:
python setup.py sdist
  • Build the wheel distribution:
python setup.py bdist_wheel
  • Retrieve the wheel distribution file name from the dist folder under the tws-api/source/pythonclient folder:

    For instance, if the wheel distribution file name is ibapi-9.76.1-py3-none-any.whl

  • Install the wheel distribution using pip with the --user flag using the following command:

python3 -m pip install --user --upgrade dist/ibapi-9.76.1-py3-none-any.whl

Step 5: Create a new Jupyter kernel with the virtual environment:

  • Install Jupyter if you haven't already (skip this step if you have Jupyter installed):
conda install jupyter
  • Install the ipykernel package to enable creating a Jupyter kernel for the virtual environment:
conda install ipykernel
  • Create a new Jupyter kernel for the virtual environment:
python -m ipykernel install --user --name tws_env --display-name "TWS Environment"

Replace tws_env with the same environment name used in Step 2.

Step 6: Open Jupyter Notebook and select the new kernel:

  • Launch Jupyter Notebook:
jupyter notebook

Step 7: Create a new Jupyter Notebook and test the TWS API library installed:

  • In the Jupyter Notebook interface, create a new notebook by clicking on "New" and then selecting "TWS Environment" from the list of available kernels.

  • Run the following code in the first cell of the notebook to test the TWS API library:

import ibapi

print("TWS API version:", ibapi.__version__)

Congratulations, now you have a new Jupyter Notebook with the TWS API library installed in the virtual environment, and you can start coding and testing your trading strategies using the TWS API.

Understanding Code Organization and Functionality

This section provides insights into how the TWS API library is structured, how messages are received and sent, and how to interact with the Wrapper class for handling incoming messages. Understanding these concepts will help you effectively utilize the TWS API for your trading automation needs.

A couple of things/definitions/conventions:

  • a low level message is some data prefixed with its size
  • a high level message is a list of fields separated by the NULL character; the fields are all strings; the message ID is the first field, the come others whose number and semantics depend on the message itself
  • a request is a message from client to TWS/IBGW (IB Gateway)
  • an answer is a message from TWS/IBGW to client

How the code is organized:

  • comm module: has tools that know how to handle (eg: encode/decode) low and high level messages
  • Connection: glorified socket
  • Reader: thread that uses Connection to read packets, transform to low level messages and put in a Queue
  • Decoder: knows how to take a low level message and decode into high level message
  • Client:
    • knows to send requests
    • has the message loop which takes low level messages from Queue and uses Decoder to transform into high level message with which it then calls the corresponding Wrapper method
  • Wrapper: class that needs to be subclassed by the user so that it can get the incoming messages

The info/data flow is:

  • receiving:

    • Connection.recv_msg() (which is essentially a socket) receives the packets
      • uses Connection._recv_all_msgs() which tries to combine smaller packets into bigger ones based on some trivial heuristic
    • Reader.run() uses Connection.recv_msg() to get a packet and then uses comm.read_msg() to try to make it a low level message. If that can't be done yet (size prefix says so) then it waits for more packets
    • if a full low level message is received then it is placed in the Queue (remember this is a standalone thread)
    • the main thread runs the Client.run() loop which:
      • gets a low level message from Queue
      • uses comm.py to translate into high level message (fields)
      • uses Decoder.interpret() to act based on that message
    • Decoder.interpret() will translate the fields into function parameters of the correct type and call with the correct/corresponding method of Wrapper class
  • sending:

    • Client class has methods that implement the requests. The user will call those request methods with the needed parameters and Client will send them to the TWS/IBGW.

Implementation notes:

  • the Decoder has two ways of handling a message (essentially decoding the fields)

    • some message very neatly map to a function call; meaning that the number of fields and order are the same as the method parameters. For example: Wrapper.tickSize(). In this case a simple mapping is made between the incoming msg id and the Wrapper method:

    IN.TICK_SIZE: HandleInfo(wrap=Wrapper.tickSize),

    • other messages are more complex, depend on version number heavily or need field massaging. In this case the incoming message id is mapped to a processing function that will do all that and call the Wrapper method at the end. For example:

    IN.TICK_PRICE: HandleInfo(proc=processTickPriceMsg),

License

Copyright (C) 2013-2026 Interactive Brokers LLC

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pfund_ibapi-10.50.2.tar.gz (166.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pfund_ibapi-10.50.2-py3-none-any.whl (420.2 kB view details)

Uploaded Python 3

File details

Details for the file pfund_ibapi-10.50.2.tar.gz.

File metadata

  • Download URL: pfund_ibapi-10.50.2.tar.gz
  • Upload date:
  • Size: 166.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pfund_ibapi-10.50.2.tar.gz
Algorithm Hash digest
SHA256 a12894772e7a37b5aedceb1190efd51f14d364212178c2eeba6b96b718703b0a
MD5 2223b3e04581cf6824a81fbfad407e6c
BLAKE2b-256 91183f078525674b81f4bd6217d044da0580d53b1b6b3ada364dde8c1c62dd39

See more details on using hashes here.

Provenance

The following attestation bundles were made for pfund_ibapi-10.50.2.tar.gz:

Publisher: release.yml on PFund-Software-Ltd/pfund-ibapi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pfund_ibapi-10.50.2-py3-none-any.whl.

File metadata

  • Download URL: pfund_ibapi-10.50.2-py3-none-any.whl
  • Upload date:
  • Size: 420.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pfund_ibapi-10.50.2-py3-none-any.whl
Algorithm Hash digest
SHA256 08d4079fde9249da53e00ab7f1a1b42b50cfc6e57f5a0db45c31fac5bf3bad1c
MD5 36aac8eeaa12dcdbec69d3a89173360a
BLAKE2b-256 2d14c8f7cfeac0ecfcae12a5f70af3cf0c559cd9a92f559f3cc8e9d2f391d249

See more details on using hashes here.

Provenance

The following attestation bundles were made for pfund_ibapi-10.50.2-py3-none-any.whl:

Publisher: release.yml on PFund-Software-Ltd/pfund-ibapi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

10.50.2 This release

2 files

10.50.1

2 files

10.49.2

2 files

10.49.1

2 files

10.48.1

2 files

10.47.1

2 files

10.42.1

2 files

10.39.1

2 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