pub struct OrderBook<S>where
S: OrderBookSide,{ /* private fields */ }Expand description
A Central Limit Order Book (CLOB) for a single symbol.
The order book maintains buy orders (bids) and sell orders (asks), executing trades when orders cross.
§Type Parameters
S- The order book side implementation
§Example
use clob_sync::prelude::*;
use clob_sync::order::{Order, OrderType, OrderSide, Quantity, Price, Symbol};
use clob_sync::order_book::InMemoryOrderBookFactory;
use std::str::FromStr;
fn main() -> Result<()> {
let mut book = InMemoryOrderBookFactory::create_order_book(Symbol::from("BTC-USD"));
// Add a sell order
let sell_order = Order::new(
OrderType::Limit(Price::try_from("50000.00").unwrap()),
Quantity::try_from("1.0").unwrap(),
OrderSide::Sell,
Symbol::from("BTC-USD"),
);
book.execute(&sell_order)?;
// Add a matching buy order
let buy_order = Order::new(
OrderType::Limit(Price::try_from("50000.00").unwrap()),
Quantity::try_from("0.5").unwrap(),
OrderSide::Buy,
Symbol::from("BTC-USD"),
);
let result = book.execute(&buy_order)?;
assert!(matches!(result, Executions::Executed(_)));
Ok(())
}Implementations§
Source§impl<S> OrderBook<S>where
S: OrderBookSide,
impl<S> OrderBook<S>where
S: OrderBookSide,
Sourcepub fn execute(&mut self, order: &Order) -> Result<Executions>
pub fn execute(&mut self, order: &Order) -> Result<Executions>
Executes an order against the order book.
For market orders, execution happens at the best available price. For limit orders, execution happens only if the order crosses the opposite side of the book.
§Arguments
order- The order to execute
§Returns
Returns Executions indicating:
AllocatedNoExecutions: Order was added to book without matchingExecuted: Order was fully or partially matched
§Errors
Returns Error::InvalidSymbol if the order symbol doesn’t match
the order book symbol.
Trait Implementations§
Auto Trait Implementations§
impl<S> Freeze for OrderBook<S>where
S: Freeze,
impl<S> RefUnwindSafe for OrderBook<S>where
S: RefUnwindSafe,
impl<S> Send for OrderBook<S>where
S: Send,
impl<S> Sync for OrderBook<S>where
S: Sync,
impl<S> Unpin for OrderBook<S>where
S: Unpin,
impl<S> UnsafeUnpin for OrderBook<S>where
S: UnsafeUnpin,
impl<S> UnwindSafe for OrderBook<S>where
S: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more