70 lines
No EOL
2.1 KiB
TypeScript
70 lines
No EOL
2.1 KiB
TypeScript
#!/usr/bin/env bun
|
|
|
|
/**
|
|
* Simple backtest test without full container
|
|
*/
|
|
|
|
import { BacktestEngine } from './src/backtest/BacktestEngine';
|
|
import { StrategyManager } from './src/strategies/StrategyManager';
|
|
import { StorageService } from './src/services/StorageService';
|
|
import { getLogger } from '@stock-bot/logger';
|
|
|
|
async function runSimpleBacktest() {
|
|
console.log('Running simple backtest test...\n');
|
|
|
|
// Create minimal container
|
|
const logger = getLogger('test');
|
|
const container = {
|
|
logger,
|
|
custom: {}
|
|
};
|
|
|
|
// Create services
|
|
const storageService = new StorageService(container as any);
|
|
const strategyManager = new StrategyManager(container as any);
|
|
|
|
// Initialize strategy
|
|
await strategyManager.initializeStrategies([{
|
|
id: 'test-sma',
|
|
name: 'sma-crossover',
|
|
enabled: true,
|
|
symbols: ['AAPL'],
|
|
allocation: 1.0
|
|
}]);
|
|
|
|
// Create backtest engine
|
|
const backtestEngine = new BacktestEngine(container as any, storageService, strategyManager);
|
|
|
|
const config = {
|
|
mode: 'backtest',
|
|
name: 'Simple SMA Test',
|
|
strategy: 'sma-crossover',
|
|
symbols: ['AAPL'],
|
|
startDate: '2023-01-01T00:00:00Z',
|
|
endDate: '2023-03-01T00:00:00Z', // Just 2 months
|
|
initialCapital: 100000,
|
|
dataFrequency: '1d',
|
|
commission: 0.001,
|
|
slippage: 0.0001
|
|
};
|
|
|
|
try {
|
|
const result = await backtestEngine.runBacktest(config);
|
|
|
|
console.log('\nBacktest Results:');
|
|
console.log(`Total Return: ${result.metrics.totalReturn.toFixed(2)}%`);
|
|
console.log(`Total Trades: ${result.metrics.totalTrades}`);
|
|
console.log(`Trades in history: ${result.trades.length}`);
|
|
console.log(`Win Rate: ${result.metrics.winRate.toFixed(2)}%`);
|
|
|
|
console.log('\nTrade Details:');
|
|
result.trades.forEach((trade, i) => {
|
|
console.log(`Trade ${i + 1}: ${trade.side} ${trade.quantity} @ $${trade.entryPrice.toFixed(2)} -> $${trade.exitPrice.toFixed(2)} (P&L: $${trade.pnl.toFixed(2)})`);
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Backtest failed:', error);
|
|
}
|
|
}
|
|
|
|
runSimpleBacktest().catch(console.error); |