ib_async Changelog

1.0

Version 1.0.3 (2024-07-06)

General improvements and minor correctness fixes.

  • Fixed issue 42: Order preview requests would often fail for non-limit-order types due to incorrect value comparison. This has previous attempted fixes over the years, but we finally found the proper fix to the other fixes. Now order preview requests work properly for all order types.

  • Now market depth data is removed from the Ticker object when a market depth request is stopped because the data isn’t being live updated anymore.

  • Added ib_fundamental to community utility listing in README

Version 1.0.2 (2024-06-29)

General improvements and minor correctness fixes.

  • Fixed issue 28: Add ability to optionally disable account data synchronization on startup. If you are an advanced user, you may not need all your data synchronized on startup (which can slow down the initial connections due to the multiple sequential request loading) or you may want to control when the account data is loaded on your own schedule.

  • Fixed issue 33: Improved reliability of L2 depth of market reporting

  • Fixed issue 10 and issue 11: Fixed links in documentation

  • Fixed issue 16: Fixed documentation typo

  • Fixed issue 32: Use delayed data instead of denied data in example notebooks

  • Improved error logging if a wrapped method fails

  • Removed a potential exception when shutting down the event loop from within a larger system

Version 1.0.1 (2024-03-20)

  • Fixed issue 4: Messaging sending bug for unresolved contracts due to cleanup in 1.0.0

Solved this messaging sending bug by refactoring message parsing logic to be more stable. Also added a test case verifying it works as expected now.

Version 1.0.0 (2024-03-18)

This is the first version under new management after the unexpected passing of Ewald de Wit on March 11, 2024. We wish to maintain his legacy while continuing to improve the project going forward. We are resetting the project name, development practices, modernization levels, and project structure to hopefully grow more contributors over time.

This version update does not include any feature improvements and is functionally equivalent to the final version of ib_insync 0.9.86.

Code Cleanup:

  • Reformatted all code with ruff and improved readability throughout

  • Now uses sets for membership checking everywhere

  • Fixed a technical error around API message formatting

Project Changes:

  • Renamed ib_insync to ib_async everywhere

  • Increased minimum Python version from 3.6 (2016) to 3.10 (2021)

  • Removed dependencies for supporting Python versions less than 3.9

  • Converted README.rst to README.md

  • Updated IBKR API links to new ibkrcampus instead of old github docs

  • Removed setup.{py,cfg} to use Poetry for installing, docs, packaging

  • Converted links from /erdewit/ account to new /ib-api-reloaded/ org

  • Removed helper scripts for packaging and building docs

  • Removed docs-generated HTML from repository

  • Auto-build docs and update github docs site on every push

  • Documentation now auto-builds and is hosted on github pages instead of readthedocs

Original ib_insync Changelog (2017-2023)

Note: due to the project moving to a github organization, all auto-generated links below to mentioned issues and PRs don’t work anymore. You can use the issue numbers in the original ib_insync repo for historical reference.

0.9

Version 0.9.86

  • Fixed: issue 588: Fixed account summary tag.

  • Fixed: issue 589: Fixed more account summary tags.

  • pull:598: Year updates

Version 0.9.85

  • Fixed: issue 586: Revert socket protocol back to version 176.

Version 0.9.84

  • Potential fix for reqWshEventData.

Version 0.9.83

  • Added support for WSH (Wall Street Horizon) requests plus the (blocking) convenience methods getWshMetaData and getWshEventData.

  • Updated socket protocol to version 177.

  • Added support for Event security type.

Version 0.9.82

  • Fixed: issue 534: Session parsing for Forex contracts.

  • Fixed: issue 536: Handle empty session field.

  • Fixed: issue 541: Remove superfluous closing bracket.

  • Fixed: issue 542: Use float size for pnlSingle.

  • Fixed: issue 544: Cancel head-time request after completion.

  • Fixed: issue 545: Return Trade instead of Order for reqOpenOrders and reqAllOpenOrders.

  • pull 553: Volume bar added.

  • pull 565: Typo fix.

Version 0.9.81

  • Add ContractDetails.tradingSessions() and ContractDetails.liquidSessions() to parse session times.

  • Fix IBC.on2fatimeout command line argument for Unix.

Version 0.9.80

  • Fix ib.reqMatchingSymbols to handle bond contracts.

Version 0.9.79

  • Fix datetime parsing.

