FYI, here's a basic description of how the IB datafeed works. I've snipped it from a recent post by Richard King in the TWS-API users group. It is, I believe, pretty accurate, and the best description I've ever read. Kudos to Richard.
" 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). There is an irritating side effect of this technique, which is that price movements between shapshots may not be reported at all: for example if the last price at snapshot 1 is 100, and then price moves up to 102 and then back to 101 by snapshot 2, the price reported at snapshot 2 will be 101, and the 102 price will not be reported at all. This leads to occasional incorrect highs and lows of bars, but rarely by more than one tick: whether that is significant depends very much on the trading strategy used. The above isn't a complete description, but it covers the basic mechanism. And there are no timestamps in the IB data stream. " chuck
