This repository has been archived on 2025-06-07. You can view files and clone it, but cannot push or open issues or pull requests.
2025-05-06 21:23:04 +09:00

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)