45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
'''
|
|
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) |