GithubHelp home page GithubHelp logo

suood / order-matching-demo Goto Github PK

View Code? Open in Web Editor NEW

This project forked from matthiaszimmermann/order-matching-demo

0.0 3.0 0.0 11 KB

Demo for Order Matching Alogrithm for continuous Trading

License: MIT License

Java 100.00%

order-matching-demo's Introduction

Java Demo Trading Platform

Demo for Order Matching Alogrithm for continuous Trading according to Stackoverflow.

Main Classes

  • BuyOrder: order that specifies "thing", quantity and price the buyer tries to buy
  • SellOrder: order that specifies "thing", quantity and price the sellers is prepared to sell
  • OrderBook: contains all buy and sell orders that have not yet been executed, can execute orders
  • Participant: represents clients that submit buy and sell orders to the order book

Order Book Dynamics

Illustration of an instance/state of an order book (without matching orders)

Id   Side    Time   Qty   Price   Qty    Time   Side  
---+------+-------+-----+-------+-----+-------+------
#3                        20.30   200   09:05   SELL  
#1                        20.30   100   09:01   SELL  
#2                        20.25   100   09:03   SELL  
#5   BUY    09:08   200   20.20                       
#4   BUY    09:06   100   20.15                       
#6   BUY    09:09   200   20.15

After adding a matching order (BUY, Qty:250, Price:20.35) at 10:11, the order book will look like this

Id   Side    Time   Qty   Price   Qty    Time   Side  
---+------+-------+-----+-------+-----+-------+------
#3                        20.30   200   09:05   SELL  
#1                        20.30   100   09:01   SELL  
#2                        20.25   100   09:03   SELL
#7   BUY    10:11   250   20.35
#5   BUY    09:08   200   20.20                       
#4   BUY    09:06   100   20.15                       
#6   BUY    09:09   200   20.15

In the order book a buyer is now represented that is prepared to pay 20.35 which machtes with the seller that is prepared to sell for 20.25. In this implementation, the order book calculates the price average for matching orders. Iteratively executing matches the following sequence of transactions follows:

  • SELL order #2 is (fully) executed for Qty: 100 and Price:20.30
  • BUY order #7 is (partially) executed for Qty: 100 and Price:20.30 (remaining quantity: 150)
  • SELL order #1 is (fully) executed for Qty: 100 and Price: 20.325
  • BUY order #7 is (partially) executed for Qty: 100 and Price 20.325 (remaining quantity: 50)
  • SELL order #3 is (partially) executed for Qty: 50 and Price 20.325 (remaining quantity: 150)
  • BUY order #7 is now completed for the remaining Qty 50 for Price 20.325

At the end, this leaves the order book in the following state:

Id   Side    Time   Qty   Price   Qty    Time   Side  
---+------+-------+-----+-------+-----+-------+------
#3                        20.30   150   09:05   SELL  
#5   BUY    09:08   200   20.20                       
#4   BUY    09:06   100   20.15                       
#6   BUY    09:09   200   20.15

Prerequisites to run the Demo

  • Java
  • Maven
  • Git

Run the Demo

  • Clone the repo to some directory
  • cd into the directory
  • run Maven
mvn clean verify

This should lead to an output similar to:

...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.matthiaszimmermann.trading.OrderBookTest
Matching order: D symbol BUY 250 20.35 fba68f99-0b32-43e6-90b4-81c3ad1b8129
A symbol SELL 100 20.25 8811aae1-da5c-4dfc-9b97-7df771458ded full: true 100 20.3
D symbol BUY 150 20.35 fba68f99-0b32-43e6-90b4-81c3ad1b8129 full: false 100 20.3
Matching order: D symbol BUY 150 20.35 fba68f99-0b32-43e6-90b4-81c3ad1b8129
A symbol SELL 100 20.3 5c058e92-cf9a-42a7-b4f7-9cb0a584d11b full: true 100 20.325000000000003
D symbol BUY 50 20.35 fba68f99-0b32-43e6-90b4-81c3ad1b8129 full: false 100 20.325000000000003
Matching order: D symbol BUY 50 20.35 fba68f99-0b32-43e6-90b4-81c3ad1b8129
B symbol SELL 150 20.3 081f303f-9c64-4fdf-b4b0-025b037c009f full: false 50 20.325000000000003
D symbol BUY 50 20.35 fba68f99-0b32-43e6-90b4-81c3ad1b8129 full: true 50 20.325000000000003
Matching order: D symbol BUY 50 20.35 fba68f99-0b32-43e6-90b4-81c3ad1b8129
Matching order: D symbol BUY 50 20.35 fba68f99-0b32-43e6-90b4-81c3ad1b8129
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.257 sec

Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ OrderMatchingDemo ---
[INFO] Building jar: c:\github\order-matching-demo\target\OrderMatchingDemo-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.793 s
[INFO] Finished at: 2017-03-09T00:12:26+01:00
[INFO] Final Memory: 15M/269M
[INFO] ------------------------------------------------------------------------

Yay :-)

order-matching-demo's People

Watchers

James Cloos avatar 向往青天白日的风 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.