37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
'''
|
|
risk_manage_engine/calculators/svar.py
|
|
|
|
Stressed Value at Risk (SVaR)를 계산하는 함수 모듈입니다.
|
|
|
|
- SVaR은 일반적인 VaR보다 더 극단적인 시장 상황(스트레스 조건)을 고려한 리스크 측정 방식입니다.
|
|
- MVP 기준에서는 "특정 구간(예: 최근 급락 구간)의 수익률만을 기준으로 VaR을 재계산"하는 방식으로 간단하게 구현합니다.
|
|
'''
|
|
|
|
import numpy as np
|
|
import pandas as pd
|
|
|
|
def calculate_svar(df: pd.DataFrame, confidence_level: float = 0.95, window: int = 30) -> float:
|
|
"""
|
|
Stressed Value at Risk (SVaR)를 계산하는 함수
|
|
|
|
Parameters:
|
|
df (pd.DataFrame): CDS 데이터 (필수: 'close' 컬럼)
|
|
confidence_level (float): 신뢰 수준 (기본 95%)
|
|
window (int): 최근 며칠간의 스트레스 구간만 사용할지 (기본: 30일)
|
|
|
|
Returns:
|
|
float: SVaR 값 (양수, 손실 한계치)
|
|
"""
|
|
df = df.copy()
|
|
df['return'] = df['close'].pct_change()
|
|
df.dropna(inplace=True)
|
|
|
|
# 최근 window일간의 스트레스 구간 수익률만 사용
|
|
stress_returns = df['return'].iloc[-window:]
|
|
sorted_returns = np.sort(stress_returns.values)
|
|
|
|
svar_index = int((1 - confidence_level) * len(sorted_returns))
|
|
svar_value = abs(sorted_returns[svar_index])
|
|
|
|
return round(svar_value, 4)
|