Access market/portfolio data and submit trade orders in Matlab via Interactive-Brokers (IB), using the IB-Matlab application.
IB-Matlab provides an easy-to-use Matlab interface to InteractiveBrokers, enabling quants, algo traders and ordinary folk to easily leverage Matlab’s superior analysis and visualization capabilities, with the IB low-cost trading platform for stocks, ETFs, mutual funds, bonds, options, futures, commodities and Forex.
While IB’s Java connector, which is provided by IB, can be used directly in Matlab, setting up the event callbacks and data conversions between Matlab and the connector is definitely not easy. You need to be familiar with both Matlab AND Java, at least to some degree.
Other applications that solve these problems are either expensive, not supported, or limited in functionality or deployment. For example, ActiveX solutions only work properly on 32-bit Windows and even then lose some events and are relatively slow. matlab2ib quant2ib
IB-Matlab solves the IB-to-Matlab connectivity problem with an easy-to-use Matlab interface that works out-of-the-box on all Matlab platforms (Win32, Win64, Mac, Linux). It outshines the alternatives in terms of performance, reliability, features, stability, deployment, compatibility, cost and overall value.
Don’t take our word for it – request your fully-functional free trial version today, and check for yourself!
Main features of IB-Matlab
- Full solution – IB-Matlab is an inexpensive application that enables simple Matlab access to the entire IB API functionality.
- Connectivity – IB-Matlab enables users to connect Matlab to TWS or the IB Gateway, on the Matlab’s computer or on a different computer.
- Stability – IB-Matlab has been installed, tested and used by hundreds of traders since 2010. IB-Matlab is reportedly used to actively trade over $100,000,000 daily (this is not a typo – USD 100 million). It is rock solid.
- Inexpensive – IB-Matlab is extremely inexpensive compared to other connectors of its kind and to the amount of time that would be needed to develop a custom application from scratch. A fully-functional free trial version is available (see below).
- Easy to use – Users can activate IB’s API by simple Matlab commands, without any need to know Java (on which the API is based) nor Matlab programming. IB-Matlab simplifies the IB API in a very easy-to-use yet powerful interface that can be used by any Matlab user, novice or advanced.
- Entire API functionality –
- Active trading actions: buy, sell, short, modify, cancel
- Numerous settable contract and order attributes
- Market query actions: current market data, scanner filter, streaming quotes, real-time bars, historical and intraday data
- Account query actions: account info, portfolio list, open orders, executions data
- IB events: all ~40 asynchronous events that are sent by the IB server are accessible in Matlab (see below)
- Novice and advanced users – Users can use either simple one-line Matlab commands, or internal objects exposed by IB-Matlab, to access the full range of IB’s API.
- Multiple (FA) accounts – Users can easily connect to multiple IB accounts from a single Matlab session/script.
- Remote access – IB-Matlab can either be installed on the same platform as the IB-client, or on a different machine that will connect to the IB client remotely.
- Event callbacks – Users can easily attach Matlab code (callbacks) to IB events. For example, this enables special operations such as adding an entry in an Excel file, sending an SMS (text message) or email, whenever an order is fully or partially executed, or a specified price is reached.
- Additional functionality – IB-Matlab also provides functionality that is not readily available in the basic IB API: the ability to specify automated trading; specifying custom trades such as brackets or combo spreads; automatically changing unfulfilled limits based on the momentary bid/ask prices; and changing order types at a certain time.
- Compatibility –
- Platforms: IB-Matlab works on all platforms on which Matlab runs: Windows (both 32 and 64 bits), Mac, Linux/Unix.
- Matlab: IB-Matlab works on all Matlab releases since R2006a, including the latest release (R2014b).
- IB clients: IB-Matlab works with both Trading WorkStation (TWS) and the IB Gateway.
- IB API: IB-Matlab works with all IB installations since 2009, including the latest IB API (9.71), and the latest IB clients. Other IB installations (past and future) are also generally supported.
- Performance – IB-Matlab is optimized for performance, providing fast and responsive connectivity. While Matlab as a platform is not well-suited for HFT, IB-Matlab still enables placing multiple requests per second, and receiving dozens of streaming quotes or other IB messages per second.
- Security – IB-Matlab does not transmit any information externally except to IB, so your portfolio and trading information are as safe as your own computer.
- Development – IB-Matlab was developed by an acknowledged Matlab expert, who wrote the textbook bible on Matlab-Java interfacing.
- Support – Custom development and ongoing support is available directly from the developer, with extremely fast response times.
- Client base – IB-Matlab is actively used by hundreds of traders, ranging from individual traders, to hedge funds and banks.
- Backtesting – IB-Matlab does not include backtesting functionality, but can easily integrate with either WFAToolbox or TA Developer backtesting and analysis applications, which can be used to develop, test and deploy trading algorithms, all within the Matlab environment.
No other solution provides this rich set of features – not even close. Shop around and see for yourself. In fact, we are so confident that you will not find a better product, that we are happy to help your search: you can start here. When you are satisfied, come back here to get your free trial. You will not be disappointed.
Free trial version
A fully-functional free trial version is available – just request your trial and you will get a no-obligations copy with detailed installation and usage instructions. There are absolutely no strings attached: the trial is completely free and fully functional, just limited in duration.
In order to use the trial, you need an active IB account. Since the trial is time-limited, it makes sense to ask for the trial only when you have the IB account ready.
- Quick-reference help
- Full User Guide (PDF)
- Syntax details and usage examples
- Questions & Answers
- Real-time trading system demo that uses IB-Matlab, presented at the MATLAB Computational Finance Conference in New York in May 2013, and at the MATLAB Computational Finance Virtual Conference in Sep 2013 (presentation slides, demo source-code, webinar video).
- Two reviews of IB-Matlab were published in the Automated Trader magazine (2011, 2012). The full reviews (PDF) are available for download here (2011, 2012).
- IB’s online API Guide
Pricing and support
The license for a single user on a single computer for the first year costs $399. This includes installation support, fixing bugs, and any fixes that may be required due to IB API changes.
Annual renewal (including license, support and maintenance) for each following year costs $99.
|To purchase the software license ($399), click here.|
You will be taken to PayPal’s secure checkout to complete the purchase.
To purchase the annual renewal ($99), click here.
Please email if you require any of the following:
- A fully-functional free trial version
- Multi-year license
- Perpetual license
- Volume (multi-computer) license
- Deployment (compiled) license
- Development (source-code) license
- Custom development of features
The following testimonials appear on IB’s Marketplace, where IB-Matlab is one of the highest-rated products (scroll down a bit to get to the IB-Matlab box):
- “Excellent. Saves $1600 from Mathworks’ built-in solution.” – muller
- “A quality product at a good price. I find it to work better and in a more flexible way than Matlab’s own IB toolbox.” – Vasastan
- “IB-Matlab allows me to perform fully automated trading, using my own developed code. Yair’s support is very professional. I highly recommend it.” – wimvwijn
- “IB-Matlab is a tremendous product. The documentation is outstanding and Yair is INCREDIBLY responsive to any questions or issues which arise.” – wgpCap
- “I found Yair Altman readily reachable when I have questions and the product has performed well.” – hwshiau
- “IB-Matlab lets you harness the depth and efficiency of MATLAB! It’s intuitive, robust, full-featured, and affordable. Great documentation and support.” – JTrade
- “IBMatlab is a professional Matlab TWS API interface. It works very reliable and is easy to use. The support is very client focused and supportive.” – drepl
- “Excellent product, responsive support and very useful examples/documentation to get you up and running without much work. Highly recommend!” – CharlesM
- “Robust product, user-friendly, hard to say no with the price and level of support. Highly recommended.” – stephenw
- “Great product! Stable platform, very flexible, great support, and easily scaled to implement any automated trading strategy. Well worth the money!” – BenM
- “Worth every dime and excellent support. The possibilities with the combination Matlab/IB seem limitless. The resulting mac system is extremely stable.” – onmac
- “Great product that allows one to utilize the power and flexibility of Matlab to create automated systems.” – jbusse00
- “Good product (IBMatlab): Good range of functionality, Good performance, Good documentation and very good support from Yair.” – unbroken
- “As a former control system engineer, I used MATLAB. I was very excited to hear about IBMatlab. IBMatlab works! Highly recommend!” – kiscl
All these quotes are from real IB traders, who took the time to comment about IB-Matlab on IB’s website. Numerous other traders have provided similar statements by email.
Don’t take our word for it – try it out for yourself!
[orderId,ibConnectionObject,contract,order] = IBMatlab(varargin)
Possible inputs parameters:
- varargin = Matlab struct or fieldname/value pairs with the following optional fields:
- Connection: ClientId, Host, Port, AccountName, FAProfile
- Action: one of Buy, Sell, SShort, Query, Cancel, Account, History, Realtime, Scanner, Portfolio or License
- Query type: one of OPEN [for the list of open orders], EXECUTIONS [for the list of today's executions]
- Order type: one of MKT, MKTCLS, LMT, LMTCLS, PEGMKT, STP, STPLMT, MIT, TRAIL, REL, TWAP, VWAP, GuarranteedVWAP, TRAILLIMIT, etc. – see full list here and detailed explanations here; note that IB does not allow some combinations of orders and securities
- Order data: Action, Quantity, TIF, LimitPrice, AuxPrice, OCAGroup, ParentId, TrailStopPrice, GoodAfterTime, GoodTillDate, BracketDelta, BracketTypes, TriggerMethod, OutsideRTH, OrderId, Hold, Timeout
- TWAP/VWAP order data: StrategyType, MaxPctVol, StartTime, EndTime, AllowPastEndTime, NoTakeLiq
- Combo order data: ComboActions, ComboRatios, ComboBagSymbol
- Automated order data: LimitBasis, LimitDelta, LimitRepeatEvery, LimitUpdateMode, LimitChangeTime, LimitChangeType, Tick
- Contract data: Symbol, LocalSymbol, SecType, Exchange, Currency, Expiry, Strike, Right
- Historical data: EndDateTime, DurationValue, DurationUnits, BarSize, WhatToShow, UseRTH, FormatDate (note IB’s pace limitations)
- Streaming quotes data: QuotesNumber, QuotesBufferSize, ReconnectEvery, GenericTickList
- Scanner parameters: Type, ParametersType, AbovePrice, AboveVolume, AverageOptionVolumeAbove, BelowPrice, CouponRateAbove, CouponRateBelow, ExcludeConvertible, Instrument, LocationCode, MarketCapAbove, MarketCapBelow, MaturityDateAbove, MaturityDateBelow, MoodyRatingAbove, MoodyRatingBelow, NumberOfRows, ScanCode, ScannerSettingPairs, SPRatingAbove, SPRatingBelow, StockTypeFilter
- Event callbacks: CallbackFunction, CallbackAccountDownloadEnd, CallbackAccountSummary, CallbackAccountSummaryEnd, CallbackBondContractDetails, CallbackCommissionReport, CallbackConnectionClosed, CallbackContractDetails, CallbackContractDetailsEnd, CallbackCurrentTime, CallbackDeltaNeutralValidation, CallbackExecDetails, CallbackExecDetailsEnd, CallbackFundamentalData, CallbackHistoricalData, CallbackManagedAccounts, CallbackMarketDataType, CallbackMessage, CallbackNextValidId, CallbackOpenOrder, CallbackOpenOrderEnd, CallbackOrderStatus, CallbackPosition, CallbackPositionEnd, CallbackTickPrice, CallbackTickSize, CallbackTickString, CallbackTickGeneric, CallbackTickEFP, CallbackTickOptionComputation, CallbackTickSnapshotEnd, CallbackRealtimeBar, CallbackReceiveFA, CallbackScannerData, CallbackScannerDataEnd, CallbackScannerParameters, CallbackUpdateAccountTime, CallbackUpdateAccountValue, CallbackUpdateMktDepth, CallbackUpdateMktDepthL2, CallbackUpdateNewsBulletin, CallbackUpdatePortfolio
- General: LogFileName, MsgDisplayLevel
- orderId = -1 if unsuccessful, otherwise the ID of the placed order, or data for ‘QUERY’ actions
- ibConnectionObject = reference of Java object that interfaces with IB
- contract = object that holds contract info for Buy/Sell actions when Hold=1 (see example 10 below)
- order = object that holds order info for Buy/Sell actions when Hold=1 (see example 10 below)
Representative usage examples of IB-Matlab are available here. The following examples are available:
- Buy stock
- Sell stock
- Get portfolio data
- Get account data
- Get market data (snapshot) for a particular security
- Get historical data
- Get streaming quotes data
- Get realtime bars data
- Get scanner filter data
- Accessing, modifying and cancelling open orders
- Specify event callback – ExecDetails
- Specify event callback – TickGeneric
- Using the underlying Java connection object
THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, LOSS OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
(detailed disclaimer is available in IB-Matlab’s User Guide)