stock-bot/apps/stock/orchestrator/test-quick-backtest.ts

54 lines
No EOL
1.7 KiB
TypeScript

#!/usr/bin/env bun
/**
* Quick test of backtest with fixed order execution
*/
import { createContainer } from './src/simple-container';
import { BacktestEngine } from './src/backtest/BacktestEngine';
async function runQuickBacktest() {
const container = await createContainer();
const backtestEngine = container.resolve('backtestEngine') as BacktestEngine;
const config = {
name: 'Quick SMA Test',
strategy: 'sma-crossover',
symbols: ['AAPL'],
startDate: '2020-01-01',
endDate: '2021-01-01', // Just 1 year for quick test
initialCapital: 100000,
dataFrequency: '1d',
commission: 0.001,
slippage: 0.0001
};
console.log('Running quick backtest...\n');
try {
const result = await backtestEngine.runBacktest(config);
console.log('Backtest Results:');
console.log(`Total Return: ${result.metrics.totalReturn.toFixed(2)}%`);
console.log(`Total Trades: ${result.metrics.totalTrades}`);
console.log(`Win Rate: ${result.metrics.winRate.toFixed(2)}%`);
console.log(`Sharpe Ratio: ${result.metrics.sharpeRatio.toFixed(2)}`);
console.log(`Max Drawdown: ${result.metrics.maxDrawdown.toFixed(2)}%`);
console.log('\nTrade History:');
console.log(`Trades in history: ${result.trades.length}`);
result.trades.slice(0, 5).forEach(trade => {
console.log(`- ${trade.side} ${trade.quantity} @ $${trade.entryPrice} -> $${trade.exitPrice} (${trade.pnlPercent.toFixed(2)}%)`);
});
if (result.trades.length > 5) {
console.log(`... and ${result.trades.length - 5} more trades`);
}
} catch (error) {
console.error('Backtest failed:', error);
}
}
runQuickBacktest().catch(console.error);