Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
lpthong90 committed Feb 23, 2024
1 parent 6bbe63c commit caf36db
Show file tree
Hide file tree
Showing 14 changed files with 125 additions and 174 deletions.
42 changes: 0 additions & 42 deletions helper.py

This file was deleted.

48 changes: 28 additions & 20 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
from order_book import (OrderData, OrderBook, Order, SideType, MatchingEngine)
from helper import (
update_matching_engine,
)

orders_data = [
OrderData(id=None, price=1, volume=3, side=SideType.BUY),
OrderData(id=None, price=2, volume=2, side=SideType.BUY),
OrderData(id=None, price=3, volume=1, side=SideType.BUY),

OrderData(id=None, price=4, volume=1, side=SideType.SELL),
OrderData(id=None, price=5, volume=2, side=SideType.SELL),
OrderData(id=None, price=6, volume=3, side=SideType.SELL),
]
order_book = OrderBook()
matching_engine = MatchingEngine(order_book)
matching_engine, orders = update_matching_engine(matching_engine, orders_data)

matching_engine.cancel_order(orders[1])
matching_engine.cancel_order(orders[4])
from order_book import (Order, SideType, MatchingEngine)


matching_engine = MatchingEngine()

order_buy_1, trades_1 = matching_engine.add_order(Order(price=1, quantity=3, side=SideType.BUY))
print("trades_1", trades_1)
order_buy_2, trades_2 = matching_engine.add_order(Order(price=2, quantity=2, side=SideType.BUY))
print("trades_2", trades_2)
order_buy_3, trades_3 = matching_engine.add_order(Order(price=3, quantity=1, side=SideType.BUY))
print("trades_3", trades_3)

order_sell_1, trades_4 = matching_engine.add_order(Order(price=4, quantity=1, side=SideType.SELL))
print("trades_4", trades_4)
order_sell_2, trades_5 = matching_engine.add_order(Order(price=5, quantity=2, side=SideType.SELL))
print("trades_5", trades_5)
order_sell_3, trades_6 = matching_engine.add_order(Order(price=6, quantity=3, side=SideType.SELL))
print("trades_6", trades_6)

order_sell_4, trades_7 = matching_engine.add_order(Order(price=2, quantity=4, side=SideType.SELL))
print("order_buy_4", order_sell_4)
print("trades_7", trades_7)

matching_engine.order_book.bids_tree.print()
matching_engine.order_book.asks_tree.print()



15 changes: 0 additions & 15 deletions order_book/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,21 +186,6 @@ def add_order(self, order: Order):
self.asks_tree, self.best_ask_price_level, order
)

# def execute_order(self, order: Order) -> dict:
# if order.side == SideType.BUY:
# (
# self.asks_tree,
# self.best_ask_price_level,
# filled_orders,
# ) = self._execute_order(order, self.asks_tree)
# else: # order.side == 'SELL':
# (
# self.bids_tree,
# self.best_bid_price_level,
# filled_orders,
# ) = self._execute_order(order, self.bids_tree)
# return filled_orders

def cancel_order(self, order: Order):
price_level = order.price_level
if price_level is None:
Expand Down
4 changes: 2 additions & 2 deletions tests/common.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from typing import TypeVar, List, Tuple

from helper import update_matching_engine
from order_book import OrderBook, MatchingEngine, PriceLevelAVLTree
from py_simple_trees import AVLNode, TraversalType

Expand All @@ -12,7 +11,8 @@
def check_order_book(inputs, outputs):
order_book = TestOrderBook()
matching_engine = TestMatchingEngine(order_book)
matching_engine, orders = update_matching_engine(matching_engine, inputs)
for order in inputs:
matching_engine.add_order(order)

ask_price_levels = list(matching_engine.order_book.get_ask_price_levels())
print("ask_price_levels: ", ask_price_levels)
Expand Down
16 changes: 8 additions & 8 deletions tests/test_ome_10.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
from tests.common import check_order_book
from order_book import OrderData, SideType
from order_book import Order, SideType


def test_add_order_1():
inputs = [
OrderData(id=None, price=1, quantity=3, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=3, quantity=1, side=SideType.BUY),
OrderData(id=None, price=4, quantity=1, side=SideType.SELL),
OrderData(id=None, price=5, quantity=2, side=SideType.SELL),
OrderData(id=None, price=6, quantity=3, side=SideType.SELL),
OrderData(id=None, price=1, quantity=6, side=SideType.SELL),
Order(price=1, quantity=3, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=3, quantity=1, side=SideType.BUY),
Order(price=4, quantity=1, side=SideType.SELL),
Order(price=5, quantity=2, side=SideType.SELL),
Order(price=6, quantity=3, side=SideType.SELL),
Order(price=1, quantity=6, side=SideType.SELL),
]
outputs = {
'asks': [
Expand Down
16 changes: 8 additions & 8 deletions tests/test_ome_11.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
from tests.common import check_order_book
from order_book import OrderData, SideType
from order_book import Order, SideType


def test_add_order_1():
inputs = [
OrderData(id=None, price=1, quantity=3, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=3, quantity=1, side=SideType.BUY),
OrderData(id=None, price=4, quantity=1, side=SideType.SELL),
OrderData(id=None, price=5, quantity=2, side=SideType.SELL),
OrderData(id=None, price=6, quantity=3, side=SideType.SELL),
OrderData(id=None, price=1, quantity=8, side=SideType.SELL),
Order(price=1, quantity=3, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=3, quantity=1, side=SideType.BUY),
Order(price=4, quantity=1, side=SideType.SELL),
Order(price=5, quantity=2, side=SideType.SELL),
Order(price=6, quantity=3, side=SideType.SELL),
Order(price=1, quantity=8, side=SideType.SELL),
]
outputs = {
'asks': [(6, 3), (5, 2), (4, 1), (1, 2)],
Expand Down
48 changes: 24 additions & 24 deletions tests/test_ome_2.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from order_book import OrderData, SideType
from order_book import Order, SideType
from tests.common import check_order_book


def test_add_order_2_1():
inputs = [
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.SELL),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.SELL),
]
outputs = {
# Asks
Expand All @@ -24,7 +24,7 @@ def test_add_order_2_1():

def test_add_order_2_2():
inputs = [
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
]
outputs = {
# Asks
Expand All @@ -41,7 +41,7 @@ def test_add_order_2_2():

def test_add_order_2_3():
inputs = [
OrderData(id=None, price=2, quantity=2, side=SideType.SELL),
Order(price=2, quantity=2, side=SideType.SELL),
]
outputs = {
# Asks
Expand All @@ -58,9 +58,9 @@ def test_add_order_2_3():

def test_add_order_2_4():
inputs = [
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=2, quantity=3, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=2, quantity=3, side=SideType.BUY),
]
outputs = {
# Asks
Expand All @@ -77,9 +77,9 @@ def test_add_order_2_4():

def test_add_order_2_5():
inputs = [
OrderData(id=None, price=2, quantity=2, side=SideType.SELL),
OrderData(id=None, price=2, quantity=1, side=SideType.SELL),
OrderData(id=None, price=2, quantity=2, side=SideType.SELL),
Order(price=2, quantity=2, side=SideType.SELL),
Order(price=2, quantity=1, side=SideType.SELL),
Order(price=2, quantity=2, side=SideType.SELL),
]
outputs = {
# Asks
Expand All @@ -96,10 +96,10 @@ def test_add_order_2_5():

def test_add_order_2_6():
inputs = [
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=2, quantity=3, side=SideType.BUY),
OrderData(id=None, price=2, quantity=4, side=SideType.SELL),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=2, quantity=3, side=SideType.BUY),
Order(price=2, quantity=4, side=SideType.SELL),
]
outputs = {
# Asks
Expand All @@ -116,10 +116,10 @@ def test_add_order_2_6():

def test_add_order_2_7():
inputs = [
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=2, quantity=8, side=SideType.SELL),
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=2, quantity=3, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=2, quantity=8, side=SideType.SELL),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=2, quantity=3, side=SideType.BUY),
]
outputs = {
# Asks
Expand All @@ -136,11 +136,11 @@ def test_add_order_2_7():

def test_add_order_2_8():
inputs = [
OrderData(id=None, price=3, quantity=4, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.SELL),
OrderData(id=None, price=2, quantity=1, side=SideType.SELL),
OrderData(id=None, price=2, quantity=2, side=SideType.SELL),
OrderData(id=None, price=1, quantity=4, side=SideType.BUY),
Order(price=3, quantity=4, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.SELL),
Order(price=2, quantity=1, side=SideType.SELL),
Order(price=2, quantity=2, side=SideType.SELL),
Order(price=1, quantity=4, side=SideType.BUY),
]
outputs = {
# Asks
Expand Down
16 changes: 8 additions & 8 deletions tests/test_ome_3.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
from order_book import OrderData, SideType
from order_book import Order, SideType
from tests.common import check_order_book


def test_add_order_3():
inputs = [
OrderData(id=None, price=1, quantity=3, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=3, quantity=1, side=SideType.BUY),
OrderData(id=None, price=4, quantity=1, side=SideType.SELL),
OrderData(id=None, price=5, quantity=2, side=SideType.SELL),
OrderData(id=None, price=6, quantity=3, side=SideType.SELL),
OrderData(id=None, price=4, quantity=3, side=SideType.BUY),
Order(price=1, quantity=3, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=3, quantity=1, side=SideType.BUY),
Order(price=4, quantity=1, side=SideType.SELL),
Order(price=5, quantity=2, side=SideType.SELL),
Order(price=6, quantity=3, side=SideType.SELL),
Order(price=4, quantity=3, side=SideType.BUY),
]
outputs = {
'asks': [
Expand Down
14 changes: 7 additions & 7 deletions tests/test_ome_4.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
from order_book import OrderData, SideType
from order_book import Order, SideType
from tests.common import check_order_book


def test_add_order_4():
inputs = [
OrderData(id=None, price=1, quantity=3, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=3, quantity=1, side=SideType.BUY),
OrderData(id=None, price=4, quantity=1, side=SideType.SELL),
OrderData(id=None, price=5, quantity=2, side=SideType.SELL),
OrderData(id=None, price=6, quantity=3, side=SideType.SELL),
Order(price=1, quantity=3, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=3, quantity=1, side=SideType.BUY),
Order(price=4, quantity=1, side=SideType.SELL),
Order(price=5, quantity=2, side=SideType.SELL),
Order(price=6, quantity=3, side=SideType.SELL),
]
outputs = {
'asks': [
Expand Down
16 changes: 8 additions & 8 deletions tests/test_ome_5.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
from order_book import OrderData, SideType
from order_book import Order, SideType
from tests.common import check_order_book


def test_add_order_5():
inputs = [
OrderData(id=None, price=1, quantity=3, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=3, quantity=1, side=SideType.BUY),
OrderData(id=None, price=4, quantity=1, side=SideType.SELL),
OrderData(id=None, price=5, quantity=2, side=SideType.SELL),
OrderData(id=None, price=6, quantity=3, side=SideType.SELL),
OrderData(id=None, price=7, quantity=6, side=SideType.BUY),
Order(price=1, quantity=3, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=3, quantity=1, side=SideType.BUY),
Order(price=4, quantity=1, side=SideType.SELL),
Order(price=5, quantity=2, side=SideType.SELL),
Order(price=6, quantity=3, side=SideType.SELL),
Order(price=7, quantity=6, side=SideType.BUY),
]
outputs = {
# Asks
Expand Down
16 changes: 8 additions & 8 deletions tests/test_ome_6.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
from tests.common import check_order_book
from order_book import OrderData, SideType
from order_book import Order, SideType


def test_add_order_1():
inputs = [
OrderData(id=None, price=1, quantity=3, side=SideType.BUY),
OrderData(id=None, price=2, quantity=2, side=SideType.BUY),
OrderData(id=None, price=3, quantity=1, side=SideType.BUY),
OrderData(id=None, price=4, quantity=1, side=SideType.SELL),
OrderData(id=None, price=5, quantity=2, side=SideType.SELL),
OrderData(id=None, price=6, quantity=3, side=SideType.SELL),
OrderData(id=None, price=1, quantity=1, side=SideType.SELL),
Order(price=1, quantity=3, side=SideType.BUY),
Order(price=2, quantity=2, side=SideType.BUY),
Order(price=3, quantity=1, side=SideType.BUY),
Order(price=4, quantity=1, side=SideType.SELL),
Order(price=5, quantity=2, side=SideType.SELL),
Order(price=6, quantity=3, side=SideType.SELL),
Order(price=1, quantity=1, side=SideType.SELL),
]
outputs = {
'asks': [
Expand Down
Loading

0 comments on commit caf36db

Please sign in to comment.