Skip to main content
The backtesting engine uses BacktestConfig to control all aspects of simulation realism, from network latency to fill probabilities.

BacktestConfig Structure

The main configuration is defined in nano-backtest/src/config.rs:11-29:

Initial Capital

Starting capital in USD for the backtest.

Latency Configuration

Realistic latency simulation is critical for HFT backtesting. The LatencyConfig struct (config.rs:104-132) models network and exchange delays:

Latency Components

Jitter Models

The latency simulator supports multiple jitter models (latency.rs:26-52):
  • None: Deterministic latency (no variance)
  • Uniform: Random jitter in range [-max_jitter, +max_jitter]
  • Normal: Gaussian distribution with configurable std dev
  • LogNormal: Realistic network latency distribution
  • Empirical: Based on historical percentile data [p50, p75, p90, p95, p99]

Preset Latency Profiles

Aurora (CME Primary Colo) - latency.rs:215-220:
Aggressive HFT - config.rs:47-56:
Conservative - config.rs:76-82:

Fee Configuration

The FeeConfig struct (config.rs:134-172) models exchange and clearing fees:

CME Default Fees

Fee Calculation

Total fee per trade:
Example for a 10-contract maker trade:

Risk Configuration

The RiskConfig struct (config.rs:174-207) defines position limits and risk controls:

Default Risk Limits

Risk Presets

Aggressive HFT:
Conservative:

Execution Configuration

The ExecutionConfig struct (config.rs:209-242) controls fill simulation realism:

Fill Simulation

Queue Position Tracking (execution.rs:63-68):
  • Tracks order position in the limit order book queue
  • Fill probability decays exponentially: decay^queue_position
  • Default decay: 0.9 (90% probability at front, 81% at position 2, etc.)
Partial Fills (execution.rs:185-198):
  • Simulates realistic partial execution
  • Default 20% probability of partial fill
  • Fill size randomly chosen between min_partial_fill and remaining quantity
Adverse Selection (execution.rs:171-177):
  • Models the tendency to get filled when market moves against you
  • Default 10% probability that fill doesn’t occur due to adverse selection
  • Critical for realistic maker strategy backtesting

Default Execution Settings

Conservative Preset (config.rs:93-97):

Output Configuration

The OutputConfig struct (config.rs:244-273) controls logging and data recording:

Default Output Settings

Enabling record_tick_pnl = true can significantly impact performance and memory usage for high-frequency strategies.

Example Configuration

TOML Format

Create a backtest_config.toml file:

Rust API

Configuration Presets

Two built-in presets are available:

Aggressive HFT (config.rs:45-69)

Optimized for sub-millisecond strategies:
  • Ultra-low latency (50μs orders)
  • Tight risk limits (50 max position)
  • Realistic fill simulation

Conservative (config.rs:71-100)

Optimized for strategy validation:
  • Higher latency (200μs orders)
  • Buffered fees (1.2x CME rates)
  • Conservative fill model (70% decay)
  • Tighter drawdown limit (3%)