Python을 활용한 정량적 리스크 관리
Jamsheed Shorish
Computational Economist
asset_returns의 수익률로 시작weights로 portfolio_returns 계산portfolio_returns를 losses로 변환losses의 np.quantile()로 VaR 계산
weights = [0.25, 0.25, 0.25, 0.25]portfolio_returns = asset_returns.dot(weights)losses = - portfolio_returnsVaR_95 = np.quantile(losses, 0.95)
scipy.stats에서 정규분포 norm 임포트total_steps 정의 (1일 = 1440분)N 정의portfolio_losses의 평균 mu, 표준편차 sigma 계산from scipy.stats import normtotal_steps = 1440N = 10000mu = portfolio_losses.mean() sigma = portfolio_losses.std()
N회 실행을 위한 daily_loss 벡터 초기화N회 반복 루프loss 벡터 계산norm.rvs() 사용total_steps로 스케일된 mu, sigma로 데이터 추출daily_loss = np.zeros(N)for n in range(N):loss = ( mu * (1/total_steps) + norm.rvs(size=total_steps) * sigma * np.sqrt(1/total_steps) )
n에 대해 누적 daily_loss 생성np.quantile()로 예: 95% 신뢰수준의 VaR 계산 (daily_loss 기준)
daily_loss = np.zeros(N) for n in range(N):loss = mu * (1/total_steps) + ... norm.rvs(size=total_steps) * sigma * np.sqrt(1/total_steps)daily_loss[n] = sum(loss)VaR_95 = np.quantile(daily_loss, 0.95)
e_covPython을 활용한 정량적 리스크 관리