이 프로젝트는 다음 기능을 수행하는 금융 리스크 관리 백엔드 시스템을 구축하는 것이 목적이다:
- 히스토리컬 VaR 및 Expected Shortfall 계산
- 최대 5개 자산으로 구성된 포트폴리오 분석
- 극단적 시장 상황을 가정한 스트레스 테스트 수행
- 자산별 투자 가이드 제공 (보유, 익절, 부분 매도, 손절)
- 포트폴리오 전체 리스크 요약 제공
- POST /api/historical/var
- Historical VaR 계산
- Expected Shortfall (ES) 계산
- HistoricalVaRController.java
- HistoricalVaR.java
- HistoricalES.java
- RiskService.java
- POST /api/historical/advice
- 최대 5개 자산 입력 가능
- 자산명
- 투자금액
- 현재 수익률
- 과거 수익률
- 비중 (weight)
- 투자금액
- 현재 수익률
- 현재 손익 금액
- VaR 비율
- Expected Shortfall 비율
- 손절 기준 (stop-loss)
- 익절 기준 (take-profit)
- 리스크 등급
- 추천 액션
- 피드백
- PortfolioAdviceRequest.java
- PortfolioAdviceResponse.java
- POST /api/historical/stress-test
- 여러 시나리오 동시 실행
- 자산별 충격 수익률 및 손익 계산
- 시나리오별 총 손실 집계
- 최악 시나리오 자동 선택
- MARKET_CRASH_10 (시장 -10%)
- MARKET_CRASH_20 (시장 -20%)
- SEMICONDUCTOR_SHOCK (반도체 충격)
- LIQUIDITY_FREEZE (유동성 경색)
- StressTestRequest.java
- StressTestResponse.java
- StressTestAnalyzer.java
- StressScenarioFactory.java
- 손절 기준 계산
- 익절 기준 계산
- 리스크 등급 분류
- 액션 결정
- 피드백 생성
- 포트폴리오 전체 의견 생성
- CUT_LOSS (손절)
- TAKE_PROFIT (익절)
- PARTIAL_SELL (부분 매도)
- HOLD (보유)
- Risk Model 생성 로직 분리
- Advice 계산 로직 분리
- Policy 기반 설계 적용
- 포트폴리오 의견 Rule 객체 분리
- 스트레스 시나리오 전략 패턴 적용
- 새로운 리스크 모델 추가 가능
- 새로운 손절/익절 정책 추가 가능
- 새로운 포트폴리오 의견 규칙 추가 가능
- 새로운 스트레스 시나리오 추가 가능
- RiskModelProvider.java
- RiskModelFactory.java
- DefaultAssetAdvicePolicy.java
- PortfolioAdviceAnalyzer.java
- PortfolioOpinionResolver.java
- StressScenario.java
- StressTestAnalyzer.java
- 포트폴리오 요약 계산 검증
- 손절 로직 최소값 검증
- 스트레스 테스트 최악 시나리오 선택 검증
- RiskServiceTest.java
./gradlew test → 성공
- Conservative (보수형)
- Neutral (중립형)
- Aggressive (공격형)
- 손절 기준
- 익절 기준
- 액션 판단 기준
- 스트레스 테스트 해석
- 일부 피드백이 영어 상태
- 한국어로 통일 필요
현재:
- 수익률 직접 입력 방식
향후:
- 종목 코드 입력
- 시장 데이터 자동 조회
- 수익률 자동 생성
현재:
- 고정 시나리오만 지원
향후:
- 사용자 정의 충격률 입력
- 섹터별 충격 설정
- 종목별 개별 충격 설정
- 사용자 리스크 성향 기능 추가
- 커스텀 스트레스 시나리오 지원
- 시장 데이터 연동
- VaR / ES 계산
- 포트폴리오 분석 API
- 스트레스 테스트 API
- 자산별 투자 추천
- OOP 기반 확장 구조
- 테스트 코드 작성 및 통과
- 사용자 성향 반영
- 실시간 데이터 연동
- 한국어 피드백 통일
- 사용자 정의 시나리오
이 프로젝트는 단순 학습용 수준을 넘어 실제 금융 리스크 관리 시스템의 초기 구조를 갖춘 상태이다.
POST /api/historical/var
{
"assets": [
{
"name": "SamsungElectronics",
"weight": 0.6,
"returns": [-0.021, -0.014, -0.008, 0.003, 0.011, -0.017, 0.006, 0.012, -0.009, 0.004, 0.007, -0.013, 0.015, -0.006, 0.002, 0.009, -0.011, 0.005, 0.008, -0.004]
},
{
"name": "SKHynix",
"weight": 0.4,
"returns": [-0.031, -0.022, -0.015, 0.008, 0.017, -0.025, 0.011, 0.019, -0.013, 0.007, 0.012, -0.018, 0.021, -0.009, 0.004, 0.013, -0.016, 0.008, 0.014, -0.006]
}
],
"confidenceLevel": 0.95,
"modelType": "HISTORICAL",
"totalValue": 1500000
}{
"success": true,
"data": {
"varAmount": 42000
}
}👉 의미: 95% 신뢰수준에서 최대 약 4.2만원 손실 가능
POST /api/historical/stress-test
{
"assets": [
{
"name": "SamsungElectronics",
"sector": "semiconductor",
"investmentAmount": 1000000,
"currentReturnRate": 0.10
},
{
"name": "KBFinancial",
"sector": "finance",
"investmentAmount": 500000,
"currentReturnRate": 0.03
}
],
"scenarios": [
"MARKET_CRASH_10",
"SEMICONDUCTOR_SHOCK",
"LIQUIDITY_FREEZE"
]
}{
"success": true,
"data": {
"scenarios": [
{
"scenario": "MARKET_CRASH_10",
"totalLoss": -150000
},
{
"scenario": "SEMICONDUCTOR_SHOCK",
"totalLoss": -200000
},
{
"scenario": "LIQUIDITY_FREEZE",
"totalLoss": -180000
}
],
"worstScenario": "SEMICONDUCTOR_SHOCK"
}
}👉 의미:
- 반도체 쇼크가 가장 위험
- 최대 약 20만원 손실 가능
POST /api/historical/advice
{
"assets": [
{
"name": "SamsungElectronics",
"investmentAmount": 1000000,
"currentReturnRate": 0.12,
"returns": [-0.012, -0.009, -0.008, -0.006, -0.004, -0.003, -0.002, 0.001, 0.003, 0.004, 0.005, 0.006, 0.008, 0.009, 0.011, 0.012, 0.013, 0.015, 0.016, 0.018]
},
{
"name": "SKHynix",
"investmentAmount": 500000,
"currentReturnRate": -0.08,
"returns": [-0.11, -0.09, -0.08, -0.07, -0.06, -0.04, -0.03, -0.02, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.08, 0.09, 0.10, 0.11, 0.12, 0.14]
}
],
"confidenceLevel": 0.95
}{
"success": true,
"data": {
"portfolioSummary": {
"totalValue": 1500000,
"expectedLoss": 50000,
"riskLevel": "HIGH"
},
"assets": [
{
"name": "SamsungElectronics",
"action": "TAKE_PROFIT",
"feedback": "수익 구간이므로 일부 익절 권장"
},
{
"name": "SKHynix",
"action": "CUT_LOSS",
"feedback": "손실 구간이며 리스크 높음 → 손절 권장"
}
]
}
}- VaR → 평상시 최대 손실
- Stress → 위기 상황 손실
- Advice → 실제 투자 행동 추천
이 시스템은 히스토리컬 기반 리스크 분석 + 스트레스 테스트 + 투자 의사결정 지원 기능을 통합한 금융 리스크 엔진이다.