原文链接:http://tecdat.cn/?p=22788
Python 计算取得多资产投资组合的危险度量。
要害概念
- 随着价格的变动,投资经理所持有的市场价值也会发生变化。后者就是所谓的市场危险,掂量它的最风行的办法之一是定义为危险价值。危险自身被看作是理论收益和冀望收益之间的差别,两者可能不同。如果它们相等,投资被认为是无风险的。同时,它不能有守约危险,也不能有再投资危险。请留神,冀望收益不是投资者认为他们将取得的收益,而是反映了所有经济状况下所有可能后果的平均值。
- 危险价值(VaR)通知你在一个给定的时间段内,在预先确定的置信水平下,你能损失多少钱。典型的置信度是 95% 和 99%,意味着分析师有 95% 或 99% 的信念,损失不会超过这个数字,即 5%(或 1%)的 VaR 反映了 5%(或 1%)最坏状况下的将来最佳收益率。危险值是一个最先进的衡量标准,因为它能够为所有类型的资产进行计算,并思考到多样化的因素。然而,危险值并不是一个最大的损失数字,所以分析师可能会遇到大于危险值的损失。
- 对于历史序列的 假如:
- 过来的收益率是将来收益率的预测指标,但不能保障历史记录会显示将来最坏和最好的状况,但咱们用几何平均法将价格转化为收益,所以咱们对所有不同的周 / 月 /… 收益给予等同的权重,来取得 T 年内投资收益的复合最终价值。
- 如果资产价格中的冀望收益是正当的,那么理论收益率应该围绕这些预期呈正态分布。当收益率能够很好地靠近于正态分布时,投资治理就变得更加容易操作了。
定义证实
收益的计算(PT 为最终价格,P0 为初始价格和股息收益率)。
将价格动静转换为收益(2),用几何工夫序列(4)计算冀望收益(3),而不是算术平均(收益率的稳定越大,算术平均和几何平均之间的差别越大)。
正态分布,以稳定率作为危险的衡量标准,即投资的已实现收益的加权平均值的方差的平方根(σ^2),权重等于每种状况的概率 ps(6)。
最初,正如 “ 投资 ”(Bodie, Kane, Marcus)中所说,VaR 是指在给定的工夫范畴内,收益散布的左尾概率 α 和右尾概率 1 - α 累积的最小损失额。
在方差 - 协方差办法中,咱们应用的是参数办法,假如收益是正态分布。因而,咱们只须要计算两个参数,即给定收益的平均值和 SD(即标准差)。
后者对 Excel 的计算很有用,咱们用 Average 函数计算收益的平均值,而后 STDEV 将帮忙咱们计算标准偏差,最初得出 NORMINV 将达到 VaR 计算的指标,VaR(95)和 VaR(99)的概率别离为 0.05 和 0.01。
单资产组合 VaR
在 Python 中,单资产组合 VaR 计算没有那么简单。
#VaR 计算在 Python 中的利用
#筹备工作(每个库都要用 "pip install \*libraryname\*" 来预装置
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#从雅虎财经下载谷歌数据到定义的时间段内
yf.download('GOOG', '2010-01-01', '2019-01-31')
#收益率的计算
df\['return'\] = Close.pct_change()
#VaR 计算
VaR\_90 = norm.ppf(1-0.9, mean, std\_dev)
print('VaR 90% 置信度:', VaR_90)
最终输入将是这样的:
雅虎是一个取得收费金融数据的好办法,另一个路径是 Quandl 的 API 库。
为了放弃代码构造的连续性,我在上面介绍一个资产类别的样本,以及一个多资产的投资组合构造,其中包含 VaR 计算。
# 筹备工作
import numpy as np
import pandas as pd
#从 Quandl API 导入银行数据(.4 示意收盘价)。ticker = "WIKI/BAC.4"
quandl.get(ticker,
#以升序形式出现数据
sorted(percentage\["Close"\])
print ("99.99% 的理论损失不会超过" ,percentile(order_percentage, .01) * 100)
输入以及 VaR 计算。
多 资产 投资 组合 VaR
对于 多资产类别投资组合:
# 将数据集扩大到 5 种不同的资产,将它们组合成一个具备代替危险的投资组合。\["WIKI/NKE.4", "WIKI/NFLX.4", "WIKI/AMZN.4"\]
#收益率的计算
df.pct_change()
#不同的危险敞口进入投资组合
percentage * exposures
ptf\_percentage = value\_ptf\['投资组合的价值'\]。np.percentile(ptf_percentage, .01)
print ("99.99% 的理论损失不会超过:" round(VaR, 2)
print ("预计损失将超过" + (ptf\_percentage)) + "超过" ptf\_percentage)) + "天数")
冀望损失(Expected Shortfall)
接下来咱们探讨另一个根本指标的重要性:冀望损失(Expected Shortfall)。
在搜寻 VaR 相干文献时,你会发现有很多对于 VaR 作为市场危险衡量标准的批评意见。你不可避免地看到冀望损失(ES)被提出来作为一种代替。
这两者之间有什么区别呢?
假如咱们在 99% 的置信水平下评估咱们的 VaR(或者简略地说,潜在的损失),咱们将有一系列的损失后果在 1% 的尾部,
VaR 答复了问题: 在 1% 的尾部,整个后果范畴内的最小损失是多少?
ES 答复了问题: 在 1% 的尾部,整个后果范畴内的均匀损失是多少?
首先,VaR。
VaR
如果 X 是 h 天的收益,那么, 其中。例如,对于 h =10 天的收益,,咱们能够从正态分布中计算出 99% 的危险值,如下所示
h = 10. # 为 10 天
mu_h = 0.1 # 这是 10 天内收益率的平均值 - 10%。sig = 0.3 # 这是一年内收益率的稳定 - 30%。VaR\_n = normppf(1-alpha)*sig\_h - mu_h
以上是参数化的 VaR,这意味着咱们假如有肯定的收益散布。在应用 VaR 时,通常会应用经验性的 VaR,它不假如任何散布形态。在这些状况下,取得 VaR 只是一个简略的问题,即取得必要的百分数。
条件 VaR/冀望损失EXPECTED SHORTFALL
思考到 VaR,咱们能够通过以下形式定义条件 V aR,或 CVaR 或冀望损失。
对这一点的解释很简略。基本上,它是 X 的期望值(平均值)。
如果咱们再假如一个正态分布,咱们能够利用以下公式
其中 是正态分布,是规范正态分布的 四分位数。
接下来是 ES。
# 与上述参数雷同
alpha**-1 * norm.pdf(norm.ppf(alpha))*sig\_h - mu\_h
咱们不肯定要假如正态分布。
上述假如为正态分布,但咱们也能够利用学生 - T 散布。失去等价公式的推导波及到了这个问题。然而,咱们能够通过以下公式计算学生 - T 散布下的等效危险值
咱们也能够假如一个 T 散布。
nu = 5 # 自由度,越大,越靠近于正态分布
print("99% CVaR", (CVaR_t*100,2)
自由度越大,越靠近于正态分布。
# 验证正态分布和 Student-t VaR 是一样的
nu = 10000000 # 自由度,越大,越靠近于正态分布
print("99% VaR", round(VaR_t*100,2))
咱们能够用理论的市场数据计算出相似的后果。首先,将数据拟合为正态分布和 t 散布。
mu\_norm, sig\_norm = norm.fit(returns
而各自的 VaR 和 ES 能够很容易地计算出来。
绘制具备不同自由度的 VaR 和 CVaR 图表
plt.plot(d\[0\], d\[1\]*100
plt.plot(np.arange(5, 100), VaR_n\*np.ones(95)\*100
VaR\_n = norm.ppf(1-alpha)*sig\_norm -munorm
能够很好地理解 VaR 和 ES 之间区别的图表如下。
Python 的确是一个弱小的工具,用于计算和数据可视化。它容许你导入几个不同的预包装库,大大降低了其余代码(如 C ++)的复杂性。
最受欢迎的见解
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 模型的不同类型的脉冲响应剖析