Skip to content

SEUNGBOONG/Risk_Basic_study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

Risk_Basic_study

📊 Risk Project Status (리스크 프로젝트 현황)


1️⃣ 현재 목표

이 프로젝트는 다음 기능을 수행하는 금융 리스크 관리 백엔드 시스템을 구축하는 것이 목적이다:

  • 히스토리컬 VaR 및 Expected Shortfall 계산
  • 최대 5개 자산으로 구성된 포트폴리오 분석
  • 극단적 시장 상황을 가정한 스트레스 테스트 수행
  • 자산별 투자 가이드 제공 (보유, 익절, 부분 매도, 손절)
  • 포트폴리오 전체 리스크 요약 제공

2️⃣ 현재까지 구현된 기능


2.1 히스토리컬 리스크 계산

✔ 구현 내용

  • POST /api/historical/var
  • Historical VaR 계산
  • Expected Shortfall (ES) 계산

✔ 관련 파일

  • HistoricalVaRController.java
  • HistoricalVaR.java
  • HistoricalES.java
  • RiskService.java

2.2 포트폴리오 투자 조언 API

✔ 구현 내용

  • POST /api/historical/advice
  • 최대 5개 자산 입력 가능

✔ 입력 데이터

  • 자산명
  • 투자금액
  • 현재 수익률
  • 과거 수익률

✔ 응답 데이터 (자산별)

  • 비중 (weight)
  • 투자금액
  • 현재 수익률
  • 현재 손익 금액
  • VaR 비율
  • Expected Shortfall 비율
  • 손절 기준 (stop-loss)
  • 익절 기준 (take-profit)
  • 리스크 등급
  • 추천 액션
  • 피드백

✔ 관련 파일

  • PortfolioAdviceRequest.java
  • PortfolioAdviceResponse.java

2.3 스트레스 테스트 API

✔ 구현 내용

  • 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

2.4 투자 조언 판단 로직

✔ 구현 내용

  • 손절 기준 계산
  • 익절 기준 계산
  • 리스크 등급 분류
  • 액션 결정
  • 피드백 생성
  • 포트폴리오 전체 의견 생성

✔ 액션 종류

  • CUT_LOSS (손절)
  • TAKE_PROFIT (익절)
  • PARTIAL_SELL (부분 매도)
  • HOLD (보유)

2.5 객체지향 설계 및 OCP 적용

✔ 적용 내용

  • Risk Model 생성 로직 분리
  • Advice 계산 로직 분리
  • Policy 기반 설계 적용
  • 포트폴리오 의견 Rule 객체 분리
  • 스트레스 시나리오 전략 패턴 적용

✔ 확장 가능 구조

  • 새로운 리스크 모델 추가 가능
  • 새로운 손절/익절 정책 추가 가능
  • 새로운 포트폴리오 의견 규칙 추가 가능
  • 새로운 스트레스 시나리오 추가 가능

✔ 주요 파일

  • RiskModelProvider.java
  • RiskModelFactory.java
  • DefaultAssetAdvicePolicy.java
  • PortfolioAdviceAnalyzer.java
  • PortfolioOpinionResolver.java
  • StressScenario.java
  • StressTestAnalyzer.java

3️⃣ 테스트 현황

✔ 테스트 내용

  • 포트폴리오 요약 계산 검증
  • 손절 로직 최소값 검증
  • 스트레스 테스트 최악 시나리오 선택 검증

✔ 테스트 파일

  • RiskServiceTest.java

✔ 상태

./gradlew test → 성공


4️⃣ 미구현 기능


4.1 사용자 리스크 성향

📌 예시

  • Conservative (보수형)
  • Neutral (중립형)
  • Aggressive (공격형)

📌 적용 대상

  • 손절 기준
  • 익절 기준
  • 액션 판단 기준
  • 스트레스 테스트 해석

4.2 한국어 피드백 정리

  • 일부 피드백이 영어 상태
  • 한국어로 통일 필요

4.3 시장 데이터 연동

현재:

  • 수익률 직접 입력 방식

향후:

  • 종목 코드 입력
  • 시장 데이터 자동 조회
  • 수익률 자동 생성

4.4 커스텀 스트레스 시나리오

현재:

  • 고정 시나리오만 지원

향후:

  • 사용자 정의 충격률 입력
  • 섹터별 충격 설정
  • 종목별 개별 충격 설정

5️⃣ 다음 개발 우선순위

  1. 사용자 리스크 성향 기능 추가
  2. 커스텀 스트레스 시나리오 지원
  3. 시장 데이터 연동

6️⃣ 전체 요약

✔ 구현 완료

  • VaR / ES 계산
  • 포트폴리오 분석 API
  • 스트레스 테스트 API
  • 자산별 투자 추천
  • OOP 기반 확장 구조
  • 테스트 코드 작성 및 통과

❗ 미완성

  • 사용자 성향 반영
  • 실시간 데이터 연동
  • 한국어 피드백 통일
  • 사용자 정의 시나리오

🔥 최종 평가

이 프로젝트는 단순 학습용 수준을 넘어 실제 금융 리스크 관리 시스템의 초기 구조를 갖춘 상태이다.

📊 Risk API 테스트 세트 (실전용)


1️⃣ VaR 계산 API

📌 Endpoint

POST /api/historical/var


📥 Request

{
  "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
}

📤 Response (예시)

{
  "success": true,
  "data": {
    "varAmount": 42000
  }
}

👉 의미: 95% 신뢰수준에서 최대 약 4.2만원 손실 가능


2️⃣ 스트레스 테스트 API

📌 Endpoint

POST /api/historical/stress-test


📥 Request

{
  "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"
  ]
}

📤 Response (예시)

{
  "success": true,
  "data": {
    "scenarios": [
      {
        "scenario": "MARKET_CRASH_10",
        "totalLoss": -150000
      },
      {
        "scenario": "SEMICONDUCTOR_SHOCK",
        "totalLoss": -200000
      },
      {
        "scenario": "LIQUIDITY_FREEZE",
        "totalLoss": -180000
      }
    ],
    "worstScenario": "SEMICONDUCTOR_SHOCK"
  }
}

👉 의미:

  • 반도체 쇼크가 가장 위험
  • 최대 약 20만원 손실 가능

3️⃣ 포트폴리오 투자 조언 API

📌 Endpoint

POST /api/historical/advice


📥 Request

{
  "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
}

📤 Response (예시)

{
  "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 → 실제 투자 행동 추천

🔥 포트폴리오용 한 문장

이 시스템은 히스토리컬 기반 리스크 분석 + 스트레스 테스트 + 투자 의사결정 지원 기능을 통합한 금융 리스크 엔진이다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages