Quote from dcraig:
I don't know any these software products, so it's quite hard for me to say. As you know I have my own code with it's own frame work, so it's not really possible to separate out the stuff that deals directly with the book, because it is highly dependent upon the general event handling, time series and charting interfaces. It is not unlikely that these look very different to the commercial offerings as I started from from scratch and didn't use any product as a model. Some might describe some of it as 'quirky' and they might be right! It's also Java and runs on Linux, though Windows should not be a problem in principle.
As to what I do, I take the raw DOM event events from the IB TWS API and use them to build a continuously updated DOM table in memory. It's not real hard to do.
The events are:
INSERT (a level)
DELETE (a level)
UPDATE (a Level)
FLUSH (whole book)
I turn this into a time series by using a price time series as a time base (eg tick, volume or price bars). When changes occur on the reference price time series (eg bar changes or bar appended), I sample the (in memory) book appropriately updating the order book time series. This is the part that you are likely going to have the most issues with if you are writing a DLL or such for a commercial package and it will be highly dependent on the product you are interfacing with.
I can then apply smoothers on the orderbook series just as I can on any other time series via user's GUI in normal use.
You could try some sort of direct smoothing or averaging in the in memory DOM table. It might be a bit better - and it may not! Complex often is not necessarily better.
I have been having a look at the IQFeed API, and it works differently from TWS. I'd like to be able to create a single 'normalized' API and map any LII feed onto my internal LII API and so remove feed dependencies from higher level software. Not sure if it is possible. In aby case, I'm in for a bit of a code restructure.