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.
  • 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 const fn kernel(&self) -> &NautilusKernel

Returns a reference to the underlying kernel.

Source

pub fn kernel_mut(&mut self) -> &mut NautilusKernel

Returns a mutable reference to the underlying kernel.

Source

pub fn trader_id(&self) -> TraderId

Returns the trader ID for this engine.

Source

pub fn machine_id(&self) -> &str

Returns the machine ID for this engine.

Source

pub fn instance_id(&self) -> UUID4

Returns the unique instance ID for this engine.

Source

pub fn iteration(&self) -> usize

Returns the current iteration count.

Source

pub fn run_config_id(&self) -> Option<&str>

Returns the last run config ID, if any.

Source

pub const fn run_id(&self) -> Option<UUID4>

Returns the last run ID, if any.

Source

pub const fn run_started(&self) -> Option<UnixNanos>

Returns when the last run started, if any.

Source

pub const fn run_finished(&self) -> Option<UnixNanos>

Returns when the last run finished, if any.

Source

pub const fn backtest_start(&self) -> Option<UnixNanos>

Returns the last backtest range start, if any.

Source

pub const fn backtest_end(&self) -> Option<UnixNanos>

Returns the last backtest range end, if any.

Source

pub fn list_venues(&self) -> Vec<Venue>

Returns the list of registered venue identifiers.

Source

pub fn add_venue(&mut self, config: SimulatedVenueConfig) -> Result<()>

§Errors

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

Source

pub fn set_settlement_price( &mut self, venue: Venue, instrument_id: InstrumentId, price: Price, ) -> Result<()>

Sets the settlement price for the specified venue instrument.

§Errors

Returns an error if the venue has not been added to the engine.

Source

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

Changes the fill model for the specified venue.

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

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

Adds market data to the engine for replay during the backtest run.

§Errors

Returns an error if:

  • data is empty.
  • validate is true and the instrument for the first element has not been added to the cache via add_instrument.
  • validate is true and the first element is a [Data::Bar] whose aggregation_source is not [AggregationSource::External].
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 in an invalid state for strategy registration.

Source

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

Adds the given strategies to the backtest engine. Stops at the first error.

§Errors

Returns an error if any strategy fails to register; preceding strategies remain registered.

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 in an invalid state for actor registration.

Source

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

Adds the given actors to the backtest engine. Stops at the first error.

§Errors

Returns an error if any actor fails to register; preceding actors remain registered.

Source

pub fn add_exec_algorithm<T>(&mut self, exec_algorithm: T) -> Result<()>
where T: ExecutionAlgorithm + 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 add_exec_algorithms<T>(&mut self, exec_algorithms: Vec<T>) -> Result<()>
where T: ExecutionAlgorithm + Component + Debug + 'static,

Adds the given execution algorithms to the backtest engine. Stops at the first error.

§Errors

Returns an error if any execution algorithm fails to register; preceding algorithms remain registered.

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 so additional data batches can be loaded. Timer advancement stops at data exhaustion to avoid producing synthetic events (e.g. zero-volume bars) past the current batch.

Streaming workflow:

  1. Add initial data and strategies
  2. Loop: call run(streaming=true), clear_data(), add_data(next_batch)
  3. After all batches: call end() to finalize
§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_actors(&mut self) -> Result<()>

Clear all actors from the engine’s internal trader.

§Errors

Returns an error if any actor fails to dispose.

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)

Registers a data client for the given client_id if one does not already exist.

Source

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

Registers a market data client for the given venue if one does not already exist.

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