I meant exactly what I said: IB doesn't report every trade, for any
instrument in any exchange.
The IB datafeed is optimised to ensure that it keeps up with the market no
matter how busy the market is.
To accomplish this, it effectively sends a price snapshot for each
instrument at regular intervals. This interval seems to be about 300
milliseconds. For each of bid, ask, and last it compares the current price
and size with the values at the last snapshot. If the price is different it
sends both price and size. If the price is the same, but the size is
different it sends only the size. If both price and size are the same, it
doesn't send either. If there have been any trades since the last snapshot,
it sends the (accumulated) volume (so where the price and size haven't
changed but there have been one or more trades, this can be detected from
the increased volume).
By doing this, IB knows the maximum bandwidth required for each ticker, and
hence for each customer (since the number of tickers is limited), and so it
can size its servers to be able to cope with that load. If a market becomes
very busy, it makes no difference because it will still only send an update
three times a second or thereabouts, even if there have been 100 trades
during that second. This avoids the problem that every other data feed seems
to have, where the data will sometimes lag way behind the market at busy
times (with every other vendor I've used, I've had occasions where the data
could be anything up to two or three minutes behind the market).