import { RustBacktestAdapter } from './src/backtest/RustBacktestAdapter'; import { IServiceContainer } from '@stock-bot/di'; import { BacktestConfig } from './src/types'; // Mock container const mockContainer: IServiceContainer = { logger: { info: console.log, error: console.error, warn: console.warn, debug: console.log, }, mongodb: {} as any, postgres: {} as any, redis: {} as any, custom: {}, } as IServiceContainer; // Mock storage service class MockStorageService { async getHistoricalBars(symbol: string, startDate: Date, endDate: Date, frequency: string) { const bars = []; const startTime = startDate.getTime(); const endTime = endDate.getTime(); const dayMs = 24 * 60 * 60 * 1000; let time = startTime; let dayIndex = 0; // Simple oscillating price for testing while (time <= endTime) { const price = 100 + 10 * Math.sin(dayIndex * 0.2); bars.push({ timestamp: new Date(time), open: price * 0.99, high: price * 1.01, low: price * 0.98, close: price, volume: 1000000, vwap: price, }); time += dayMs; dayIndex++; } return bars; } } // Test the backtest async function testTradeFormat() { console.log('=== Testing Trade Format ===\n'); const adapter = new RustBacktestAdapter(mockContainer); (adapter as any).storageService = new MockStorageService(); const config: BacktestConfig = { name: 'Trade Format Test', strategy: 'Simple Moving Average Crossover', symbols: ['TEST'], startDate: '2024-01-01T00:00:00Z', endDate: '2024-03-01T00:00:00Z', initialCapital: 100000, commission: 0.001, slippage: 0.0001, dataFrequency: '1d', config: { fastPeriod: 5, slowPeriod: 15, }, }; try { const result = await adapter.runBacktest(config); console.log('\n=== Trade Format ==='); console.log('Number of trades:', result.trades.length); console.log('\nFirst 3 trades:'); result.trades.slice(0, 3).forEach((trade, idx) => { console.log(`\nTrade ${idx + 1}:`, JSON.stringify(trade, null, 2)); }); // Check what format the trades are in if (result.trades.length > 0) { const firstTrade = result.trades[0]; console.log('\n=== Trade Structure Analysis ==='); console.log('Keys:', Object.keys(firstTrade)); console.log('Has entryDate/exitDate?', 'entryDate' in firstTrade && 'exitDate' in firstTrade); console.log('Has timestamp?', 'timestamp' in firstTrade); console.log('Has side field?', 'side' in firstTrade); console.log('Side value:', firstTrade.side); } } catch (error) { console.error('Test failed:', error); } } testTradeFormat().catch(console.error);