Backtesting ¶
Backtesting with NautilusTrader is a methodical simulation process that replicates trading
activities using a specific system implementation. This system is composed of various components
including
Actors
,
Strategies
,
Execution Algorithms
,
and other user-defined modules. The entire trading simulation is predicated on a stream of historical data processed by a
BacktestEngine
. Once this data stream is exhausted, the engine concludes its operation, producing
detailed results and performance metrics for in-depth analysis.
It’s paramount to recognize that NautilusTrader offers two distinct API levels for setting up and conducting backtests: high-level and low-level .
Choosing an API level: ¶
Consider the low-level API when:
-
The entirety of your data stream can be comfortably accommodated within available memory
-
You choose to avoid storing data in the Nautilus-specific Parquet format
-
Or, you have a specific need/preference for retaining raw data in its innate format, such as CSV, Binary, etc
-
You seek granular control over the
BacktestEngine
, enabling functionalities such as re-running backtests on identical data while interchanging components (like actors or strategies) or tweaking parameter settings
Consider the high-level API when:
-
Your data stream’s size exceeds available memory, necessitating streaming data in batches
-
You want to harness the performance capabilities and convenience of the
ParquetDataCatalog
and persist your data in the Nautilus-specific Parquet format -
You value the flexibility and advanced functionalities offered by passing configuration objects, which can define diverse backtest runs across many engines at once
Low-level API: ¶
The low-level API revolves around a single
BacktestEngine
, with inputs initialized and added ‘manually’ via a Python script.
An instantiated
BacktestEngine
can accept:
-
Lists of
Data
objects which will be automatically sorted into monotonic order byts_init
-
Multiple venues (manually initialized and added)
-
Multiple actors (manually initialized and added)
-
Multiple execution algorithms (manually initialized and added)
High-level API: ¶
The high-level API revolves around a single
BacktestNode
, which will orchestrate the management
of individual
BacktestEngine
s, each defined by a
BacktestRunConfig
.
Multiple configurations can be bundled into a list and fed to the node to be run.
Each of these
BacktestRunConfig
objects in turn is made up of:
-
A list of
BacktestDataConfig
objects -
A list of
BacktestVenueConfig
objects -
A list of
ImportableActorConfig
objects -
A list of
ImportableStrategyConfig
objects -
A list of
ImportableExecAlgorithmConfig
objects -
An optional
ImportableControllerConfig
object -
An optional
BacktestEngineConfig
object (otherwise will be the default)
This doc is an evolving work in progress and will continue to describe each API more fully…