IB's timestamps are likely generated from IB's server and not the exchange's timestamp.? I've watched IB server time via reqCurrentTime() and usually observe the server time drifting slower over the course of 4-5 minutes until its about 1 sec behind.? Then it resets back to the correct time and the process repeats.?
While not tick-by-tick, reqMktData will return a timestamp with milliseconds but it has the same time drift problem.? Millisecond precision isn't very useful if the accuracy is only 1000 ms.