Skip to main content

IBind is a REST and WebSocket client library for Interactive Brokers Client Portal Web API.

Project description

This library is currently being developed. See something that's broken? Did we get something wrong? Create an issue and let us know!

IBind

IBind is a REST and WebSocket client library for Interactive Brokers Client Portal Web API.

I recommend using this library along with IBeam for easier authentication with IBKR.

NOTICE

This library is a work in progres. I haven't published it yet. Many things are due to change without any notice.

Features:

  • REST Python client - for IBKR REST API.
  • WebSocket Python client - for IBKR WebSocket API.
  • Feature rich REST - automated question/answer handling, parallel requests, rate limiting, conid unpacking, and more.
  • Feature rich WebSocket - WebSocket thread lifecycle handling, thread-safe Queue data stream, internal subscription tracking, heartbeat monitoring, and more.

Examples

See all examples

01 IbkrClient basic

import warnings

from ibind import IbkrClient

warnings.filterwarnings("ignore", message="Unverified HTTPS request is being made to host 'localhost'")

c = IbkrClient(url='https://localhost:5000/v1/api/')

print('\n#### check_health ####')
print(c.check_health())

print('\n\n#### tickle ####')
print(c.tickle().data)

print('\n\n#### get_accounts ####')
print(c.get_accounts().data)

02 IbkrClient intermediate

import var

from ibind import IbkrClient
import ibind

ibind.logs.initialize()

c = IbkrClient(
    url='https://localhost:5000/v1/api/',
    cacert=var.IBKR_CACERT,
)

print('\n#### get_accounts ####')
accounts = c.get_accounts().data
c.account_id = accounts[0]['accountId']
print(accounts)

print('\n\n#### get_ledger ####')
ledger = c.get_ledger().data
for currency, subledger in ledger.items():
    print(f'\t Ledger currency: {currency}')
    print(f'\t cash balance: {subledger["cashbalance"]}')
    print(f'\t net liquidation value: {subledger["netliquidationvalue"]}')
    print(f'\t stock market value: {subledger["stockmarketvalue"]}')
    print()

print('\n#### get_positions ####')
positions = c.get_positions().data
for position in positions:
    print(f'\t Position {position["ticker"]}: {position["position"]} (${position["mktValue"]})')

IbkrWsClient basic

import os
import time

import ibind
from ibind.client.ibkr_definitions import snapshot_keys_to_ids
from ibind import IbkrWsKey, IbkrClient, IbkrWsClient

ibind.logs.initialize(log_to_file=False)

account_id = os.getenv('IBKR_ACCOUNT_ID', '[YOUR_ACCOUNT_ID]')

client = IbkrClient(
    account_id=account_id,
    url='https://localhost:5000/v1/api/',
)

ws_client = IbkrWsClient(
    ibkr_client=client,
    account_id=account_id,
    url='wss://localhost:5000/v1/api/ws'
)

ws_client.start()
channel = 'md+265598'
fields = [str(x) for x in snapshot_keys_to_ids(['symbol', 'open', 'high', 'low', 'close', 'volume',])]

qa = ws_client.new_queue_accessor(IbkrWsKey.MARKET_DATA)

ws_client.subscribe(channel, {'fields': fields}, needs_confirmation=False)

while ws_client.running:
    try:
        while not qa.empty():
            print(str(qa), qa.get())

        time.sleep(1)
    except KeyboardInterrupt:
        print('KeyboardInterrupt')
        break

ws_client.unsubscribe(channel, {'fields': fields}, needs_confirmation=False)

ws_client.shutdown()

Licence

See LICENSE

Disclaimer

IBind is not built, maintained, or endorsed by the Interactive Brokers.

Use at own discretion. IBind and its authors give no guarantee of uninterrupted run of and access to the Interactive Brokers Client Portal Web API. You should prepare for breaks in connectivity to IBKR servers and should not depend on continuous uninterrupted connection and functionality. To partially reduce the potential risk use Paper Account credentials.

IBind is provided on an AS IS and AS AVAILABLE basis without any representation or endorsement made and without warranty of any kind whether express or implied, including but not limited to the implied warranties of satisfactory quality, fitness for a particular purpose, non-infringement, compatibility, security and accuracy. To the extent permitted by law, IBind's authors will not be liable for any indirect or consequential loss or damage whatever (including without limitation loss of business, opportunity, data, profits) arising out of or in connection with the use of IBind. IBind's authors make no warranty that the functionality of IBind will be uninterrupted or error free, that defects will be corrected or that IBind or the server that makes it available are free of viruses or anything else which may be harmful or destructive.

Acknowledgement

IBind has been enriched by incorporating work developed in collaboration with Kinetic, which now forms part of this open-source release. I appreciate Kinetic's significant contribution to this community-driven initiative. Cheers Kinetic! 🍻

Built by Voy

Hi! Thanks for checking out and using this library. If you are interested in discussing your project, require mentorship, consider hiring me, or just wanna chat - I'm happy to talk.

You can email me to get in touch: hello@voyzan.com

Or if you'd just want to give something back, I've got a Buy Me A Coffee account:

Buy Me A Coffee

Thanks and have an awesome day 👋

Project details


Download files

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

Source Distribution

ibind-0.0.1.tar.gz (30.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page