Skip to main content

BacktestEngine

Struct BacktestEngine 

Source
pub struct BacktestEngine { /* private fields */ }
Expand description

Core backtesting engine for running event-driven strategy backtests on historical data.

The BacktestEngine provides a high-fidelity simulation environment that processes historical market data chronologically through an event-driven architecture. It maintains simulated exchanges with realistic order matching and execution, allowing strategies to be tested exactly as they would run in live trading:

  • Event-driven data replay with configurable latency models.
  • Multi-venue and multi-asset support.
  • Realistic order matching and execution simulation.
  • Strategy and portfolio performance analysis.
  • Seamless transition from backtesting to live trading.

Implementations§

Source§

impl BacktestEngine

Source

pub fn new(config: BacktestEngineConfig) -> Result<Self>

Create a new BacktestEngine instance.

§Errors

Returns an error if the core NautilusKernel fails to initialize.

Source

pub fn add_venue( &mut self, venue: Venue, oms_type: OmsType, account_type: AccountType, book_type: BookType, starting_balances: Vec<Money>, base_currency: Option<Currency>, default_leverage: Option<Decimal>, leverages: AHashMap<InstrumentId, Decimal>, modules: Vec<Box<dyn SimulationModule>>, fill_model: FillModelAny, fee_model: FeeModelAny, latency_model: Option<Box<dyn LatencyModel>>, routing: 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>, use_market_order_acks: Option<bool>, bar_execution: Option<bool>, bar_adaptive_high_low_ordering: Option<bool>, trade_execution: Option<bool>, liquidity_consumption: Option<bool>, allow_cash_borrowing: Option<bool>, frozen_account: Option<bool>, price_protection_points: Option<u32>, ) -> Result<()>

§Errors

Returns an error if initializing the simulated exchange for the venue fails.

Source

pub fn change_fill_model(&mut self, venue: Venue, fill_model: FillModelAny)

Source

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

Adds an instrument to the backtest engine for the specified venue.

§Errors

Returns an error if:

  • The instrument’s associated venue has not been added via add_venue.
  • Attempting to add a CurrencyPair instrument for a single-currency CASH account.
§Panics

Panics if adding the instrument to the simulated exchange fails.

Source

pub fn add_data( &mut self, data: Vec<Data>, _client_id: Option<ClientId>, validate: bool, sort: bool, )

Source

pub fn add_strategy<T>(&mut self, strategy: T) -> Result<()>
where T: Strategy + Component + Debug + 'static,

Adds a strategy to the backtest engine.

§Errors

Returns an error if the strategy is already registered or the trader is running.

Source

pub fn add_actor<T>(&mut self, actor: T) -> Result<()>
where T: DataActor + Component + Debug + 'static,

Adds an actor to the backtest engine.

§Errors

Returns an error if the actor is already registered or the trader is running.

Source

pub fn add_exec_algorithm<T>(&mut self, exec_algorithm: T) -> Result<()>
where T: DataActor + Component + Debug + 'static,

Adds an execution algorithm to the backtest engine.

§Errors

Returns an error if the algorithm is already registered or the trader is running.

Source

pub fn run( &mut self, start: Option<UnixNanos>, end: Option<UnixNanos>, run_config_id: Option<String>, streaming: bool, ) -> Result<()>

Run a backtest.

Processes all data chronologically. When streaming is false (default), finalizes the run via end. When streaming is true, the run pauses without finalizing, allowing additional data to be loaded:

  1. Add initial data and strategies
  2. Call run(streaming=true)
  3. Call clear_data()
  4. Add next batch of data
  5. Repeat steps 2-4, then call run(streaming=false) or end() for the final batch
§Errors

Returns an error if the backtest encounters an unrecoverable state.

Source

pub fn end(&mut self)

Manually end the backtest.

Source

pub fn reset(&mut self)

Reset the backtest engine.

All stateful fields are reset to their initial value. Data and instruments persist across resets to enable repeated runs with different strategies.

Source

pub fn sort_data(&mut self)

Sort the engine’s internal data stream by timestamp.

Useful when data has been added with sort=false for batch performance, then sorted once before running.

Source

pub fn clear_data(&mut self)

Clear the engine’s internal data stream. Does not clear instruments.

Source

pub fn clear_strategies(&mut self) -> Result<()>

Clear all trading strategies from the engine’s internal trader.

§Errors

Returns an error if any strategy fails to dispose.

Source

pub fn clear_exec_algorithms(&mut self) -> Result<()>

Clear all execution algorithms from the engine’s internal trader.

§Errors

Returns an error if any execution algorithm fails to dispose.

Source

pub fn dispose(&mut self)

Dispose of the backtest engine, releasing all resources.

Source

pub fn get_result(&self) -> BacktestResult

Return the backtest result from the last run.

Source

pub fn add_data_client_if_not_exists(&mut self, client_id: ClientId)

Source

pub fn add_market_data_client_if_not_exists(&mut self, venue: Venue)

Trait Implementations§

Source§

impl Debug for BacktestEngine

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