Create a connection to the IB Trader Workstation℠ and create a market order based on historical and current data for a security. You can also create orders for a different instrument, such as a futures contract.
Before creating the connection, you must enter your credentials and run the IB Trader Workstation℠ application.
To run this example, you must have the Financial Toolbox™ installed.
Ensure the IB Trader Workstation℠ application is running, and that API connections are enabled. Follow these steps in IB Trader Workstation℠.
To open the Trader Workstation Configuration (Simulated Trading) dialog box, select File > Global Configuration.
Select API > Settings.
Ensure that the Enable ActiveX and Socket Clients check box is selected.
Connect to the IB Trader Workstation℠ and create connection ib
using the local host and default port number 7496
.
ib = ibtws('',7496);
When the Accept incoming connection attempt
message appears in the IB Trader Workstation℠, click Yes.
Create the IB Trader Workstation℠ IContract
object ibContract
. This object specifies the security. Retrieve data for Microsoft® stock. Specifying SMART
as the exchange lets Interactive Brokers® determine which venue to use for data retrieval. To clarify any ambiguity, set the primary exchange for the destination to NASDAQ
. To retrieve dollar-denominated stock, set the currency type to USD
. Setting currency type is useful when stocks are dual-listed or multi-listed across different jurisdictions.
ibContract = ib.Handle.createContract; ibContract.symbol = 'MSFT'; ibContract.secType = 'STK'; ibContract.exchange = 'SMART'; ibContract.primaryExchange = 'NASDAQ'; ibContract.currency = 'USD';
Define the date range for the last 20 business days, excluding today. To calculate the appropriate start and end dates, this code uses the daysadd
function from Financial Toolbox™.
bizDayConvention = 13; % i.e. BUS/252
currentdate = today;
startDate = daysadd(currentdate,-20,bizDayConvention);
endDate = daysadd(currentdate,-1,bizDayConvention);
Retrieve historical data for the last 20 business days.
histTradeData = history(ib,ibContract,startDate,endDate);
The history
function accepts additional parameters that let you obtain other historical data such as option-implied volatility, historical volatility, bid prices, ask prices, or midpoints. If you do not specify anything, last traded prices return by default.
Retrieve current price data from the contract.
currentData = getdata(ib,ibContract)
currentData = struct with fields: LAST_PRICE: 62.8500 LAST_SIZE: 1 VOLUME: 41273 BID_PRICE: 62.8400 BID_SIZE: 17 ASK_PRICE: 62.8600 ASK_SIZE: 12
The IB Trader Workstation℠ supports various order types, including basic types such as limit orders, stop orders, and market orders.
Create the IB Trader Workstation℠ Iorder
object ibMktOrder
. This object specifies the order. To buy shares, specify the action BUY
. To specify buying 100 shares, set totalQuantity
to 100. To create a market order, specify the order type as MKT
.
ibMktOrder = ib.Handle.createOrder; ibMktOrder.action = 'BUY'; ibMktOrder.totalQuantity = 100; ibMktOrder.orderType = 'MKT';
Set a unique order identifier and send the order to Interactive Brokers®.
id = orderid(ib); result = createOrder(ib,ibContract,ibMktOrder,id)
result = struct with fields: STATUS: 'Submitted' FILLED: 0 REMAINING: 100 AVG_FILL_PRICE: 0 PERM_ID: '1621177315' PARENT_ID: 0 LAST_FILL_PRICE: 0 CLIENT_ID: 0 WHY_HELD: ''
You can trade various instruments using the IB Trader Workstation℠ API, including equities, futures, options, futures options, and foreign currencies.
ibFutures
is the E-mini Standard and Poor's 500 futures contract on the CME Globex with a December 2013 expiry. Specify the symbol as ES
, the security type as a futures contract FUT
, the expiry as a YYYYMM
date format, the exchange as GLOBEX
, and the currency as USD
.
ibFutures = ib.Handle.createContract; ibFutures.symbol = 'ES'; ibFutures.secType = 'FUT'; ibFutures.expiry = '201312'; % Dec 2013 ibFutures.exchange = 'GLOBEX'; ibFutures.currency = 'USD';
Retrieve futures data and send orders using the getdata
and createOrder
functions.
close(ib)
close
| createOrder
| getdata
| history
| ibtws