Releases: enewhuis/liquibook
Major release includes new capabilities and reorganized source code.
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()
ormove_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.
Last Version 1 release
- Add version number information to source (liquibook::Version class).
- Create manual order entry example/test program (mt_order_entry)
- Order book knows and uses current market price.
- Repair Market order handling. Market orders can trade with each other at market price.
- Add preliminary STOP LOSS order support.
- Logging (order book dump) can be directed to any ostream.
- Order book is aware of the symbol it is managing.
- Optional: Order is aware of its own conditions (AON, IOC).
- #define LIQUIBOOK_ORDER_KNOWS_CONDITIONS to enable.
- Source code reorganization.
- Separate files for (some) separate classes.
- Hide (some) implementation details (may be a breaking change if anyone was depending on them.)
Fixing build issues.
- Fixed the winenv.bat file to do a more comprehensive job of setting up the windows environment.
- Added mpc.bat batch file to run mpc.
- Add winenv_clear.bat batch file to undo the results of winenv.bat so it can be re-run with different environment settings.
- Added a Windows-only replacements for the *nix functions clock_gettime() and sleep()
- Added asio_safe_include.h to include ASIO on windows without nasty error messages.
- Updated .gitignore to be windows/visual studio aware.
- Disabled examples and QuickFAST dependancies in the .features file (by default).
- Partial fixes for warnings on 64 bit builds.
- Partial fixes for warnings about testing non-boolean values in if statements etc.
Release 1.1.0
- Added release notes.
- Added example depth_feed_publisher.
- Added DepthOrderBook, so depth tracking can be part of core of liquibook.
- Implemented generic callback handling, now subclasses may not need to implement.
- Added BboListener, to receive callbacks for top of book events only.
- Added TradeListener, to receive trade callbacks.
- Changed OrderBookListener template param from OrderPtr to OrderBook.
- Fixed some edge case order book callback crashes.
Initial commit in OCI GitHub repository.
New Project: Order match engine