BACKTEST ENGINE
backtest-engine.ts
Walk-forward backtesting: no-lookahead, slippage, metrics.
StarkWHAT 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);
}