Version 0.9.78

  • Added account parameter to ib.portfolio().

  • Added IBC.on2fatimeout field.

  • Removed obsolete IBController.

  • Fixed: issue 530: Use explicit timezone in requests as per new API requirement.

Version 0.9.77

  • pull 528: Fixes regression in client.py.

Version 0.9.76

  • Fixed: issue 525: For whatIf request treat error 110 as failure.

Version 0.9.75

  • Fixed: issue 524: Use fix from Papakipos for issue with FlexReport downloading.

Version 0.9.74

  • Fix reqContractDetails bug in combination with latest TWS.

  • Update the code to comply with stricter MyPy checks.

Version 0.9.73

  • pull 523: Fix completedOrder parsing for new socket protocol.

Version 0.9.72

  • pull 507: Fixes bondContractDetails request.

  • Fixed: issue 502: Treat error 110 as a warning.

  • Added manualOrderTime and manualCancelOrderTime for audit trails.

  • Added PEG MID and PEG BEST order types.

  • Added contract fields description and issuerId.

  • Added IB.reqUserInfo().

  • Support socket protocol version 176.

Version 0.9.71

  • pull 453: Added support for bidExchange and askExchange fields to Ticker.

  • pull 489: Watchdog.start() now returns a Future.

  • Fixed: issue 439: Set marketDataType directly on Ticker.

  • Fixed: issue 441: Add explicit timezone of None to accomodate pandas Timestamp.

  • Fixed: issue 471: Revised Ticker.marketPrice() calculation.

  • Added minTick, bboExchange and snapshotPermissions fields to Ticker.

  • Added minSize, sizeIncrement and suggestedSizeIncrement fields to ContractDetails.

  • Added IB.reqHistoricalSchedule request.

  • Added IB.reqSmartComponents request.

  • Added Order.advancedErrorOverride field. Any advanced error message is made availble from Trade.advancedError.

  • Added a recipe for integration with PyGame.

  • Minimum required TWSAPI client protocol version is 157 now.

Version 0.9.70

  • Fixed: issue 413: Set the appropriate events as done on disconnect.

  • Exported symbols are now static so that the VSCode/PyLance code analyzer can understand it.

Version 0.9.69

  • Fixed: issue 403: Change validity test for whatIfOrder response.

Version 0.9.68

  • Fixed: issue 402: Downloading historical ticks for crypto currencies.

Version 0.9.67

  • Crypto security class added. To accommodate fractional crypto currency sizes, all the various size and volume fields that were of type int are now of type float.

  • pull 385: Get day trades remaining for next four days in IB.accountSummary.

  • Fixed: issue 361: Prevent util.logToConsole and util.logToFile from messing with the root logger.

  • Fixed: issue 370: Catch asyncio.CancelledError during connect.

  • Fixed: issue 371: Fix type annotation for reqMarketRuleAsync.

  • Fixed: issue 380: Reject bogus whatIf order response.

  • Fixed: issue 389: Add TradeLogEntry.errorCode field.

Version 0.9.66

  • Fixed: issue 360: Improved disconnect.

  • Fixed issue with duplicate orderId.

  • Update Order default values to work with the latest beta TWS/gateway.

  • pull 348: Added PySide6 support.

Version 0.9.65

  • Fixed: issue 337.

  • pull 317: Update and order’s totalQuantity, lmtPrice, auxPrice and orderType when the order is modified externally.

  • pull 332: Typo.

Version 0.9.64

  • Fixed: issue 309: Aggregate past fills into the Trade they belong to upon connect.

  • ContFut objects are now hashable (issue 310).

  • Added Watchdog.probeTimeout parameter (issue 307).

Version 0.9.63

  • Fixed issue 282: util.Qt() also works with the ProactorEventLoop (default on Windows) now.

  • Fixed issue 303: A regression in TWS 480.4l+ is bypassed now to avoid IB.connect() timeouts. Request timeouts during syncing are logged as errors but will let the connect proceed.

Version 0.9.62

  • IB.TimezoneTWS field added, for when the TWS timezone differs from the local system timezone (issue 287).

  • IB.RaiseRequestErrors field added, can be set to True to raise RequestError when certain requests fail, instead of returning empty data (pull 296).

  • IB.accountSummaryAsync() method added (issue 267).

  • Watchdog.probeContract field added, to use a contract other then EURUSD for probing the data connection (issue 298).

  • Ticker.rtTime added (issue 274, pull 275). Please note that this timestamp appears to be mostly bogus.

  • Fixed issue 270: Clear ticker depth data when canceling market depth subscription.

  • Fixed issue with duplicate order IDs.

