const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:2003'; export interface BacktestRequest { strategy: string; symbols: string[]; startDate: string; endDate: string; initialCapital: number; config?: Record; } export interface BacktestJob { id: string; status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled'; strategy: string; symbols: string[]; startDate: string; endDate: string; initialCapital: number; config: Record; createdAt: string; updatedAt: string; error?: string; } export interface BacktestResult { backtestId: string; metrics: { totalReturn: number; sharpeRatio: number; maxDrawdown: number; winRate: number; totalTrades: number; profitFactor?: number; }; equity: Array<{ date: string; value: number }>; trades?: Array<{ symbol: string; entryDate: string; exitDate: string; entryPrice: number; exitPrice: number; quantity: number; pnl: number; }>; ohlcData?: Record>; } export const backtestApi = { // Create a new backtest async createBacktest(request: BacktestRequest): Promise { const response = await fetch(`${API_BASE_URL}/api/backtests`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(request), }); if (!response.ok) { throw new Error(`Failed to create backtest: ${response.statusText}`); } return response.json(); }, // Get backtest status async getBacktest(id: string): Promise { const response = await fetch(`${API_BASE_URL}/api/backtests/${id}`); if (!response.ok) { throw new Error(`Failed to get backtest: ${response.statusText}`); } return response.json(); }, // Get backtest results async getBacktestResults(id: string): Promise { const response = await fetch(`${API_BASE_URL}/api/backtests/${id}/results`); if (!response.ok) { throw new Error(`Failed to get results: ${response.statusText}`); } return response.json(); }, // List all backtests async listBacktests(limit = 50, offset = 0): Promise { const response = await fetch( `${API_BASE_URL}/api/backtests?limit=${limit}&offset=${offset}` ); if (!response.ok) { throw new Error(`Failed to list backtests: ${response.statusText}`); } return response.json(); }, // Cancel a running backtest async cancelBacktest(id: string): Promise { const response = await fetch(`${API_BASE_URL}/api/backtests/${id}/cancel`, { method: 'POST', }); if (!response.ok) { throw new Error(`Failed to cancel backtest: ${response.statusText}`); } }, };