RU
rupeshgoswami/limit_market_order_book_java
Limit and market order book in Java with unit test
๐ Limit Order Book Engine
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_java2. Compile
mvn compile3. Run
mvn exec:java4. 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
- GitHub: @rupeshgoswami
๐ License
This project is licensed under the MIT License.