Version 0.9.61

  • Ticker.marketDataType added to indicate the delayed/frozen status of the reqMktData ticks.

Version 0.9.60

  • IB.reqHistoricalData() has a new timeout parameter that automatically cancels the request after timing out.

  • BracketOrder is iterable again.

  • IB.waitOnUpdate() returns False on timeout now.

  • pull 210: Fix decoding of execDetails time.

  • pull 215: New scanner notebook added, courtesy of C. Valcarcel.

  • pull 220: Added readonly option for Watchdog.

  • Fixed issue 221: Delayed close ticks handling by Ticker.

  • Fixed issue 224: Added timeout for completedOrders request during connect.

  • Fixed issue 227: IB.MaxSyncedSubAccounts added.

  • Fixed issue 230: Fixed IB.reqHistogramData method.

  • Fixed issue 235: Order.discretionaryAmt is now of type float (was int).

  • Fixed issue 236: ticker.updateEvent is now fired for any change made to the ticker.

  • Fixed issue 245: Emit trade.statusEvent when order is implicitly canceled by a problem.

  • You can now sponsor the development of IB-insync!

Version 0.9.59

  • PR #205 adds more typing annotations.

  • dataclasses are now used for objects (instead of inheriting from a base Object). For Python 3.6.* install it with pip install dataclasses

Version 0.9.58

  • PR #196 treats error 492 as a warning so that scanner results can still be used.

Version 0.9.57

  • PR #184, #185 and #186 add the new Ticker fields rtTradeVolume, auctionVolume, auctionPrice and auctionImbalance.

  • PR #191 lets util.schedule return a handle that can be canceled.

  • PR #192 adds throttleStart and throttleEnd events to the Client.

  • PR #194 adds better JSON support for namedtuple objects.

Version 0.9.56

  • Fix bug #178: Order.totalQuantity is now float.

Version 0.9.55

  • Sphinx update for documentation.

Version 0.9.54

  • ContractDetails.stockType added.

  • Fixed Trade.filled() for combo (BAG) contracts.

  • Server version check added to make sure TWS/gateway version is at least 972.

Version 0.9.53

  • Fix bug #155 (IB.commissionReportEvent not firing).

  • Help editors with the code completion for Events.

