MATLAB Answers

0

Trading Toolbox - Retrieve Option Chain from Interactive Brokers

Asked by qmnjb007 on 1 Sep 2017
Latest activity Answered by Yair Altman on 4 Jan 2019
I'm trying to use the Interactive Brokers functionality below to return an option chain including all strike prices and expires for a given security. Is this possible to do this with Matlab's Trading Toolbox? I can't seem to make it work in Matlab R2017a. Thanks.
https://interactivebrokers.github.io/tws-api/options.html#option_chains

  0 Comments

Sign in to comment.

2 Answers

Answer by qmnjb007 on 7 Sep 2017
 Accepted Answer

Turns out this is very easy to do with Yahoo Finance...
function d = getchain(ticker)
% DESCRIPTION: This function retrieves all stikes prices and expiry dates
% from yahoo finance for a given ticker input.
%
% REFERENCES
% https://www.mathworks.com/matlabcentral/fileexchange/50455-getyahoooptionchain
% https://stackoverflow.com/questions/38680008/how-can-i-download-option-tables-using-the-yahoo-finance-api/40243903#40243903
data = webread(['https://query1.finance.yahoo.com/v7/finance/options/' ticker]);
expys = datetime(data.optionChain.result.expirationDates,'ConvertFrom','posixtime','Format','MM-dd-yyy')
strks = data.optionChain.result.strikes
end

  1 Comment

The above works well, thanks for posting. I noticed it only returns 1 option series. The yahoo web page has a selection box for other series. Any ideas on how to read the other option series? Thanks.

Sign in to comment.


Answer by Yair Altman on 4 Jan 2019

Here's how you can fetch the full option chain using the IB-Matlab connector, for example all futures options for the 10-year US Treasury Note (ZN) that have a contract month of March 2019 (which trade on the ECBOT exchange):
>> dataStruct = IBMatlab('action','contract', 'symbol','ZN', 'secType','FOP', 'expiry','201903', 'exchange','ecbot')
dataStruct =
220×1 struct array with fields:
m_conId
m_symbol
m_secType
m_expiry
m_strike
m_right
m_multiplier
m_exchange
m_currency
...
>> dataStruct(1)
ans =
struct with fields:
m_conId: 322823677
m_symbol: 'ZN'
m_secType: 'FOP'
m_expiry: '20190222'
m_strike: 97
m_right: 'C'
m_multiplier: '1000'
m_exchange: 'ECBOT'
m_currency: 'USD'
m_localSymbol: 'C OZN MAR 19 9700'
m_primaryExch: []
m_includeExpired: 0
m_secIdType: []
m_secId: []
m_comboLegsDescrip: []
m_comboLegs: [0 java.util.Vector]
m_underComp: []
m_summary: [1×1 com.ib.client.Contract]
m_marketName: 'OZN'
m_tradingClass: 'OZN'
m_minTick: 0.015625
m_priceMagnifier: 1
m_orderTypes: 'ACTIVETIM,ADJUST,ALERT,ALLOC,AVGCOST,BASKET,COND,CONDORDER,DAY,DEACT,DEACTDIS,DEACTEOD,GAT,GTC,GTD,GTT,HID,IOC,LIT,LMT,LTH,MIT,MKT,MTL,NGCOMB,NONALGO,OCA,SCALE,SCALERST,SNAPMID,SNAPMKT,SNAPREL,STP,STPLMT,TRAIL,TRAILLIT,TRAILLMT,TRAILMIT,VOLAT,WHATIF'
m_validExchanges: 'ECBOT'
m_underConId: 322458860
m_longName: '10 Year US Treasury Note'
m_contractMonth: '201903'
m_industry: []
m_category: []
m_subcategory: []
m_timeZoneId: 'CST'
m_tradingHours: '20190102:1700-20190103:1600;20190103:1700-20190104:1600;20190105:CLOSED;20190106:1700-20190107:1600;20190107:1700-20190108:1600;20190108:1700-20190109:1600;20190109:1700-20190110:1600;20190110:1700-20190111:1600;20190112:CLOSED;20190113:1700-20190114:1600;20190114:1700-20190115:1600;20190115:1700-20190116:1600;20190116:1700-20190117:1600;20190117:1700-20190118:1600;20190119:CLOSED;20190120:1700-20190121:1600;20190121:1700-20190122:1600;20190122:1700-20190123:1600;20190123:1700-20190124:1600;20190124:1700-20190125:1600;20190126:CLOSED;20190127:1700-20190128:1600;20190128:1700-20190129:1600;20190129:1700-20190130:1600;20190130:1700-20190131:1600;20190131:1700-20190201:1600;20190202:CLOSED;20190203:1700-20190204:1600;20190204:1700-20190205:1600;20190205:1700-20190206:1600'
m_liquidHours: '20190103:0830-20190103:1600;20190104:0830-20190104:1600;20190105:CLOSED;20190106:CLOSED;20190107:0830-20190107:1600;20190108:0830-20190108:1600;20190109:0830-20190109:1600;20190110:0830-20190110:1600;20190111:0830-20190111:1600;20190112:CLOSED;20190113:CLOSED;20190114:0830-20190114:1600;20190115:0830-20190115:1600;20190116:0830-20190116:1600;20190117:0830-20190117:1600;20190118:0830-20190118:1600;20190119:CLOSED;20190120:CLOSED;20190121:0830-20190121:1600;20190122:0830-20190122:1600;20190123:0830-20190123:1600;20190124:0830-20190124:1600;20190125:0830-20190125:1600;20190126:CLOSED;20190127:CLOSED;20190128:0830-20190128:1600;20190129:0830-20190129:1600;20190130:0830-20190130:1600;20190131:0830-20190131:1600;20190201:0830-20190201:1600;20190202:CLOSED;20190203:CLOSED;20190204:0830-20190204:1600;20190205:0830-20190205:1600;20190206:0830-20190206:1600'
...
>> dataStruct(2)
ans =
struct with fields:
m_conId: 322823681
m_symbol: 'ZN'
m_secType: 'FOP'
m_expiry: '20190222'
m_strike: 97.5
m_right: 'C'
m_multiplier: '1000'
m_exchange: 'ECBOT'
m_currency: 'USD'
m_localSymbol: 'C OZN MAR 19 9750'
...
You can filter the results by specifying a combination of the Expiry, Strike, Multiplier and/or Right parameters. For example, to limit ZN options only to Calls that have Strike=100 (i.e., fetch all the 11 active expiration dates):
>> dataStruct = IBMatlab('action','contract', 'symbol','ZN', 'secType','FOP', 'exchange','ecbot', 'Right','Call', 'Strike',100)
dataStruct =
11×1 struct array with fields:
m_conId
m_symbol
m_secType
m_expiry
m_strike
m_right
m_multiplier
m_exchange
m_currency
...
>> {dataStruct.m_expiry}
ans =
1×11 cell array
Columns 1 through 6
{'20190222'} {'20190125'} {'20190104'} {'20190111'} {'20190102'} {'20190109'}
Columns 7 through 11
{'20190118'} {'20190524'} {'20190322'} {'20190426'} {'20190823'}
For additional details, see https://undocumentedmatlab.com/ib-matlab

  0 Comments

Sign in to comment.