Skip to main content

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),

Metadata

Release files for python-ibapi-stable 10.30.1

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

Source distribution (sdist)

Source distribution for python-ibapi-stable 10.30.1
File Size Uploaded
python_ibapi_stable-10.30.1.tar.gz 69.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-ibapi-stable 10.30.1
File Interpreter ABI Platform
python_ibapi_stable-10.30.1-py3-none-any.whl Python 3 none any Details

Total release size: 146.1 kB

Release files / python_ibapi_stable-10.30.1.tar.gz

Download URL python_ibapi_stable-10.30.1.tar.gz
Size 69.5 kB
Tags Source
SHA-256 checksum
How to use checksums
c0e25a57a9f0140109a36208f99af452fb63ee8a8b417ca6339e7e8d9af572ab
BLAKE2b-256 checksum
How to use checksums
f85588234090f91ec20cc7160634d1d62c37b8bf7ead143920e2a3ecdea899b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.11.3

Release files / python_ibapi_stable-10.30.1-py3-none-any.whl

Download URL python_ibapi_stable-10.30.1-py3-none-any.whl
Size 76.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2aabd990edcf902ebd161722d6825d6fd8342528519e1be507ed16005b081fbe
BLAKE2b-256 checksum
How to use checksums
0276939aae501bf6c3fe945b1f2ca207e3b4faa389e83c8a634f2e696d36798b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.11.3

Release history Release notifications | RSS feed

This release

10.30.1 This release

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