''' risk_manage_engine/calculators/monte_carlo.py Monte Carlo Simulation을 기반으로 향후 주가 경로를 시뮬레이션하고, 미래 손실 가능성을 추정하는 함수 모듈입니다. - 목적: 수익률 분포를 정규분포로 가정하여 미래 경로를 확률적으로 생성 - 출력: 특정 신뢰수준 하에서의 최대 손실 (VaR 유사) ''' import numpy as np import pandas as pd def monte_carlo_var(df: pd.DataFrame, simulations: int = 1000, days: int = 1, confidence_level: float = 0.95) -> float: """ Monte Carlo Simulation 기반 VaR 추정 Parameters: df (pd.DataFrame): CDS 데이터 (필수: 'close' 컬럼) simulations (int): 시뮬레이션 횟수 (기본 1000회) days (int): 몇 일 후까지 예측할지 (기본 1일) confidence_level (float): 신뢰 수준 (기본 95%) Returns: float: 시뮬레이션 기반 손실 추정치 (VaR 유사) """ df = df.copy() df['return'] = df['close'].pct_change() df.dropna(inplace=True) mu = df['return'].mean() sigma = df['return'].std() # 시뮬레이션된 수익률 (정규분포 기반) simulated_returns = np.random.normal(loc=mu, scale=sigma, size=simulations) # 누적 수익률로 변환 (1일 예측 기준) simulated_prices = df['close'].iloc[-1] * (1 + simulated_returns) ** days losses = df['close'].iloc[-1] - simulated_prices losses = np.sort(losses) var_index = int((1 - confidence_level) * simulations) var_value = losses[var_index] return round(abs(var_value / df['close'].iloc[-1]), 4)