Files
system-specs/components/phase1/strategy.md

3.9 KiB

strategy - 전략 관리

개요

strategy 컴포넌트는 전략 등록, 버전 관리, 신호 생성, 백테스트를 담당합니다.

책임

  • 전략 코드/메타데이터 등록 및 버전 관리
  • 시장 데이터 기반 매매 신호 생성
  • 신호를 주문으로 변환
  • 백테스트 실행 및 성과 지표 계산
  • 파라미터 관리 및 검증

의존성

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. 전략 등록 및 버전 관리

registerStrategy(strategy: StrategyDefinition): Strategy
updateStrategy(id: string, version: StrategyVersion): Strategy
getStrategy(id: string, version?: string): Strategy
  • 전략 코드와 파라미터 메타데이터를 저장합니다.
  • 새 버전은 불변으로 보존하고 변경 이력을 추적합니다.

2. 전략 실행 엔진

calculateSignals(strategyId: string, marketData: MarketData): Signal[]
generateOrders(containerId: string, signals: Signal[]): Order[]
  • 전략 신호를 생성하고 현재 포지션과 목표 포지션 차이로 주문을 계산합니다.

3. 백테스트

runBacktest(config: BacktestConfig): BacktestResult
calculateMetrics(backtestResult: BacktestResult): PerformanceMetrics
  • 거래 비용과 슬리피지를 반영해 성과 지표를 산출합니다.

4. 파라미터 관리

getParameters(strategyId: string): Parameter[]
setParameters(strategyId: string, params: Record<string, any>): void
  • 파라미터 타입/범위를 검증하고 실행 컨텍스트에 반영합니다.

전략 인터페이스

interface StrategyInterface {
  initialize(context: StrategyContext): void
  generateSignals(data: MarketData): Signal[]

  onMarketOpen?(): void
  onMarketClose?(): void
  onOrderFilled?(order: Order): void
}

데이터 모델

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<string, number>
  }[]
  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

백테스트 실행

구현 고려사항

  • 전략 코드 저장 시 보안 검토 및 샌드박스 실행 환경을 고려합니다.
  • 파라미터 변경은 감사 로그에 기록합니다.

관련 문서

관련 컴포넌트