/** * Execution Mode Framework * Base classes for different execution modes (live, event-driven, vectorized) */ import { getLogger } from '@stock-bot/logger'; const _logger = getLogger('execution-mode'); export interface Order { id: string; symbol: string; side: 'BUY' | 'SELL'; quantity: number; type: 'MARKET' | 'LIMIT'; price?: number; timestamp: Date; } export interface OrderResult { orderId: string; symbol: string; executedQuantity: number; executedPrice: number; commission: number; slippage: number; timestamp: Date; executionTime: number; } export interface MarketData { symbol: string; timestamp: Date; open: number; high: number; low: number; close: number; volume: number; } export abstract class ExecutionMode { protected logger = getLogger(this.constructor.name); abstract name: string; abstract executeOrder(order: Order): Promise; abstract getCurrentTime(): Date; abstract getMarketData(symbol: string): Promise; abstract publishEvent(event: string, data: any): Promise; } export enum BacktestMode { LIVE = 'live', EVENT_DRIVEN = 'event-driven', VECTORIZED = 'vectorized', HYBRID = 'hybrid', } export class ModeFactory { static create(mode: BacktestMode, _config?: any): ExecutionMode { switch (mode) { case BacktestMode.LIVE: // TODO: Import and create LiveMode throw new Error('LiveMode not implemented yet'); case BacktestMode.EVENT_DRIVEN: // TODO: Import and create EventBacktestMode throw new Error('EventBacktestMode not implemented yet'); case BacktestMode.VECTORIZED: // TODO: Import and create VectorBacktestMode throw new Error('VectorBacktestMode not implemented yet'); case BacktestMode.HYBRID: // TODO: Import and create HybridBacktestMode throw new Error('HybridBacktestMode not implemented yet'); default: throw new Error(`Unknown mode: ${mode}`); } } }