Trader module for tzutrader - Trading engine and backtesting
This module provides the main trading orchestration, including:
- Backtesting strategies on historical data
- Signal execution with portfolio integration
- Performance reporting and analytics
- Event logging and tracking
Features:
- Simple backtesting API
- Strategy-portfolio integration
- Automatic signal execution
- Comprehensive performance reports
- Transaction cost modeling
Types
Backtester = ref object strategy*: Strategy portfolio*: Portfolio tradeLogs*: seq[TradeLog] equityCurve*: seq[tuple[timestamp: int64, equity: float64]] verbose*: bool
- Backtesting engine
BacktestReport = object symbol*: string ## Primary symbol tested startTime*: int64 ## Backtest start timestamp endTime*: int64 ## Backtest end timestamp initialCash*: float64 ## Starting capital finalValue*: float64 ## Final portfolio value totalReturn*: float64 ## Total return percentage annualizedReturn*: float64 ## Annualized return percentage sharpeRatio*: float64 ## Sharpe ratio (risk-adjusted return) maxDrawdown*: float64 ## Maximum drawdown percentage maxDrawdownDuration*: int64 ## Max drawdown duration (seconds) winRate*: float64 ## Percentage of winning trades totalTrades*: int ## Total number of trades winningTrades*: int ## Number of winning trades losingTrades*: int ## Number of losing trades avgWin*: float64 ## Average winning trade avgLoss*: float64 ## Average losing trade profitFactor*: float64 ## Gross profit / gross loss bestTrade*: float64 ## Best single trade P&L worstTrade*: float64 ## Worst single trade P&L avgTradeReturn*: float64 ## Average return per trade totalCommission*: float64 ## Total commissions paid
- Comprehensive backtest performance report
Procs
proc `$`(report: BacktestReport): string {....raises: [], tags: [], forbids: [].}
- String representation of backtest report
proc formatCompact(report: BacktestReport): string {....raises: [], tags: [], forbids: [].}
- Compact one-line summary of backtest report
proc newBacktester(strategy: Strategy; initialCash: float64 = 100000.0; commission: float64 = 0.0; verbose: bool = false): Backtester {. ...raises: [], tags: [], forbids: [].}
-
Create a new backtesting engine
Args: strategy: Trading strategy to test initialCash: Starting capital (default $100,000) commission: Commission rate (default 0.0) verbose: Enable verbose logging (default false)
Returns: New Backtester instance
proc quickBacktest(symbol: string; strategy: Strategy; data: seq[OHLCV]; initialCash: float64 = 100000.0; commission: float64 = 0.0; verbose: bool = false): BacktestReport {. ...raises: [ValueError, Exception, KeyError], tags: [RootEffect, TimeEffect], forbids: [].}
-
Quick backtest convenience function
Args: symbol: Symbol being tested strategy: Trading strategy data: Historical OHLCV data initialCash: Starting capital commission: Commission rate verbose: Enable verbose output
Returns: Backtest report
proc quickBacktestCSV(symbol: string; strategy: Strategy; csvPath: string; initialCash: float64 = 100000.0; commission: float64 = 0.0; verbose: bool = false): BacktestReport {. ...raises: [IOError, DataError, ValueError, Exception, KeyError], tags: [ReadIOEffect, RootEffect, TimeEffect], forbids: [].}
-
Quick backtest from CSV file
Args: symbol: Symbol being tested strategy: Trading strategy csvPath: Path to CSV file with OHLCV data initialCash: Starting capital commission: Commission rate verbose: Enable verbose output
Returns: Backtest report
proc run(bt: Backtester; data: seq[OHLCV]; symbol: string = ""): BacktestReport {. ...raises: [ValueError, Exception, KeyError], tags: [RootEffect, TimeEffect], forbids: [].}
-
Run backtest on historical data
Args: data: Historical OHLCV data symbol: Symbol being tested (for reporting)
Returns: Comprehensive backtest report