The RandomOrderMan sample demonstrates the order handling programming using QWFIX Order Manager for both buy side and sell side applications.
RabdomOrderMan consists of two processes, a client as buy side and a server as sell side. There are 4 FIX sessions between the client and the server, running FIX 4.1, 4.2, 4.3 and 4.4, respectively. The client side sends out random new orders and random "Order Cancel Request" and "Random Replace Request". The sell side sends back random "Execution Report" or "Cancel Reject".
Since the release of QWFIX version 1.5. Support for list orders and order status request/response has been added to the demo.
The sample code shows how easy it is to build a FIX version independent order management system with QWFIX, for both buy side and sell side.
RandomOrderMan sample demonstrates high performance FIX version transparent order management with QWFIX SDK. With QWFIX SDK, developer usually only needs to maintain 50-500 lines of code in order to manage the entire intra-day order flow, across all asset classes and all versions of FIX protocols.
Combining our Order Manager SDK and Visual Lambda business rule engine, implementing sophisticated order management system becomes easier than ever.
Running client on a 2.6 GB Intel Core i7 workstation with 7200 RPM hard drive and the server on a desktop with 2.4G Intel Core 2 Duo and 10,000 RMP hard drive, the system is able to process over 20,000 FIX messages per second.
The more CPU cores and memory the system has, the better performance. For most of the system, over 10,000 FIX messages per second is far more than enough. Nowadays machines with 16 or 32 CPU cores and 128/256 GB memory is becoming really inexpensive. 50,000 - 100,000 FIX messages per second is possible on a machine like that. Also please keep in mind that QWFIX achieves the performance with superior manageability and flexibility.
QWFIX Order Manager SDK has built in fail over recovery mechanism. As long as the system hardware is not crashed. The system will automatically recover from the previous state during start process after process crash. Order status and business logic is fully recovered without a single message loss.
Try to kill any processe (or both) whenever you want, for as many time as you want (preferably under heaviest load), and restart it.
Our OMS performs deterministic recovery from completely dead zero state, without loss of any single message.
Feel free to abuse the sample processes!
Using the "QWFIX RTAnalyzer" monitoring tool, the intra-day order flow of multiple processes can be visualized and managed in real-time. QWFIX RTAnalyzer allows user to inject Visual Lambda Rules into running process during runtime. Try to use our builtin rules to to test dynamic order rejection by symbol.
Remember, QWFIX also provides API (.Net and Java) to remotely manage the order flow (and everything else). You can just copy and paste the code, with changes of three parameters (FIX engine name, IP address and port). Then you will get a collection of intra-day order flow in a remote machine, updating in real time. A "for-loop" enumerates every order.
With QWFIX, what you see is what you trade!
QWFIX comes with several different flavors, QWFIX.Net, QWFIX_J, QWFIX_RTSJ and QWFIX_C++. 100% interoperability is maintained among different flavors.
Not only do all GUI based configuration and management tools work with all different flavors, Visual Lambda also works for all flavors.
Same applications of different programming language and platform are even interchangeable. Try to kill the .Net version of RandomOrderMon process and start the Java version, or vice versa. The process will take over seemlessly.
You should be able to see something like this: