Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/order_matching/matching_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def __init__(self, seed: int | None = None) -> None:
self._faker = get_faker(seed=seed)
self._queue = Orders()
self.unprocessed_orders = OrderBook()
self._timestamp: datetime
self._timestamp: datetime | None = None

def match(self, timestamp: datetime, orders: Orders | None = None) -> ExecutedTrades:
"""Match incoming orders in price-time priority.
Expand All @@ -73,7 +73,9 @@ def match(self, timestamp: datetime, orders: Orders | None = None) -> ExecutedTr

def _get_expired_orders(self) -> Orders:
orders: list[Order] = list()
for timestamp in filter(lambda t: t <= self._timestamp, self.unprocessed_orders.orders_by_expiration.keys()):
assert self._timestamp is not None
current_timestamp = self._timestamp
for timestamp in filter(lambda t: t <= current_timestamp, self.unprocessed_orders.orders_by_expiration.keys()):
orders.extend(self.unprocessed_orders.orders_by_expiration[timestamp])
for order in orders:
order.status = Status.CANCEL
Expand Down Expand Up @@ -116,6 +118,7 @@ def _execute_trades_for_one_price(self, incoming_order: Order, price: float) ->
return ExecutedTrades(trades=trades)

def _execute_trade(self, incoming_order: Order, book_order: Order) -> Trade:
assert self._timestamp is not None
trade = Trade(
side=incoming_order.side,
price=book_order.price,
Expand Down
6 changes: 3 additions & 3 deletions src/order_matching/orders.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from __future__ import annotations

from dataclasses import asdict
from typing import Generator, Iterator, Sequence, cast
from typing import Iterator, Sequence, cast

import pandas as pd
from pandera.typing.pandas import DataFrame
Expand Down Expand Up @@ -102,8 +102,8 @@ def __eq__(self, other: object) -> bool:
def __iter__(self) -> Iterator[Order]:
return iter(self.orders)

def __next__(self) -> Generator[Order, None, None]:
yield next(self.__iter__())
def __next__(self) -> Order:
return next(self.__iter__())

def __len__(self) -> int:
return len(self.orders)
Expand Down
Loading