3.7 KiB
3.7 KiB
risk - 리스크 관리
개요
risk 컴포넌트는 사전 주문 검증과 포지션 리스크 모니터링을 담당합니다.
책임
- 주문 전 리스크 체크 (잔고, 포지션 한도, 레버리지)
- 포지션 리스크 지표 계산 (VaR, 베타, 집중도)
- 손절/익절 조건 관리 및 트리거 평가
- 리스크 한도 설정 및 위반 감지
의존성
graph LR
Risk[risk] --> Mgmt[mgmt]
Risk --> Balance[balance]
Risk --> Data[data]
Risk --> DB[(Database)]
Scheduler[scheduler] --> Risk
Monitor[monitor] --> Risk
style Risk fill:#E53935,color:#fff
주요 기능
1. 사전 주문 검증
validateOrder(order: Order, container: Container): RiskCheckResult
validateOrderBatch(orders: Order[], container: Container): RiskCheckResult[]
- 잔고 충분성, 포지션 사이즈, 집중도, 레버리지를 검증합니다.
2. 포지션 리스크 모니터링
calculatePositionRisk(containerId: string): PositionRisk
checkRiskLimits(containerId: string): LimitViolation[]
3. 손절/익절 관리
setStopLoss(containerId: string, symbol: string, config: StopLossConfig): void
setTakeProfit(containerId: string, symbol: string, level: number): void
checkStopConditions(containerId: string): StopTrigger[]
4. 리스크 한도 설정
setRiskLimits(containerId: string, limits: RiskLimits): void
getRiskProfile(containerId: string): RiskProfile
5. 포트폴리오 리스크 분석
calculatePortfolioVaR(containerId: string, confidence: number, horizon: number): VaRResult
calculateCorrelationMatrix(containerId: string): CorrelationMatrix
stressTest(containerId: string, scenarios: Scenario[]): StressTestResult[]
데이터 모델
interface RiskLimits {
containerId: string
position: {
maxSinglePositionPct: number
maxSectorPct: number
maxTotalLeverage: number
}
loss: {
maxDailyLossPct: number
maxDrawdownPct: number
stopLossEnabled: boolean
}
exposure: {
maxLongExposure: number
maxShortExposure: number
maxGrossExposure: number
}
}
interface RiskCheckResult {
passed: boolean
violations: {
rule: string
severity: 'BLOCKING' | 'WARNING'
message: string
currentValue: number
limitValue: number
}[]
recommendations?: string[]
}
interface PositionRisk {
containerId: string
positions: {
symbol: string
marketValue: number
weightPct: number
VaR95: number
beta: number
sector: string
}[]
portfolio: {
totalValue: number
totalVaR95: number
beta: number
correlationRisk: number
}
limits: {
type: string
current: number
limit: number
utilizationPct: number
}[]
calculatedAt: Date
}
interface StopLossConfig {
type: 'FIXED' | 'TRAILING' | 'TIME_BASED'
fixedPrice?: number
fixedPct?: number
trailingPct?: number
holdingPeriodDays?: number
autoExecute: boolean
}
interface VaRResult {
confidence: number
horizon: number
VaR: number
VaRPct: number
method: 'HISTORICAL' | 'PARAMETRIC' | 'MONTE_CARLO'
calculatedAt: Date
}
API 명세
POST /api/risk/check
주문 리스크 체크
GET /api/risk/containers/:containerId
리스크 프로필 조회
구현 고려사항
- 리스크 위반은 monitor 알림과 연동합니다.
- 한도 변경은 감사 로그로 추적합니다.