Skip to main content

OrderBook

Struct OrderBook 

Source
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,

Source

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 matching
  • Executed: Order was fully or partially matched
§Errors

Returns Error::InvalidSymbol if the order symbol doesn’t match the order book symbol.

Trait Implementations§

Source§

impl<S> Debug for OrderBook<S>
where S: OrderBookSide + Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<U> As for U

Source§

fn as_<T>(self) -> T
where T: CastFrom<U>,

Casts self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V