Version 0.9.52

  • Fix Client.exerciseOptions (bug #152).

Version 0.9.51

  • Fix ib.placeOrder for older TWS/gateway versions.

  • Better handling of unclean disconnects.

Version 0.9.50

  • Fix execDetailsEvent regression.

  • Added readonly argument to ib.connect method. Set this to True when the API is in read-only mode.

Version 0.9.49

  • ib.reqCompletedOrders() request added (requires TWS/gateway >= 976). Completed orders are automatically synced on connect and are available from ib.trades(), complete with fills and commission info.

  • Fixed bug #144.

Version 0.9.48

  • Ticker.halted field added.

  • Client.reqFundamentalData fixed.

Version 0.9.47

  • ibapi package from IB is no longer needed, ib_async handles its own socket protocol encoding and decoding now.

  • Documentation moved to readthedocs as rawgit will cease operation later this year.

  • Blocking requests will now raise ConnectionError on a connection failure. This also goes for util.run, util.timeRange, etc.

Version 0.9.46

  • Event class has been replaced with the one from eventkit.

  • Event-driven bar construction from ticks added (via Ticker.updateEvent)

  • Fixed bug #136.

  • Default request throttling is now 45 requests/s for compatibility with TWS/gateway 974 and higher.

Version 0.9.45

  • Event.merge() added.

  • TagValue serialization fixed.

Version 0.9.44

  • Event.any() and Event.all() added.

  • Ticker fields added: tradeCount, tradeRate, volumeRate, avOptionVolume, markPrice, histVolatility, impliedVolatility, rtHistVolatility and indexFuturePremium.

  • Parse ticker.fundamentalRatios into FundamentalRatios object.

  • util.timeRangeAsync() and waitUntilAsync() added.

  • ib.pendingTickersEvent now emits a set of Tickers instead of a list.

  • Tick handling has been streamlined.

  • For harvesting tick data, an imperative code style with a waitOnUpdate loop should not be used anymore!

Version 0.9.43

  • Fixed issue #132.

  • Event.aiter() added, all events can now be used as asynchronous iterators.

  • Event.wait() added, all events are now also awaitable.

  • Decreased default throttling to 95 requests per 2 sec.

Version 0.9.42

  • Ticker.shortableShares added (for use with generic tick 236).

  • ib.reqAllOpenOrders() request added.

  • tickByTick subscription will update ticker’s bid, ask, last, etc.

  • Drop redundant bid/ask ticks from reqMktData.

  • Fixed occasional “Group name cannot be null” error message on connect.

  • Watchdog code rewritten to not need util.patchAsyncio.

  • Watchdog.start() is no longer blocking.

Version 0.9.41

  • Fixed bug #117.

  • Fixed order modifications with TWS/gateway 974.

Version 0.9.40

  • Ticker.fundamentalRatios added (for use with generic tick 258).

  • Fixed reqHistoricalTicks with MIDPOINT.

Version 0.9.39

  • Handle partially filled dividend data.

  • Use secType='WAR' for warrants.

Version 0.9.38

  • ibapi v97.4 is now required.

  • fixed tickByTick wrappers.

Version 0.9.37

  • Backward compatibility with older ibapi restored.

Version 0.9.36

  • Compatibility with ibapi v974.

  • Client.setConnectOptions() added (for PACEAPI).

Version 0.9.35

  • Ticker.hasBidAsk() added.

  • IB.newsBulletinEvent added.

  • Various small fixes.

Version 0.9.34

  • Old event system (ib.setCallback) removed.

  • Compatibility fix with previous ibapi version.

Version 0.9.33

  • Market scanner subscription improved.

  • IB.scannerDataEvent now emits the full list of ScanData.

  • ScanDataList added.

Version 0.9.32

  • Autocompletion with Jedi plugin as used in Spyder and VS Code working again.

Version 0.9.31

  • Request results will return specialized contract types (like Stock) instead of generic Contract.

  • IB.scannerDataEvent added.

  • ContractDetails field summary renamed to contract.

  • isSmartDepth parameter added for reqMktDepth.

  • Event loop nesting is now handled by the nest_asyncio project.

  • util.useQt is rewritten so that it can be used with any asyncio event loop, with support for both PyQt5 and PySide2. It does not use quamash anymore.

  • Various fixes, extensive documentation overhaul and flake8-compliant code formatting.

Version 0.9.30

  • Watchdog.stop() will not trigger restart now.

  • Fixed bug #93.

Version 0.9.29

  • util.patchAsyncio() updated for Python 3.7.

Version 0.9.28

  • IB.RequestTimeout added.

  • util.schedule() accepts tz-aware datetimes now.

  • Let client.disconnect() complete when no event loop is running.

Version 0.9.27

  • Fixed bug #77.

Version 0.9.26

  • PR #74 merged (ib.reqCurrentTime() method added).

  • Fixed bug with order error handling.

Version 0.9.25

  • Default throttling rate now compatible with reqTickers.

  • Fixed issue with ib.waitOnUpdate() in combination. with ib.pendingTickersEvent.

  • Added timeout parameter for ib.waitOnUpdate().

Version 0.9.24

  • ticker.futuresOpenInterest added.

  • execution.time was string, is now parsed to UTC datetime.

  • ib.reqMarketRule() request added.

Version 0.9.23

  • Compatability with Tornado 5 as used in new Jupyter notebook server.

Version 0.9.22

  • updated ib.reqNewsArticle and ib.reqHistoricalNews to ibapi v9.73.07.

Version 0.9.21

  • updated ib.reqTickByTickData() signature to ibapi v9.73.07 while keeping backward compatibility.

Version 0.9.20

  • Fixed watchdog bug.

Version 0.9.19

  • Don’t overwrite exchange='SMART' in qualifyContracts.

Version 0.9.18

  • Merged PR #65 (Fix misnamed event).

Version 0.9.17

  • New IB events disconnectedEvent, newOrderEvent, orderModifyEvent and cancelOrderEvent.

  • Watchdog improvements.

Version 0.9.16

  • New event system that will supersede IB.setCallback().

  • Notebooks updated to use events.

  • Watchdog must now be given an IB instance.

Version 0.9.15

  • Fixed bug in default order conditions.

  • Fixed regression from v0.9.13 in placeOrder.

Version 0.9.14

  • Fixed orderStatus callback regression.

Version 0.9.13

  • Log handling improvements.

  • Client with clientId=0 can now manage manual TWS orders.

  • Client with master clientId can now monitor manual TWS orders.

Version 0.9.12

  • Run IBC and IBController directly instead of via shell.

Version 0.9.11

  • Fixed bug when collecting ticks using ib.waitOnUpdate().

  • Added ContFuture class (continuous futures).

  • Added Ticker.midpoint().

Version 0.9.10

  • ib.accountValues() fixed for use with multiple accounts.

Version 0.9.9

  • Fixed issue #57

Version 0.9.8

  • Fix for ib.reqPnLSingle().

Version 0.9.7

  • Profit and Loss (PnL) funcionality added.

Version 0.9.6

  • IBC added.

  • PR #53 (delayed greeks) merged.

  • Ticker.futuresOpenInterest field removed.

Version 0.9.5

  • Fixed canceling bar and tick subscriptions.

Version 0.9.4

  • Fixed issue #49.

Version 0.9.3

  • Watchdog class added.

  • ib.setTimeout() added.

  • Ticker.dividends added for use with genericTickList 456.

  • Errors and warnings will now log the contract they apply to.

  • IB error() callback signature changed to include contract.

  • Fix for issue #44.

Version 0.9.2

  • Historical ticks and realtime bars now return time in UTC.

Version 0.9.1

  • IBController added.

  • openOrder callback added.

  • default arguments for ib.connect() and ib.reqMktData().

Version 0.9.0

  • minimum API version is v9.73.06.

  • tickByTick support.

  • automatic request throttling.

  • ib.accountValues() now works for multiple accounts.

  • AccountValue.modelCode added.

  • Ticker.rtVolume added.

0.8

Version 0.8.17

  • workaround for IBAPI v9.73.06 for Contract.lastTradeDateOrContractMonth format.

Version 0.8.16

  • util.tree() method added.

  • error callback signature changed to (reqId, errorCode, errorString).

  • accountValue and accountSummary callbacks added.

Version 0.8.15

  • util.useQt() fixed for use with Windows.

Version 0.8.14

  • Fix for ib.schedule().

Version 0.8.13

  • Import order conditions into ib_async namespace.

  • util.useQtAlt() added for using nested event loops on Windows with Qtl

  • ib.schedule() added.

Version 0.8.12

  • Fixed conditional orders.

Version 0.8.11

  • FlexReport added.

Version 0.8.10

  • Fixed issue #22.

Version 0.8.9

  • Ticker.vwap field added (for use with generic tick 233).

  • Client with master clientId can now monitor orders and trades of other clients.

Version 0.8.8

  • barUpdate event now used also for reqRealTimeBars responses

  • reqRealTimeBars will return RealTimeBarList instead of list.

  • realtime bars example added to bar data notebook.

  • fixed event handling bug in Wrapper.execDetails.

Version 0.8.7

  • BarDataList now used with reqHistoricalData; it also stores the request parameters.

  • updated the typing annotations.

  • added barUpdate event to IB.

  • bar- and tick-data notebooks updated to use callbacks for realtime data.

Version 0.8.6

  • ticker.marketPrice adjusted to ignore price of -1.

  • ticker.avVolume handling fixed.

Version 0.8.5

  • realtimeBar wrapper fix.

  • context manager for IB and IB.connect().

Version 0.8.4

  • compatibility with upcoming ibapi changes.

  • added error event to IB.

  • notebooks updated to use loopUntil.

  • small fixes and performance improvements.

Version 0.8.3

  • new IB.reqHistoricalTicks() API method.

  • new IB.loopUntil() method.

  • fixed issues #4, #6, #7.

Version 0.8.2

  • fixed swapped ticker.putOpenInterest vs ticker.callOpenInterest.

Version 0.8.1

  • fixed wrapper.tickSize regression.

Version 0.8.0

  • support for realtime bars and keepUpToDate for historical bars

  • added option greeks to Ticker.

  • new IB.waitUntil() and IB.timeRange() scheduling methods.

  • notebooks no longer depend on PyQt5 for live updates.

  • notebooks can be run in one go (‘run all’).

  • tick handling bypasses ibapi decoder for more efficiency.

0.7

Version 0.7.3

  • IB.whatIfOrder() added.

  • Added detection and warning about common setup problems.

Version 0.7.2

  • Removed import from ipykernel.

Version 0.7.1

  • Removed dependencies for installing via pip.

Version 0.7.0

  • added lots of request methods.

  • order book (DOM) added.

  • notebooks updated.

0.6

Version 0.6.1

  • Added UTC timezone to some timestamps.

  • Fixed issue #1.

Version 0.6.0

  • Initial release.