Skip to main content

Module backtesting

Module backtesting 

Source
Expand description

Backtesting engine for trading strategy simulation.

This module provides a complete backtesting framework with:

  • Expression-based strategy builder for custom entry/exit conditions
  • Pre-built strategies (SMA, RSI, MACD, Bollinger, SuperTrend, Donchian)
  • Full technical indicator coverage (40+ indicators)
  • Position tracking with long/short support
  • Stop-loss, take-profit, and trailing stop management
  • Comprehensive performance metrics

§Quick Start

use finance_query::{Ticker, Interval, TimeRange};
use finance_query::backtesting::{SmaCrossover, BacktestConfig};

let ticker = Ticker::new("AAPL").await?;
let result = ticker.backtest(
    SmaCrossover::new(10, 20),
    Interval::OneDay,
    TimeRange::OneYear,
    None,
).await?;

println!("Return: {:.2}%", result.metrics.total_return_pct);
println!("Sharpe: {:.2}", result.metrics.sharpe_ratio);
println!("Max Drawdown: {:.2}%", result.metrics.max_drawdown_pct * 100.0);

§Custom Strategies with StrategyBuilder

Build custom strategies using the fluent builder API:

use finance_query::backtesting::StrategyBuilder;
use finance_query::backtesting::refs::*;
use finance_query::backtesting::condition::*;

let strategy = StrategyBuilder::new("RSI Mean Reversion")
    .entry(
        rsi(14).crosses_below(30.0)
            .and(price().above_ref(sma(200)))
    )
    .exit(
        rsi(14).crosses_above(70.0)
            .or(stop_loss(0.05))
    )
    .build();

§Configuration

use finance_query::backtesting::BacktestConfig;

let config = BacktestConfig::builder()
    .initial_capital(50_000.0)
    .commission_pct(0.001)      // 0.1% per trade
    .slippage_pct(0.0005)       // 0.05% slippage
    .stop_loss_pct(0.05)        // 5% stop-loss
    .take_profit_pct(0.15)      // 15% take-profit
    .allow_short(true)
    .build()
    .unwrap();

§Pre-built Strategies

StrategyParametersDescription
SmaCrossoverfast, slow periodsDual SMA crossover
RsiReversalperiod, oversold, overboughtMean reversion on RSI
MacdSignalfast, slow, signal periodsMACD line crossover
BollingerMeanReversionperiod, std_devBuy at lower band
SuperTrendFollowperiod, multiplierTrend following
DonchianBreakoutperiodChannel breakout

§Available Indicators

The strategy builder supports all indicators via refs:

  • Moving Averages: sma, ema, wma, dema, tema, hma, vwma, alma, mcginley
  • Oscillators: rsi, stochastic, stochastic_rsi, cci, williams_r, cmo, awesome_oscillator
  • Trend: macd, adx, aroon, supertrend, ichimoku, parabolic_sar
  • Volatility: atr, bollinger, keltner, donchian, choppiness_index
  • Volume: obv, vwap, mfi, cmf, chaikin_oscillator, accumulation_distribution, balance_of_power

§Available Conditions

Build conditions via condition:

  • Comparisons: above(), below(), crosses_above(), crosses_below(), between(), equals()
  • Composites: and(), or(), not()
  • Position Management: stop_loss(), take_profit(), trailing_stop(), trailing_take_profit()
  • Position State: has_position(), no_position(), is_long(), is_short(), in_profit(), in_loss()

Re-exports§

pub use strategy::Strategy;
pub use strategy::StrategyContext;
pub use strategy::StrategyBuilder;
pub use strategy::BollingerMeanReversion;
pub use strategy::DonchianBreakout;
pub use strategy::MacdSignal;
pub use strategy::RsiReversal;
pub use strategy::SmaCrossover;
pub use strategy::SuperTrendFollow;
pub use strategy::EnsembleMode;
pub use strategy::EnsembleStrategy;
pub use optimizer::BayesianSearch;
pub use optimizer::GridSearch;
pub use optimizer::OptimizationReport;
pub use optimizer::OptimizationResult;
pub use optimizer::OptimizeMetric;
pub use optimizer::ParamRange;
pub use optimizer::ParamValue;
pub use walk_forward::WalkForwardConfig;
pub use walk_forward::WalkForwardReport;
pub use walk_forward::WindowResult;
pub use monte_carlo::MonteCarloConfig;
pub use monte_carlo::MonteCarloMethod;
pub use monte_carlo::MonteCarloResult;
pub use monte_carlo::PercentileStats;
pub use comparison::BacktestComparison;
pub use comparison::ComparisonReport;
pub use comparison::ComparisonRow;
pub use resample::resample;

Modules§

comparison
Side-by-side comparison of multiple backtest results.
condition
Condition system for building strategy entry/exit rules.
monte_carlo
Monte Carlo simulation for backtesting results.
optimizer
Parameter optimisation for backtesting strategies.
portfolio
Multi-symbol portfolio backtesting.
refs
Indicator reference system for building strategy conditions.
resample
Higher-timeframe candle resampling.
strategy
Strategy trait and context for building trading strategies.
walk_forward
Walk-forward parameter optimisation for backtesting strategies.

Structs§

BacktestConfig
Configuration for backtest execution.
BacktestConfigBuilder
Builder for BacktestConfig
BacktestEngine
Backtest execution engine.
BacktestResult
Complete backtest result
BenchmarkMetrics
Comparison of strategy performance against a benchmark.
EquityPoint
Point on the equity curve
PendingOrder
A queued limit or stop entry order awaiting price-level execution.
PerformanceMetrics
Performance metrics summary
Position
An open position
Signal
A trading signal generated by a strategy
SignalMetadata
Metadata attached to signals for analysis
SignalRecord
Record of a generated signal (for analysis)
SignalStrength
Signal strength/confidence (0.0 to 1.0)
Trade
A completed trade (closed position)

Enums§

BacktestError
Backtest-specific errors
OrderType
Order type controlling how a signal’s entry is executed.
PositionSide
Position direction
SignalDirection
Trading signal direction

Type Aliases§

Result
Result type for backtest operations