> Warning: This is a 'breaking" release. Applications that use previous versions of Liquibook may need some rework to use this release.
New Functionality
- Full support for MARKET orders.
Previous versions provided limited support for market orders but there were flaws, for example when two market order traded with each other, the price was reported as zero. Liquibook now maintains the current market price for a security and uses it to execute market-to-market orders (among other things.)
- Support for STOP LOSS orders
A STOP LOSS order is held by Liquibook until the market price reaches a specified target price. At that point the order is placed on the market and becomes an ordinary order.
> Stop order support is still preliminary -- it needs more work.
- Better support for All Or None (AON) orders.
The previous order-match algorithm used only the incoming order to attempt to match AON orders that were already on the market. This prevented Liquibook from identifying and executing certain trades. In particular when three orders were involved in the same trade (one or more of them being AON) the order in which those orders arrived determined whether the trade actually happened.
> Warning: There are still cases in which AON orders will not generate trades even though it would be theoretically possible to do so. In particular if a trade would require two or more orders from _both_ sides of the market, then Liquibook will not find it. This limitation is still there because resolving it would involve a serious performance degradation (unless we come up with a better algorithm -- stay tuned.)
- New Manual Order Entry example program.
The QucikFAST-based publish/subscribe example program is not particularly easy to build and run. QuickFAST itself has a lot of build dependencies which must be satisfied to get the example program working.
A new example program named mt_order_entry lets you experiment with Liquibook by entering orders directly from the console (or by reading them from script files) to see what results Liquibook will produce. It also serves as a good example of how your application should interact with Liquibook.
Structural changes and Bug Fixes
- Header-only Library.
It is no longer necessary to build a Liquibook library and link that with your application. Because Liquibook makes heavy use of templates, all the necessary code is contained in header files rather than in cpp files. Putting Liquibook on your include path and `including` the necessary header files is all it takes to use Liquibook.
- No need to call the `perform_callbacks()` or `move_callbacks()` methods.
Callbacks will be generated automatically while processing requests. Requiring that the application explicitly request callbacks led to various timing issues (i.e. bugs.)
- General clean up.
Various issues with previous versions of Liquibook have identified and corrected. See the "git log" for details on these.