80 lines
2 KiB
TypeScript
80 lines
2 KiB
TypeScript
/**
|
|
* 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<OrderResult>;
|
|
abstract getCurrentTime(): Date;
|
|
abstract getMarketData(symbol: string): Promise<MarketData>;
|
|
abstract publishEvent(event: string, data: any): Promise<void>;
|
|
}
|
|
|
|
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}`);
|
|
}
|
|
}
|
|
}
|