GitHunt
RU

rupeshgoswami/limit_market_order_book_java

Limit and market order book in Java with unit test

๐Ÿ“Š Limit Order Book Engine

Java Maven Tests License Status

A production-grade Limit Order Book engine implemented in Java โ€” the core component of every stock exchange (NSE, BSE, NYSE, NASDAQ).


๐Ÿ“Œ Overview

Every trade you make on a stock exchange goes through a Limit Order Book. This engine:

  • Accepts buy and sell orders from traders
  • Organizes them by price and time priority
  • Automatically matches buyers with sellers
  • Executes trades when prices agree
  • Handles partial fills and cancellations

โœจ Features

  • โœ… Limit order placement (buy and sell)
  • โœ… Market order instant execution
  • โœ… Automatic order matching engine
  • โœ… Partial fill handling
  • โœ… Order cancellation by ID
  • โœ… Price-Time priority (FIFO)
  • โœ… Real-time spread and mid price
  • โœ… Full trade history recording
  • โœ… 27 unit tests โ€” all passing

๐Ÿ“ How It Works

Price-Time Priority:

Same price?      โ†’ First order placed wins (FIFO)
Different price? โ†’ Best price wins
BUY:  Higher price = better priority
SELL: Lower price  = better priority

Matching Rule:

TRADE happens when:
BID price >= ASK price
Trade executes at RESTING order price

Order Types:

LIMIT  โ†’ Wait for specific price or better
MARKET โ†’ Execute immediately at best price

๐Ÿ—‚๏ธ Project Structure

limit_order_book_java/
โ”œโ”€โ”€ pom.xml
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ data/
โ”‚   โ””โ”€โ”€ sample_orders.csv
โ””โ”€โ”€ src/
    โ”œโ”€โ”€ main/java/com/trading/lob/
    โ”‚   โ”œโ”€โ”€ Main.java
    โ”‚   โ”œโ”€โ”€ model/
    โ”‚   โ”‚   โ”œโ”€โ”€ Order.java
    โ”‚   โ”‚   โ”œโ”€โ”€ OrderSide.java
    โ”‚   โ”‚   โ”œโ”€โ”€ OrderType.java
    โ”‚   โ”‚   โ””โ”€โ”€ Trade.java
    โ”‚   โ”œโ”€โ”€ book/
    โ”‚   โ”‚   โ”œโ”€โ”€ OrderBook.java
    โ”‚   โ”‚   โ”œโ”€โ”€ PriceLevel.java
    โ”‚   โ”‚   โ””โ”€โ”€ MatchingEngine.java
    โ”‚   โ””โ”€โ”€ display/
    โ”‚       โ””โ”€โ”€ BookDisplay.java
    โ””โ”€โ”€ test/java/com/trading/lob/
        โ”œโ”€โ”€ OrderBookTest.java
        โ”œโ”€โ”€ MatchingEngineTest.java
        โ””โ”€โ”€ PriceLevelTest.java

๐Ÿš€ How to Run

1. Clone the repository

git clone https://github.com/rupeshgoswami/limit_order_book_java.git
cd limit_order_book_java

2. Compile

mvn compile

3. Run

mvn exec:java

4. Test

mvn test

๐Ÿ“Š Sample Output

==========================================
      LIMIT ORDER BOOK ENGINE
==========================================

--- SCENARIO 1: Building the Book ---
+------------------------------------------+
|    LIMIT ORDER BOOK - RELIANCE           |
+------------------------------------------+
|   BID (BUY)         | ASK (SELL)         |
|  Qty      Price     | Price      Qty     |
+--------------------+---------------------+
|   500   2500.00     | 2501.00   300      |
|  1000   2499.00     | 2502.00   500      |
|   750   2498.00     | 2503.00   200      |
+--------------------+---------------------+
| Best Bid  : 2500.00                      |
| Best Ask  : 2501.00                      |
| Spread    : 1.00                         |
| Mid Price : 2500.50                      |
| Orders    : 6                            |
+------------------------------------------+

--- SCENARIO 2: Full Match ---
  TRADE EXECUTED: 300 shares @ 2501.00

--- SCENARIO 3: Partial Match ---
  TRADE EXECUTED: 500 shares @ 2502.00

--- SCENARIO 4: Market Order ---
  TRADE EXECUTED: 200 shares @ 2500.00

--- SCENARIO 5: Cancel Order ---
  Cancel result: SUCCESS

==========================================
  Total Orders Processed : 9
  Total Trades Executed  : 3
==========================================

๐Ÿงช Test Results

-----------------------------------------------
 T E S T S
-----------------------------------------------
OrderBookTest        โ†’ Tests run: 11, Failures: 0
MatchingEngineTest   โ†’ Tests run:  9, Failures: 0
PriceLevelTest       โ†’ Tests run:  7, Failures: 0
-----------------------------------------------
Total: 27 | Failures: 0 | Errors: 0
BUILD SUCCESS
-----------------------------------------------

๐Ÿ› ๏ธ Data Structures

Structure Java Type Purpose Performance
Bid side TreeMap (reverse) Sorted high to low O(log n)
Ask side TreeMap (natural) Sorted low to high O(log n)
Order lookup HashMap Find order by ID O(1)
Price level queue LinkedList FIFO order priority O(1)

๐Ÿ“š Key Operations

Operation Performance Description
Add order O(log n) Insert at correct price level
Cancel order O(1) Remove by order ID
Match orders O(1) Best bid vs best ask
Get best bid O(1) Highest buy price
Get best ask O(1) Lowest sell price
Get spread O(1) Ask minus bid

๐Ÿ› ๏ธ Tech Stack

Tool Version Purpose
Java 17 Core language
Maven 3.x Build management
JUnit 5 5.10.0 Unit testing

๐Ÿ‘ค Author

Rupesh Goswami


๐Ÿ“„ License

This project is licensed under the MIT License.

rupeshgoswami/limit_market_order_book_java | GitHunt