IB Data is not a real data feed as others have said here.
First off understand that the "Ticks" are reported in two seperate events - one for price and one for size.
Further, a report or event is only fired if one of the prior paramters change, either price, type or size of the tick.
That is to say that you could have 10 trades at the same price and size, and you will only get the first event firing on your client.
Imagine the havoc that such a model creates with two asynchronous events fireing only on data changes in this scenario :
10 trades go off for different sizes but the same price(10 Size Event)s
10 trades go off for the same size and price (2 Events Fired,1 size, 1 price)
10 trades fo off for the same size but a different price (10 Price Events)
2 trades go off for different size and prices (4 Events Fired, 2 size, 2 price)
In this case we have 32 trades, and yet we have recorded 26 events (13 size events and 13 price events.
Further still, the tick data is not time stamped.
Attempting to use IB Data for tick analysis or time & sales is a futile excercise at best, and is exacerbated by the asynchronous nature of the data reporting.
Real tick data is delivered to a single delegate or event handler and is comprised of a single object or structure that contains all of the information for the tick event, no matter how redundent it may be.
As to aggregated volume, typically real data feeds will provide a method or event to listen to that continually updates the details of the symbol or contract as they change. Once the symbol has been subscribed to, the feed sends packets to the event when any parameter changes for the symbol - volume for instance, or high of the day.
There are rough and sloppy workarounds for the IB Data, that some use to draw charts and track data.
An example would be as some stated to synch your clock up and create your own internal bar or candle closing event, at which point the IB servers could be repolled for the historcal chart data, and then your bar or candle 'zero' than gets it new data from the tick data flowing in over the next bar period.
In this way your historical bar volume will be up to date.
However, any aggregated volume data you collected over the bar period is flawed to the point of being useless. Your trade count data is also useless for it is not real.
The bottom line is that IB Data is fine for display in grid style displays, but as data feed it is at best a poor mans solution.
The best use of IB Data in charts is to use a real feed for historical and real time updates, and then use the IB Data to reconcile that data - seeing as its the IB Data that ultimatley determines the execution prices your getting through IB.
Thats my opinion, and speak from a bit of experience.
Scott
Owner - IB TWS API Yahoo Forum