src/tzutrader/trader

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
TradeLog = object
  timestamp*: int64
  symbol*: string
  action*: Position
  quantity*: float64
  price*: float64
  cash*: float64
  equity*: float64
Log entry for a trade event

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