%\VignetteIndexEntry{IBrokersRef} \documentclass{article} % IBrokers Reference Card version 0.2-7 % Copyright 2010 Jeffrey A. Ryan % Extending the excellent vi-ref card design to the R package % IBrokers % % %%%%%%% original GPL and copyright %%%%%%% % Copyright 2002-2005 Donald Bindner % 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 2 % 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, write to the Free Software % Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. \usepackage{multicol} \usepackage{color} \definecolor{eWrapper}{rgb}{1,0.49,0.13} \definecolor{func}{rgb}{0,0,0.6} \usepackage[landscape, margin=0.5in]{geometry} \setlength{\parindent}{0 in} \begin{document} \thispagestyle{empty} \fontsize{9}{10}\selectfont \newcommand{\key}[2]{#1 \hfill \texttt{\color{func} #2}\par} \newcommand{\head}[1]{{\normalsize\textbf{#1}}\\} \newcommand{\ewrappers}[1]{eWrapper methods:\par {\textsl{\color{eWrapper} #1}}\\} \newcommand{\Rclass}[1]{\mbox{\textit{#1}}} \newcommand{\Rfunc}[1]{\mbox{\texttt{#1}}} \begin{multicols}{3} <>= options(continue=" ") @ {\Large IBrokers Reference Card}\\ {\small IBrokers \Sexpr{packageVersion("IBrokers")}; TWS API 9.64} \vskip 15pt \vbox{\head{IBrokers R API Overview} The IBrokers API parallels the official Java API provided by Interactive Brokers, LLC to access data and execution services provided to IB clients. Commands can be run interactively or automated.\par \vskip 8pt The official API documentation is grouped by \mbox{\textsl{EClientSocket}} methods, \mbox{\textsl{EWrapper}} methods, and \mbox{\textsl{SocketClient}} objects. This document combines all related objects and methods into groups by functionality. \vskip 8pt Where appropriate, \textsl{eWrapper} methods for processing incoming messages from related calls are listed. } \vskip 10pt \vbox{\head{Connection and Server} Connecting to either the TWS or IB Gateway requires setting connection parameters external to IBrokers. Once enabled, the following commands can be used for connections and details. \vskip 5pt \key{connect}{twsConnect, ibgConnect} \key{disconnect}{twsDisconnect, close} \key{check connection}{is.twsConnection, isConnected} \key{set logging level}{setServerLogLevel} \key{check server version}{serverVersion} \key{request current time}{reqCurrentTime} \key{request connection time}{twsConnectionTime} } \vskip 10pt \vbox{\head{Contracts} All requests require validly constructed \Rclass{twsContract} objects. The basic function to create a valid object is \Rfunc{twsContract}, though IBrokers implements wrapper functions to simplify commonly requested types such as equity, cash, and futures. Depending on the context the constructors may need more or less detail. \vskip 5pt \key{create any contract}{twsContract} \key{create equity contract}{twsEquity, twsSTK} \key{create equity option contract}{twsOption, twsOPT} \key{create future contract}{twsFuture, twsFUT} \key{create future option contract}{twsFutureOpt, twsFOP} \key{create currency contract}{twsCurrency, twsCASH} \key{create combo}{twsBAG, twsComboLeg} \key{create contract for difference}{twsCFD} } \vskip 10pt \vbox{\head{Contract Details} Given a full or partial \Rclass{twsContract}, returns a list of \Rclass{twsContractDetails} objects; named lists containing contract details including a \texttt{contract} element of class \Rclass{twsContract}. Many IBrokers calls will accept \texttt{Contract} arguments of \Rclass{twsContract} or \Rclass{twsContractDetails}.\par \vskip 5pt \key{request contract(s) description}{reqContractDetails} \key{extract \Rclass{twsContract} from details}{as.twsContract} \vskip 5pt \ewrappers{contractDetails, bondContractDetails, contractDetailsEnd} } \vskip 10pt \vbox{\head{Market Data} Market Data provides for nearly real-time data from Interactive Brokers. Data is actually aggregated into one-third second `snapshot' data from the exchange, and subsequently passed along to the client.\par \vskip 5pt \key{request market data and process}{reqMktData} \key{request market data (only)}{.reqMktData} \key{cancel market data}{cancelMktData} \vskip 5pt \ewrappers{tickPrice, tickSize, tickOptionComputation, tickGeneric tickString, tickEFP, tickSnapshotEnd} } \vskip 10pt \vbox{\head{Market Depth} Depth of book varies according to contract, and may not be available for all security types.\par \vskip 5pt \key{request market depth data}{reqMktDepth} \key{cancel market depth data}{cancelMktDepth} \vskip 5pt \ewrappers{updateMktDepth, updateMktDepthL2} } \vskip 10pt \vbox{\head{Real Time Bars} Real-time bars are limited to 5-second bars by the official API. All other \texttt{barSize} values will fail. Realtime bars may not be available for all security types.\par \vskip 5pt \key{request real-time bars}{reqRealTimeBars} \key{cancel real-time bars}{cancelRealTimeBars} \vskip 5pt \ewrappers{realtimeBars} } \vskip 10pt \vbox{\head{Historical Data} Depending on the contract, only specific combinations of \texttt{barSize} and \texttt{duration} arguments are valid, and some security types have no historical data. \Rfunc{reqHistory} is an IBrokers only call, allowing for one year of 1 minute bars, respecting IB timeouts (10 seconds) and maximum bars per request (2000).\par \vskip 5pt \key{request historical data}{reqHistoricalData} \key{request maximum history}{reqHistory} \key{cancel historical request}{cancelHistoricalData} \vskip 5pt Valid \texttt{barSize} values include: \texttt{1 secs}, \texttt{15 secs}, \texttt{1 min}, \texttt{2 mins}, \texttt{3 mins}, \texttt{5 mins}, \texttt{15 mins}, \texttt{30 mins}, \texttt{1 hour}, \texttt{1 day}, \texttt{1 week}, \texttt{1 month}, \texttt{3 months}, \texttt{1 year}. \vskip 5pt Valid \texttt{duration} form is \textit{`n S'}, where \textit{n} is the number of periods of \textit{S}. The second argument may be \texttt{S} (seconds), \texttt{D} (days), \texttt{W} (weeks), \texttt{M} (months), \texttt{Y} (year). Year requests are limited to 1 year. } \vskip 10pt \vbox{\head{Fundamental Data} Reuters fundamental data \vskip 5pt \key{request fundamental data}{reqFundamentalData} \key{cancel fundamental data}{cancelFundamentalData} \vskip 5pt \ewrappers{fundamentalData} } \vskip 10pt \vbox{\head{News Bulletins} Subscribe to news bulletins from Interactive Brokers. \vskip 5pt \key{subscribe}{reqNewsBulletins} \key{unsubscribe}{cancelNewsBulletins} \vskip 5pt \ewrappers{newsBulletins} } \vskip 10pt \vbox{\head{Pricing} Calculate option values, price and implied volatility, via the TWS engine. \vskip 5pt \key{calculate option price}{calculateOptionPrice} \key{calculate option volatility}{calculateImpliedVolatility} \vskip 5pt \ewrappers{tickOptionCalculation} } %\newpage \vskip 10pt \vbox{\head{Orders} Orders via the IB API, and the IBrokers API, require three primary components: A \Rclass{twsContract} object, a \Rclass{twsOrder} object, and a \Rfunc{placeOrder} call. Additionally, a valid \mbox{orderId} is required to the twsOrder object. This is found by calling \Rfunc{reqIds} on the twsConnection object. reqIds operates directly on the connection object by retrieving and then incrementing the next valid order id in the connection object.\par \vskip 5pt \key{next valid order id}{reqIds} \key{create order object}{twsOrder} \vskip 5pt \key{place order}{placeOrder} \key{cancel order}{cancelOrder} \vskip 5pt \key{exercise options}{exerciseOptions} \vskip 5pt \key{open orders}{reqOpenOrders} \key{all open orders}{reqAllOpenOrders, reqAutoOpenOrders} \vskip 5pt \ewrappers{orderStatus, openOrder, nextValidId, execDetails} \vskip 5pt <>= placeOrder(twsconn=tws, Contract=twsSTK("AAPL"), Order=twsOrder(reqIds(tws), "BUY", 10, "MKT")) @ } \vskip 10pt \vbox{\head{Account} Account data is requested on a subscription basis. The user subscribes to a continuously updated feed from the TWS by passing the connection object and the \texttt{subscribe} argument set to \texttt{TRUE}; unsubscribe with \texttt{FALSE}. The \texttt{.reqAccountUpdates} function will return immediately and will begin or end a subscription; account messages must be handled by the user. \texttt{reqAccountUpdates} (without the prepended `dot') will subscribe, collect data, and unsubscribe -- returning an \texttt{AccountUpdate} object which may be processed with \texttt{twsPortfolioValue}. \vskip 5pt \key{get account data}{reqAccountUpdates} \key{subscribe account updates (only)}{.reqAccountUpdates} \key{cancel account updates}{cancelAccountUpdates} \vskip 5pt \key{view portfolio}{twsPortfolioValue} \vskip 5pt \ewrappers{updateAccountValue, updatePortfolio, \mbox{updateAccountTime}, accountDownloadEnd} } \vskip 10pt \vbox{\head{Executions} Returns execution details in a \textit{twsExecution} object. This method is currently only implemented as a request, with no built-in mechanism to manage response data apart from it being discarded. \vskip 5pt \key{request execution data}{reqExecutions} \key{filter argument}{reqExecutionFilter} \vskip 5pt \ewrappers{execDetails, execDetailsEnd} } \vskip 10pt \vbox{\head{Financial Advisors} Funtions for FA-enabled accounts \vskip 5pt \key{request list of accounts}{reqManagedAccts} \key{request FA configuration (XML)}{requestFA} \key{change FA configuration}{replaceFA} \vskip 5pt \ewrappers{managedAccts, receiveFA} } \vskip 10pt \vbox{\head{Scanner} Interactive Brokers scanner data ... \vskip 5pt \key{scanner params (XML)}{reqScannerParameters} \key{scanner subscription object}{twsScannerSubscription} \key{return scanner results}{reqScannerSubscription} \vskip 5pt \key{subscribe to scanner}{.reqScannerSubscription} \key{unsubscribe to scanner}{cancelScannerSubscription} \vskip 5pt \ewrappers{scannerParameters, scannerData} } \vskip 10pt \vbox{\head{eWrapper} eWrappers contain the callback methods for all incoming message types. These are closures in R that contain functions and data. These functions are called based on incoming message types from the TWS. \vskip 5pt \key{new eWrapper}{eWrapper} \key{market data to vector(s)}{eWrapper.data} \key{market data to csv}{eWrapper.MktData.CSV} \vskip 5pt } \vskip 10pt \vbox{\head{DISCLAIMER} IBROKERS IS NOT ENDORSED, AFFILIATED, OR CONNECTED TO INTERACTIVE BROKERS, LLC. INTERACTIVE BROKERS IS TRADEMARKED AND PROPERTY OF INTERACTIVE BROKERS, LLC. \vskip 5pt IBROKERS COMES WITH NO WARRANTY, EXPRESSED OR IMPLIED, AND IS FOR USE \emph{AT YOUR OWN RISK}. } \vskip 10pt \vbox{\small Copyright 2010. Jeffrey A. Ryan} \end{multicols} \end{document}