# strategy - 전략 관리 ## 개요 **strategy** 컴포넌트는 전략 등록, 버전 관리, 신호 생성, 백테스트를 담당합니다. ### 책임 - 전략 코드/메타데이터 등록 및 버전 관리 - 시장 데이터 기반 매매 신호 생성 - 신호를 주문으로 변환 - 백테스트 실행 및 성과 지표 계산 - 파라미터 관리 및 검증 ### 의존성 ```mermaid graph LR Strategy[strategy] --> Data[data] Strategy --> Risk[risk] Strategy --> DB[(Database)] Scheduler[scheduler] --> Strategy Analytics[analytics] --> Strategy style Strategy fill:#2196F3,color:#fff ``` ## 주요 기능 ### 1. 전략 등록 및 버전 관리 ```typescript registerStrategy(strategy: StrategyDefinition): Strategy updateStrategy(id: string, version: StrategyVersion): Strategy getStrategy(id: string, version?: string): Strategy ``` - 전략 코드와 파라미터 메타데이터를 저장합니다. - 새 버전은 불변으로 보존하고 변경 이력을 추적합니다. ### 2. 전략 실행 엔진 ```typescript calculateSignals(strategyId: string, marketData: MarketData): Signal[] generateOrders(containerId: string, signals: Signal[]): Order[] ``` - 전략 신호를 생성하고 현재 포지션과 목표 포지션 차이로 주문을 계산합니다. ### 3. 백테스트 ```typescript runBacktest(config: BacktestConfig): BacktestResult calculateMetrics(backtestResult: BacktestResult): PerformanceMetrics ``` - 거래 비용과 슬리피지를 반영해 성과 지표를 산출합니다. ### 4. 파라미터 관리 ```typescript getParameters(strategyId: string): Parameter[] setParameters(strategyId: string, params: Record): void ``` - 파라미터 타입/범위를 검증하고 실행 컨텍스트에 반영합니다. ### 전략 인터페이스 ```typescript interface StrategyInterface { initialize(context: StrategyContext): void generateSignals(data: MarketData): Signal[] onMarketOpen?(): void onMarketClose?(): void onOrderFilled?(order: Order): void } ``` ## 데이터 모델 ```typescript interface Strategy { id: string name: string description: string category: 'ASSET_ALLOCATION' | 'MOMENTUM' | 'VALUE' | 'ARBITRAGE' | 'CUSTOM' versions: StrategyVersion[] currentVersion: string parameters: Parameter[] requiredData: string[] createdBy: string createdAt: Date isPublic: boolean } interface StrategyVersion { version: string code: string changelog?: string createdAt: Date backtestResults?: BacktestResult[] } interface Signal { symbol: string action: 'BUY' | 'SELL' | 'HOLD' targetWeight?: number targetQuantity?: number reason?: string confidence?: number generatedAt: Date } interface BacktestConfig { strategyId: string strategyVersion: string startDate: Date endDate: Date initialCapital: number universe: string[] benchmark?: string costs: { commission: number slippage: number } } interface BacktestResult { strategyId: string config: BacktestConfig equity: { date: Date value: number cash: number positions: Record }[] trades: { date: Date symbol: string action: 'BUY' | 'SELL' quantity: number price: number commission: number }[] metrics: PerformanceMetrics runAt: Date } ``` ## API 명세 ### POST /api/strategies 전략 등록 ### GET /api/strategies/:strategyId 전략 조회 (version 파라미터 지원) ### POST /api/strategies/:strategyId/backtests 백테스트 실행 ## 구현 고려사항 - 전략 코드 저장 시 보안 검토 및 샌드박스 실행 환경을 고려합니다. - 파라미터 변경은 감사 로그에 기록합니다. ## 관련 문서 - [시스템 개요](../../docs/01-overview.md) - [공통 데이터 모델](../../docs/03-data-models.md) ### 관련 컴포넌트 - [data - 데이터 관리](./data.md) - [risk - 리스크 관리](./risk.md) - [scheduler - 실행 스케줄러](./scheduler.md)