Quick Start
Recording Backtest State
Recorder
Records time-series state information during backtesting.Constructor
Number of assets being tracked.
Maximum number of records to store. Raises
IndexError if exceeded.Properties
Returns the JIT-compiled recorder instance for use in
@njit functions.Methods
Saves recorded data to a file.Parameters:
file(str): Output file path (.npzformat)
Retrieves records for a specific asset.Parameters:
asset_no(int): Asset number
Asset Records
LinearAssetRecord
Processes records for linear assets (standard futures, spot markets).Constructor
Backtest record data as NumPy array or Polars DataFrame.
Configuration Methods
Sets the contract size multiplier.Parameters:
contract_size(float): Contract multiplier. Default: 1.0
Sets the time unit for timestamp conversion.Parameters:
time_unit(str): Time unit (‘ns’, ‘us’, ‘ms’, ‘s’). Default: ‘ns’
Sets resampling frequency for downsampling.Parameters:
frequency(str): Polars-compatible frequency string. Default: ’10s’
Generates monthly statistics breakdown.Returns: Self
Generates daily statistics breakdown.Returns: Self
Computes statistics with specified metrics.Parameters:
metrics(List[Metric | Type[Metric]], optional): List of metrics to compute. Default: SR, Sortino, Ret, MaxDrawdown, DailyNumberOfTrades, DailyTradingValue, ReturnOverMDD, ReturnOverTrade, MaxPositionValue**kwargs: Additional arguments passed to metric constructors
Stats instanceInverseAssetRecord
Processes records for inverse assets (inverse perpetuals).LinearAssetRecord but with inverse asset equity calculation.
Stats
Container for computed statistics.Methods
Returns a summary DataFrame of statistics.Parameters:
pretty(bool): Format for pretty printing. Default: False
Plots equity curves and position charts.Parameters:
price_as_ret(bool): Plot price as cumulative returns. Default: Falsebackend(str): Plotting backend (‘matplotlib’ or ‘holoviews’). Default: ‘matplotlib’
Performance Metrics
All metrics inherit from theMetric base class and can be customized.
Base Metric Class
Return Metrics
Total return.Parameters:
name(str, optional): Metric name. Default: ‘Return’book_size(float, optional): Capital allocation for percentage calculation
Annualized return.Parameters:
name(str, optional): Metric name. Default: ‘AnnualReturn’book_size(float, optional): Capital allocationtrading_days_per_year(float): Trading days per year. Default: 252
Risk Metrics
Sharpe Ratio (without risk-free rate).Parameters:
name(str, optional): Metric name. Default: ‘SR’trading_days_per_year(float): Trading days for annualization. Default: 252
Sortino Ratio (penalizes only downside volatility).Parameters:
name(str, optional): Metric name. Default: ‘Sortino’trading_days_per_year(float): Default: 252
Maximum drawdown.Parameters:
name(str, optional): Metric name. Default: ‘MaxDrawdown’book_size(float, optional): Capital for percentage calculation
Composite Metrics
Return divided by maximum drawdown.Parameters:
name(str, optional): Default: ‘ReturnOverMDD’
Return per unit of trading value.Parameters:
name(str, optional): Default: ‘ReturnOverTrade’
Trading Activity Metrics
Total number of trades.Parameters:
name(str, optional): Default: ‘NumberOfTrades’
Average number of trades per day.Parameters:
name(str, optional): Default: ‘DailyNumberOfTrades’
Total trading volume (quantity).Parameters:
name(str, optional): Default: ‘TradingVolume’
Average daily trading volume.Parameters:
name(str, optional): Default: ‘DailyTradingVolume’
Total trading value (notional) or turnover.Parameters:
name(str, optional): Default: ‘TradingValue’ or ‘Turnover’ if book_size providedbook_size(float, optional): Capital for turnover calculation
Average daily trading value or turnover.Parameters:
name(str, optional): Default: ‘DailyTradingValue’ or ‘DailyTurnover’ if book_size providedbook_size(float, optional): Capital for turnover calculation
Position Metrics
Maximum open position value.Parameters:
name(str, optional): Default: ‘MaxPositionValue’
Average open position value.Parameters:
name(str, optional): Default: ‘MeanPositionValue’
Median open position value.Parameters:
name(str, optional): Default: ‘MedianPositionValue’
Maximum leverage (position value / capital).Parameters:
name(str, optional): Default: ‘MaxLeverage’book_size(float): Capital allocation (required)
Complete Example
Best Practices
Recording Frequency
- High-frequency strategies: Record every 1-10 seconds
- Medium-frequency: Record every 1-5 minutes
- Low-frequency: Record every 5-60 minutes
Capital Allocation
Always specifybook_size for meaningful percentage-based metrics: