def gaussian_portfolio(p, w, mu, sigma): alpha = utils.set_alpha_prob(p) p = alpha location = w.dot(mu) pm2 = portm2(w, sigma) dpm2 = derportm2(w, sigma) qnorm = stats.norm.ppf(alpha) VaR = -location - qnorm * np.sqrt(pm2) derVaR = mu - qnorm * (0.5 * dpm2) / np.sqrt(pm2) contrib = w.dot(derVaR) pct_contrib = contrib / VaR if (abs(contrib.sum() - VaR) > 0.01 * abs(VaR)): raise Exception("Contribution does not add up") else: ret = return ret
def gaussian(R, p): alpha = utils.set_alpha_prob(p) m2 = utils.centered_moment(R, 2) VaR = -R.mean() - stats.norm.ppf(alpha) * np.sqrt(m2) return VaR