INTERACTIVE BROKERS DATA PLUGIN
AmiBroker Now supports Real-Time
streaming quotes from Interactive
Brokers TWS
IMPORTANT:
YOU DON'T NEED TO INSTALL the plugin if you installed AmiBroker 5.70
or
later.
It is ALREADY installed by AmiBroker setup.
FEATURES SUMMARY:
- supports
upto 100 streaming symbols in real time (equal to IB TWS limit)
- supports all
base time intervals: 15-,5-,1-minute, 15-,5-second,
tick
- automatic connection (no need to manually "accept incoming connection"
in TWS)
- supports upto 30
(180*) DAYS intraday
data BACKFILL in 1-minute bar interval
- upto
2000 bars backfill using 1-sec/5-sec/15-second bar intervals
- works on all
32-bit Windows versions
* 180 days backfill may be slow due to IB throttling the backfill
requests
NOTE ABOUT IB/TWS
PERFORMANCE:
IB / TWS backfill
is very limited (1 symbol at a
time)
and VERY VERY slow. IB throttles backfills and you can
not
send more than 60 requests within 5 minutes (it equals to one
month of 1-minute data for 12 symbols only).
For much faster
backfills we recommend eSignal or IQFeed.
IMPORTANT SYSTEM
REQUIREMENTS NOTE:
while AmiBroker
itself does not have big requirements (see Getting
Started page ), Interactive
Brokers' TWS is Java-based application that is memory and
CPU hungry.
You would need to have at least
800MHz
CPU to use TWS, see official TWS system requirements
page: http://www.interactivebrokers.com/en/software/requirements.php
IMPORTANT
NOTE ON IB BACKFILL IN TICK MODE:
The
finest resolution of BACKFILLS that Interactive Brokers TWS offers
is 1-SECOND bars (see
TWS API docs here). It means that although
you can collect streaming real-time data in tick format, the backfill
will
always
have resolution
limited to 1-second bars.
Also IB TWS streaming data are NOT tick-by-tick, but rather 0.2-0.3
second snapshots, read this for details: http://www.interactivebrokers.com/cgi-bin/discus/board-auth.pl?file=/2/37364.html
For
this reason we recommend using higher intervals like 5-sec, 15-sec
or better yet 1 minute.
HISTORY:
- 2.0.4
- newest version, released July 12, 2010
For Windows XP, Vista, Windows 7, Windows NT, 98
+ includes a compatiblity fix for TWS 907+
- 2.0.3, released April 20, 2010
For Windows XP, Vista, Windows 7, Windows NT, 98
Upgraded for AmiBroker 5.30 (it is already included in the
setup of AmiBroker 5.30)
- 2.0.2, released
October 2, 2009
for Windows
XP, Vista, Win 7, Win 2000, Win NT, Win98
+ supports 64 bit date/time and float volume/openint (AmiBroker
4.27 and above)
+ on Vista and Windows 7 previous versions of IB plugin crashed
when requesting invalid symbol because AfxIsValidAddress function
is broken
on Vista/Win7.
Fixed by rewriting code not to use AfxIsValidAddress
anymore.
- 1.8.4, released October 26, 2008
+ fix for non-US indices traded with different currencies than
USD
- 1.8.2
released October 23, 2008
+ the plugin now accepts single-letter security type codes in addition
to 3 letter codes. So now security type can be:
S or STK for stocks
F or FUT for futures
O or OPT for options
P or FOP for futures options
C or CASH for currencies (Forex)
I or IND for indices
This is provided to shorten symbols for instruments quoted in non-US
currencies so they fit within maximum 25 character length. For example
"FSMI DEC 08-SOFFEX-F-CHF" (Swiss index futures quoted in CHF)
-
1.8.1 released October 22, 2008
+ due
to possible ambiguity of SMART routing when same symbol is traded with
multiple currencies, IB plugin now allows to specify CURRENCY
in a symbol. The symbol format is now: SYMBOL-EXCHANGE-TYPE-CURRENCY.
+ all symbols that do not have explicit currency specification use
USD now (except forex).
The default currency is USD and it is used when nothing is specified
as 4th part of symbol. So for example MSFT gets internally resolved
to
MSFT-SMART-STK-USD
- 1.8.0
released October 15, 2008 (obsolete - please use 1.8.1)
+ fix to "duplicate
ticker ID" error occuring with newest TWS when more than 5 day backfill was requested
- 1.7.1 released
June 10, 2008
+
Extended backfill upto 180 days (experimental / may be slow / subject
to IB throttling) (one-year backfill removed because of instability)
- 1.7.0 released
May 8, 2008
+ Open
price available in RT quote window (for stocks)
+ Extended backfill 180+ days (experimental / may be slow / subject
to IB throttling)
+ Better automatic reconnection handling on network disconnection
+ Updated error code handling (code 162 - data pacing violation)
+ Updated to use new TWS API 9.41
- 1.6.8
released October 10, 2006
+ decreased
CPU load during backfill
+ decreased CPU load during high activity periods
+ upgraded
to newest TWSAPI 9.0 and tested with newest TWS 863 as well
as 862 and 861.
- 1.6.6 released
July 6, 2006
+ PrimaryExchange
is now set to empty string and only local symbol is used when
requesting data. This solves "Invalid symbol" problem occuring for
some accounts during last 2 weeks following apparent changes in IB.
- 1.6.7 released
March 31, 2006
+ now
streaming connection uses small buffer, while backfill connection
uses large buffer
+ added protection against stopping backfill when user scrolls through
symbol list and invalid ticker is encountered
- 1.6.0 released
March 30, 2006
+ added handling of TWS error message = 300 (can't find Eid)
+ added handling of TWS error message = 165 (HDMS disconnect) - allows
to workaround TWS throttling
+ added "Cancel Backfill" menu option
+ added "Minimum" backfill length that backfills in less than a day
if you have already some data from today
+ most recently selected backfill length is stored between session
+ added separate connection for backfill to workaround TWS problems
with hanging backfills plus automatic reconnection if backfill times
out or HDMS disconnects
+ added some runtime checks for valid pointers to workaround TWS
bug of sending incorrect IDs for certain messages
+ quotes after backfill are flushed from plugin memory
+ added get_quotes notification for use in future versions of AmiBroker
- 1.5.1
released January 31, 2006
+ fixed problem with -IND symbols (bug appeared in 1.5.0)
+ 1.4.4 socket code re-used (newer one was working fine on all but
one machine)
- 1.5.0 released
January 27, 2006
+ 1-minute backfill length is now extended to upto 30 days,
user selectable
from RIGHT mouse button menu over plugin status area.
(Note that due to TWS limitation
backfills longer than 5 days are splitted into chunks of 5 days and downloaded
sequentially)
+ Implemented workaround to IB weird way of sending tickSize events
Problem was that IB sometimes repeats many times the same tick and sometimes
skips some ticks and cumulate them into one tickSize LAST_SIZE event.
This is because IB feed was NOT designed as tick-by-tick and never intended
to create time&sales series, but rather solely to
update TWS display grid.
Now the plugin tries to workaround this weirdness by ignoring duplicate tickSize
LAST_SIZE events (with the same size) and correcting
missing ticks usign CUMULATIVE volume sent with tickSize VOLUME event. Correction
is needed because without it we would end up
having incorrect total volume (sometimes real trades may have same events so
multiple REAL ticks may have same price/size,
unfortunatelly there is no way to detect whenever it is real trade or duplicate
generated by IB, so correction according to cumulative
volume is the only way to go).
+ plugin
now accepts "O" and "OP" as type specification
and treats it as "OPT"
This allows to get quotes for some options
that have very long symbols (exceeding 26 characters allowed by AB).
For example
to get DAX options use this symbols:
C
ODAX MAR 06 5500-DTB-O
P ODAX MAR 06 5500-DTB-O
(note that there are TWO spaces between 06 (year code) and 5500 (price).)
+ Fixed some
problems with Microsoft's CSocket buggy implementation
+ IB API error
message 165 is used now to detect whenever backfill is available
or not (demo account for example does not offer backfill)
- 1.4.4
released October 19, 2005
+ core
API parts rewritten to use fast buffered sockets - gives upto 10x
performance improvement
(previous versions used EClientSocket code supplied as
a part of TWS API. Unfortunatelly this code was using single-byte-at-a-time
read from socket and it was terrible performance hog when backfills
were longer than one day. New buffered socket code is able to read
upto 4096 bytes at once)
- 1.4.3
released October 14, 2005
+ full
5-day backfill for all symbols (1-minute bar interval)
+ IDEALPRO now uses MIDPRICE instead of BID to get cleaner backfill,
but user can switch back to BID in config screen.
- 1.4.2 released June 16th, 2005
This version
offers slightly improved performance (less CPU usage)
- 1.4.1 released June 13th, 2005
This version fixes real-time update for IDEALPRO (forex) market, i.e.
symbols like
EUR.USD-IDEALPRO-CASH are updated correctly in real time.
(IB does not send last trade price/size updates for Forex so BID price
is used instead)
- 1.4.0 released May 1st, 2005
supports backfill (read
below for the details),
does not require any API installation.
Already included with full setup of AmiBroker 4.70.5
Known issues:
a) backfill is not available on DEMO accounts (this is the limitation
of TWS)
b) backfill data for some symbols may not be present at IB servers
c) UseRTH (backfill extended hours on/off switch) does not seem to
be working (bug in TWS reported to IB already)
d) TWS supports only ONE backfill at a time, so plugin prevents
from triggering more.
e) TWS only allows certain amounts of data to be downloaded depending
on base time interval
For more details please read TWS API BETA Release Notes
INSTRUCTIONS:
NOTE: Interactive
Brokers TWS is CPU-hungry application, therefore for best results
we recommend using machine
with 1GHz processor or faster.
To use Interactive Brokers
data plugin with AmiBroker you need to:
- YOU
DON'T NEED TO INSTALL the plugin if you installed AmiBroker 5.70
or later. It is ALREADY included.
download
IB plugin from:
http://www.amibroker.com/bin/ib204/IB.dll
Current
STABLE version of IB.DLL: 2.0.4
and copy
it to PLUGINS subfolder of AmiBroker
directory.
- run web-based
TWS or download standalone TWS
- In TWS, select Configure -> API -> Enable Active X and Socket clients
Also enter 127.0.0.1 in TWS, Configure->API->Trusted
IP addresses menu to prevent "Allow incoming connection?" dialog.
- Run AmiBroker
and create new database with Interactive Brokers plugin as a data
source, following these steps:
-
Run AmiBroker
-
Choose File->New
database
-
Type a new
folder name (for example: C:\Program Files\AmiBroker\IB ) and click
Create as shown in the picture below:
-
Choose InteractiveBrokers(r)
data Plug-in from Data source combo and "Enable" from Local data storage
-
Enter 30000
or more into "Number of bars to load" field
-
Now choose
Base time interval. Supported intervals are: EOD, hourly, 15-minute,
5-minute, 1-minute. Professional Edition of AmiBroker allows also
to select Tick, 5-second, 15-second intervals.
Note that backfill is in bar interval of 1-minute or less (TWS
limitation).
If you want to have long daily histories AND intraday charts
you should consider running TWO instances of AmiBroker. One for
EOD
charts and
second for intraday charting. Both instances may use IB
as a data source.
-
Click OK.
From now on your
AmiBroker reads quotes directly from the Interactive Brokers.
SYMBOLOGY
Symbol format now uses the symbol mode of TWS, not the underlying
mode. The symbol mode in TWS can be seen in the 'View->Symbol
Mode'
menu option in TWS.
The format is: SYMBOL-EXCHANGE-TYPE-CURRENCY
where
SYMBOL is the same as the symbol column as displayed in TWS while
under symbol mode
EXCHANGE (optional) is the exchange d in TWS while under symbol mode
TYPE (optional) is one the following:
STK or S - stocks,
FUT or F- futures,
FOP or P - options on futures,
OPT or O - options,
IND or I - indexes,
CASH or C -cash (ideal FX)
Note that for stocks only the EXCHANGE and TYPE fields
are optional. The exchange will be set to BEST (SMART) and the TYPE
will be set to
STK. Note that SINGLE LETTER type codes are allowed ONLY in version
1.8.2 and above.
CURRENCY (optional - ONLY plugin version 1.8.1 and above
) - is the currency that given symbol is traded with. The default
for STK, FUT, FOP, OPT, IND types is USD (US dollar). The default currency
for CASH (forex) is empty.
Please take special
care when typing symbols as some of them (futures) have MULTIPLE
SPACES in the symbol name. You have to type EXACTLY THE SAME number
of spaces as provided in the examples below
(see the dashes below symbol name that make it easier to see the
number of characters)
Examples:
IB SYMBOL |
Type |
Description |
CSCO |
Stock |
Cisco Corporation, Nasdaq |
GE |
Stock |
General Electric, NYSE |
VOD-LSE |
Stock |
VODAFONE GROUP, London
Stock Exchange |
ESM1-GLOBEX-FUT |
Future |
Emini ES
Jun 2011 futures, Globex |
QQQFJ-CBOE-OPT |
Option |
Jun 04, 36.0 CALL option QQQFJ |
SPX-CBOE-IND |
Index |
SP-500 |
INDU-NYSE-IND |
Index |
Dow Jones Industrials Index |
YM JUN 11-ECBOT-FUT
--- - |
Future |
YM Jun 2011
future, ECBOT
(note 3 spaces between symbol and month and 1 space between month
and year) |
QMN5-NYMEX-FUT |
Future |
QM (Crude) June 2005 future contract, NYMEX |
FGBL DEC 11-DTB-FUT-EUR |
Future |
German Dec 2011 Bund future |
XAUUSD-SMART-CMDTY |
Commodity |
London Gold
Spot (requires plugin version 2.0.6) |
IBUS500-SMART-CFD-USD
|
CFD (contract
for difference) |
IB US500
contract for difference (requires plugin version 2.0.6) |
EUR.USD-IDEAL-CASH
EUR.USD-IDEALPRO-CASH |
Cash Forex |
EURUSD currency pair, IDEAL
EURUSD currency pair, IDEALPRO |
Again:
ECBOT futures
symbols have length of 21 characters with 3 spaces between contract
symbol and month name and one space between month and 2 digit year
Contract |
3 spaces |
Month |
spa
ce |
Year |
- |
E |
C |
B |
O |
T |
- |
F |
U |
T |
Z |
B |
|
|
|
J |
U |
N |
|
0 |
4 |
- |
E |
C |
B |
O |
T |
- |
F |
U |
T |
Z |
F |
|
|
|
J |
U |
N |
|
0 |
4 |
- |
E |
C |
B |
O |
T |
- |
F |
U |
T |
Z |
N |
|
|
|
J |
U |
N |
|
0 |
4 |
- |
E |
C |
B |
O |
T |
- |
F |
U |
T |
Y |
M |
|
|
|
J |
U |
N |
|
0 |
4 |
- |
E |
C |
B |
O |
T |
- |
F |
U |
T |
NOTES
ON IB API LIMITATIONS:
1. Backfill
is available for REAL IB accounts only (not on demo)
2. Open price
is NOT provided by IB.
For that reason Open field is empty in real
time quote window 3. The data from
IB does not include a timestamp on the trades. The current
system time is used to timestamp each tick.
4. IB TWS
streaming data are NOT tick-by-tick, but rather 0.2-0.3 second
snapshots, read this for details: http://www.interactivebrokers.com/cgi-bin/discus/board-auth.pl?file=/2/37364.html
HOW
TO USE BACKFILL FEATURE
Backfill feature in plugin 1.3.7 allows to download 24 intraday historical
data to fill-in the gaps that may have occurred when AmiBroker / TWS
is not running.
IB Backfill feature is configurable
from File->Database Settings,
Configure :
Two main backfill-related settings are:
1. request length
2. automatic backfill
When request
length is considered, as explained in TWS API Release Notes at: http://www.interactivebrokers.com/en/software/apiReleaseNotes/apiBetanotes.php currently
IB backfill feature is limited to some fixed duration / bar
interval ranges. For example you can get maximum 2000 1-second ticks,
maximum 10000 seconds in 5-second interval (2000 bars), maximum 30000
seconds in 15-second interval (also 2000 bars) and maximum
of 5 DAYS of 1-minute bars.
By default AmiBroker
uses maximum allowable amounts.
As for "automatic backfill on first data access" - when it is checked
AmiBroker attempts to backfill symbol when you display a chart for
given symbol (or perform backtest or scan). Please note that TWS API
currently allows only one backfill at a time so when there is a backfill
already running in the background, automatic backfill request for next
symbol will be ignored, until previous backfill is complete.
It is convenient to have this option turned on, however it can cause
additional load on your internet connection because of data needed
to be downloaded during backfill process.
If you switch "automatic backfill on first data access" option off,
you will still be able to backfill data for current symbol or all symbols
in real-time quote window list usign appropriate menu options from
plugin status menu.
Backfill Current option
allows to force backfill of currently selected symbol, while Backfill All RTQ symbols allow
to force backfill of all symbols listed in Real-Time Quote window. Backfill
of multiple symbols is performed sequentially (one at a time) due to
limitations of TWS.
During backfilling a tooltip
pops up informing the user about symbol being currently backfilled
and plugin status color changes to light
blue (turquoise) as shown below:
|