Getting Started
To get started with NautilusTrader you need:
- Python 3.12–3.14 with the
nautilus_traderpackage installed - A way to run Python scripts or Jupyter notebooks
Examples
The docs cover a subset of examples. For the full set, see the nautilus_trader repository.
| Directory | Description |
|---|---|
| examples/ | Self-contained runnable Python examples |
| docs/tutorials/ | Jupyter notebook tutorials for common workflows |
| docs/concepts/ | Concept guides with code snippets |
| nautilus_trader/examples/ | Basic strategies, indicators, and execution algorithms |
| tests/unit_tests/ | Unit tests covering core functionality |
Backtesting API levels
NautilusTrader provides two API levels for backtesting:
| API Level | Description | Characteristics |
|---|---|---|
| High-Level | BacktestNode / TradingNode | Recommended for production, easier transition to live trading; requires a Parquet data catalog |
| Low-Level | BacktestEngine | For library development, direct component access; no live-trading path |
One node per process
Running multiple BacktestNode or TradingNode instances in the same process is not supported
due to global singleton state. Sequential execution with proper disposal between runs is supported.
See Processes and threads.
See the Backtesting guide for help choosing an API level.
Backtest (low-level API)
Load raw data with loaders and wranglers, then run a backtest with BacktestEngine.
Backtest (high-level API)
Load raw data into the data catalog, then run a backtest with BacktestNode.
Running in Docker
A self-contained Jupyter notebook server is available as a Docker image, no local setup required.
docker pull ghcr.io/nautechsystems/jupyterlab:nightly --platform linux/amd64
docker run -p 8888:8888 ghcr.io/nautechsystems/jupyterlab:nightlyThen open http://localhost:8888 in your browser.
Container data is ephemeral, deleting the container removes all data.
NautilusTrader log output can exceed Jupyter's default rate limit, causing notebooks to hang.
Set log_level to "ERROR" to avoid this.