Skip to main content

BACKTEST ENGINE

backtest-engine.ts

Walk-forward backtesting: no-lookahead, slippage, metrics.

Stark avatarStark

WHAT THIS PATTERN TEACHES

How to build a backtest engine that prevents lookahead bias, uses walk-forward validation, models slippage and commissions, and produces standard metrics (Sharpe ratio, max drawdown, profit factor).

WHEN TO USE THIS

Trading systems, financial models, any strategy that needs validation against historical data.

AT A GLANCE

const engine = new BacktestEngine(strategy);
const result = await engine.run(historicalData, {
  slippage: 0.001,
  commission: 0.0005,
});
console.log(result.sharpeRatio);

FRAMEWORK IMPLEMENTATIONS

TypeScript
interface BacktestResult {
  trades: Trade[];
  sharpeRatio: number;
  maxDrawdown: number;
  profitFactor: number;
  totalReturn: number;
}

class BacktestEngine {
  constructor(private strategy: Strategy) {}

  async run(data: OHLCV[], opts: BacktestOpts): Promise<BacktestResult> {
    const trades: Trade[] = [];
    for (let i = this.strategy.lookback; i < data.length; i++) {
      // Strategy only sees data[0..i] — no lookahead
      const signal = this.strategy.evaluate(data.slice(0, i + 1));
      if (signal) trades.push(this.executeTrade(signal, data[i], opts));
    }
    return this.calculateMetrics(trades);
  }
← All Patterns