原文链接:http://tecdat.cn/?p=17758
原文出处:拓端数据部落公众号
什么是危险价值(VaR)?
危险价值(VaR)用于尝试量化指定工夫范畴内公司或投资组合中的财务危险程度。VaR 提供了一段时间内投资组合的最大损失的预计,您能够在各种置信度程度上进行计算。
视频:危险价值 VaR 原理与 Python 蒙特卡罗 Monte Carlo 模拟计算投资组合实例
危险价值 VaR 原理与 Python 蒙特卡罗 Monte Carlo 模拟计算投资组合实例
,时长 10:03
预计投资组合的危险对于长期资本增长和风险管理十分重要,尤其是在大型公司或机构外部。VaR 通常按以下格局构架:
-
“咱们下个月的投资组合 VaR 为 250,000 元,置信度为 95%”
-
这意味着,以 95%的置信度,咱们能够说投资组合的损失在一个月内不会超过 250,000 元
在这篇文章中,我将疏导您实现在股票投资组合中计算该指标的步骤。
VaR 如何计算?
有两种次要办法来计算 VaR:
-
应用蒙特卡洛模仿
-
应用方差 - 协方差办法
在本文中,咱们将重点介绍应用办法(2)(方差 - 协方差)。简而言之,方差 - 协方差办法着眼于给定回溯期内给定股票或股票投资组合的历史价格走势(标准差,平均价格),而后应用概率实践来计算指定置信区间内的最大损失。咱们将在上面应用 Python 逐渐进行计算。
在开始之前,请留神,规范 VaR 计算假设以下条件:
-
收益的正态分布 -VaR 假如投资组合的收益是正态分布。对于大多数资产而言,这当然是不事实的,但容许咱们应用更为简略的计算来制订基准。
-
(能够对 VaR 进行批改来阐明不同的散布,然而这里咱们将重点介绍规范 VaR 计算)
-
规范市场条件 - 与许多金融工具一样,VaR 最适宜用于思考规范市场中的损失,并且不适用于极其 / 异样事件。
计算投资组合的 VaR 的步骤
为了计算投资组合的 VaR,您能够依照以下步骤操作:
-
计算投资组合中股票的定期收益
-
依据收益创立协方差矩阵
-
计算投资组合均值和标准差
-
(依据投资组合中每只股票的投资程度加权)
-
用指定的置信区间,标准差和均值计算正态累积散布(PPF)的反函数
-
通过从步骤(4)的计算中减去初始投资,估算投资组合的危险价值(VaR)
1)计算投资组合中股票的定期收益
# 创立咱们的股票投资组合
tickers = \['AAPL','FB', 'C', 'DIS'\]
#设置投资权重
weights = np.array(\[.25, .3, .15, .3\])
# 设定初始投资程度
initial_investment = 1000000
# 下载收盘价
data = pdr.get\_data\_yahoo(tickers, start="2018-01-01", end=dt.date.today())\['Close'\]
#从收盘价计算定期收益
returns = data.pct_change()
returns.tail()
2)依据收益建设协方差矩阵
# 生成 Var-Cov 矩阵
cov_matrix = returns.cov()
cov_matrix
这将使咱们可能计算整个投资组合的标准差和收益平均值。
3)计算投资组合的平均值和标准差
# 计算每只股票的均匀收益
returns.mean()
# 计算整个投资组合的均匀回报,# 对投资权重进行归一化
avg_rets.dot(weights)
# 计算投资组合标准差
np.sqrt(weights.T.dot(cov_matri
# 计算投资平均值
(1+port\_mean) * initial\_investment
# 计算投资标准差
initial\_investment * port\_st
接下来,咱们能够将这些变量插入上面的百分比函数(PPF)中。
4)计算具备指定置信区间,标准偏差和均值的正态累积散布(PPF)的逆
# 抉择咱们的置信区间(我将在此处抉择 95%)conf_level1 = 0.05
#逆累积散布函数为正态分布
#插入咱们投资组合的均值,标准差
cutoff1 = norm.ppf(conf\_level1, mean\_investment, stdev_investment)
5)通过从步骤 4 的计算中减去初始投资,估算投资组合的危险价值(VaR)
# 最初,咱们能够在置信区间内计算 VaR
var_1d1
#output
#22347.7792230231
在这里,咱们有 95%的信念说,咱们的 100 万投资组合在一天之内不会超过损失超过 2.23 万元的损失。
n 天时间段内的危险价值
如果咱们想在更大的工夫范畴内计算该怎么办?只需获取 1 天的 VaR 并将其乘以 时间段的平方根即可(这是因为股票收益的标准偏差往往随工夫的平方根而减少)。
# 计算 n 天 VaR
var_array = \[\]
var\_array.append(np.round(var\_1d1 * np.sqrt(x),2))
# 绘制图形
plt.title("Max portfolio loss (VaR) over 15-day period")
1 day VaR @ 95% confidence: 10635.31
2 day VaR @ 95% confidence: 13534.26
...
14 day VaR @ 95% confidence: 73456.51
15 day VaR @ 95% confidence: 83564.53
对照正态分布查看咱们的股票散布
如计算局部所述,咱们假如在计算 VaR 时,咱们投资组合中股票的收益呈正态分布。
当然,咱们无奈预测这种状况,但咱们至多能够查看历史收益如何调配,以帮忙咱们评估 VaR 是否适宜用于咱们的投资组合。
plt.plot(x, scipy.stats.norm.pdf(x, port\_mean, port\_stdev), "r")
plt.show()
收益与正态分布比拟
从下面咱们能够看到,自 2018 年以来,咱们抉择的股票的收益都曾经合乎正态分布。
最受欢迎的见解
1.R 语言基于 ARMA-GARCH-VaR 模型拟合和预测实证钻研
2.R 语言时变参数 VAR 随机模型
3.R 语言时变参数 VAR 随机模型
4.R 语言基于 ARMA-GARCH 过程的 VAR 拟合和预测
5.GARCH(1,1),MA 以及历史模拟法的 VaR 比拟
6.R 语言时变参数 VAR 随机模型
7.R 语言实现向量主动回归 VAR 模型
8.R 语言随机搜寻变量抉择 SSVS 预计贝叶斯向量自回归(BVAR)模型
9.R 语言 VAR 模型的不同类型的脉冲响应剖析