sentinel-backend / src /abides /order_book.py
Penguindrum920's picture
Deploy SENTINEL backend to Hugging Face Spaces
6a09e49 verified
Raw
History Blame Contribute Delete
2.15 kB
"""ABIDES-style order book wrapper built on SENTINEL matching engine."""
from __future__ import annotations
from typing import List, Dict
from ..market.order import Order, OrderSide, OrderType
from ..market.order_book import OrderBook
from ..market.trade import Trade
class AbidesOrderBook:
def __init__(self) -> None:
self._book = OrderBook()
def add_order(self, agent_id: str, side: OrderSide, order_type: OrderType, price: float, quantity: int) -> List[Trade]:
order = Order(agent_id=agent_id, side=side, order_type=order_type, price=price, quantity=quantity)
return self._book.add_order(order)
def cancel_order(self, order_id: str) -> bool:
return self._book.cancel_order(order_id)
def get_depth(self, levels: int = 5) -> dict[str, list]:
return self._book.get_depth(levels)
def get_total_depth(self, levels: int = 5) -> int:
return self._book.get_total_depth(levels)
def get_levels(self, levels: int = 10) -> tuple[list[dict], list[dict]]:
depth = self._book.get_depth(levels)
return depth.get("bids", []), depth.get("asks", [])
@property
def bid_levels(self) -> list[dict]:
return self.get_levels(10)[0]
@property
def ask_levels(self) -> list[dict]:
return self.get_levels(10)[1]
def get_depth(self, levels: int = 5) -> Dict[str, list]:
return self._book.get_depth(levels)
def get_total_depth(self, levels: int = 5) -> int:
return self._book.get_total_depth(levels)
@property
def bid_levels(self) -> list:
return self._book.get_depth(10)["bids"]
@property
def ask_levels(self) -> list:
return self._book.get_depth(10)["asks"]
@property
def best_bid(self) -> float | None:
return self._book.best_bid
@property
def best_ask(self) -> float | None:
return self._book.best_ask
@property
def mid_price(self) -> float | None:
return self._book.mid_price
@property
def spread(self) -> float | None:
return self._book.spread