Struct SimulatedExchange

Source
pub struct SimulatedExchange {
    pub id: Venue,
    pub oms_type: OmsType,
    pub account_type: AccountType,
    pub base_currency: Option<Currency>,
    /* private fields */
}
Expand description

Simulated exchange venue for realistic trading execution during backtesting.

The SimulatedExchange provides a comprehensive simulation of a trading venue, including order matching engines, account management, and realistic execution models. It maintains order books, processes market data, and executes trades with configurable latency and fill models to accurately simulate real market conditions during backtesting.

Key features:

  • Multi-instrument order matching with realistic execution
  • Configurable fee, fill, and latency models
  • Support for various order types and execution options
  • Account balance and position management
  • Market data processing and order book maintenance
  • Simulation modules for custom venue behaviors

Fields§

§id: Venue§oms_type: OmsType§account_type: AccountType§base_currency: Option<Currency>

Implementations§

Source§

impl SimulatedExchange

Source

pub fn new( venue: Venue, oms_type: OmsType, account_type: AccountType, starting_balances: Vec<Money>, base_currency: Option<Currency>, default_leverage: Decimal, leverages: HashMap<InstrumentId, Decimal>, modules: Vec<Box<dyn SimulationModule>>, cache: Rc<RefCell<Cache>>, clock: Rc<RefCell<dyn Clock>>, fill_model: FillModel, fee_model: FeeModelAny, book_type: BookType, latency_model: Option<LatencyModel>, frozen_account: Option<bool>, bar_execution: Option<bool>, reject_stop_orders: Option<bool>, support_gtd_orders: Option<bool>, support_contingent_orders: Option<bool>, use_position_ids: Option<bool>, use_random_ids: Option<bool>, use_reduce_only: Option<bool>, use_message_queue: Option<bool>, ) -> Result<Self>

Creates a new SimulatedExchange instance.

§Errors

Returns an error if:

  • starting_balances is empty.
  • base_currency is Some but starting_balances contains multiple currencies.
Source

pub fn register_client(&mut self, client: Rc<dyn ExecutionClient>)

Source

pub fn set_fill_model(&mut self, fill_model: FillModel)

Source

pub const fn set_latency_model(&mut self, latency_model: LatencyModel)

Source

pub fn initialize_account(&mut self)

Source

pub fn add_instrument(&mut self, instrument: InstrumentAny) -> Result<()>

Adds an instrument to the simulated exchange and initializes its matching engine.

§Errors

Returns an error if the exchange account type is Cash and the instrument is a CryptoPerpetual or CryptoFuture.

§Panics

Panics if the instrument cannot be added to the exchange.

Source

pub fn best_bid_price(&self, instrument_id: InstrumentId) -> Option<Price>

Source

pub fn best_ask_price(&self, instrument_id: InstrumentId) -> Option<Price>

Source

pub fn get_book(&self, instrument_id: InstrumentId) -> Option<&OrderBook>

Source

pub fn get_matching_engine( &self, instrument_id: &InstrumentId, ) -> Option<&OrderMatchingEngine>

Source

pub const fn get_matching_engines( &self, ) -> &HashMap<InstrumentId, OrderMatchingEngine>

Source

pub fn get_books(&self) -> HashMap<InstrumentId, OrderBook>

Source

pub fn get_open_orders( &self, instrument_id: Option<InstrumentId>, ) -> Vec<PassiveOrderAny>

Source

pub fn get_open_bid_orders( &self, instrument_id: Option<InstrumentId>, ) -> Vec<PassiveOrderAny>

Source

pub fn get_open_ask_orders( &self, instrument_id: Option<InstrumentId>, ) -> Vec<PassiveOrderAny>

Source

pub fn get_account(&self) -> Option<AccountAny>

§Panics

Panics if retrieving the account from the execution client fails.

Source

pub fn adjust_account(&mut self, adjustment: Money)

§Panics

Panics if generating account state fails during adjustment.

Source

pub fn send(&mut self, command: TradingCommand)

Source

pub fn generate_inflight_command( &mut self, command: &TradingCommand, ) -> (UnixNanos, u32)

§Panics

Panics if the command is invalid when generating inflight command.

Source

pub fn process_order_book_delta(&mut self, delta: OrderBookDelta)

§Panics

Panics if adding a missing instrument during delta processing fails.

Source

pub fn process_order_book_deltas(&mut self, deltas: OrderBookDeltas)

§Panics

Panics if adding a missing instrument during deltas processing fails.

Source

pub fn process_quote_tick(&mut self, quote: &QuoteTick)

§Panics

Panics if adding a missing instrument during quote tick processing fails.

Source

pub fn process_trade_tick(&mut self, trade: &TradeTick)

§Panics

Panics if adding a missing instrument during trade tick processing fails.

Source

pub fn process_bar(&mut self, bar: Bar)

§Panics

Panics if adding a missing instrument during bar processing fails.

Source

pub fn process_instrument_status(&mut self, status: InstrumentStatus)

§Panics

Panics if adding a missing instrument during instrument status processing fails.

Source

pub fn process(&mut self, ts_now: UnixNanos)

§Panics

Panics if popping an inflight command fails during processing.

Source

pub fn reset(&mut self)

Source

pub fn process_trading_command(&mut self, command: TradingCommand)

§Panics

Panics if execution client is uninitialized when processing trading command.

Source

pub fn generate_fresh_account_state(&self)

§Panics

Panics if generating fresh account state fails.

Trait Implementations§

Source§

impl Debug for SimulatedExchange

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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<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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,