原文链接:http://tecdat.cn/?p=22788

Python计算取得多资产投资组合的危险度量。

要害概念

  1. 随着价格的变动,投资经理所持有的市场价值也会发生变化。后者就是所谓的市场危险,掂量它的最风行的办法之一是定义为危险价值。危险自身被看作是理论收益和冀望收益之间的差别,两者可能不同。如果它们相等,投资被认为是无风险的。同时,它不能有守约危险,也不能有再投资危险。请留神,冀望收益不是投资者认为他们将取得的收益,而是反映了所有经济状况下所有可能后果的平均值。
  2. 危险价值(VaR)通知你在一个给定的时间段内,在预先确定的置信水平下,你能损失多少钱。典型的置信度是95%和99%,意味着分析师有95%或99%的信念,损失不会超过这个数字,即5%(或1%)的VaR反映了5%(或1%)最坏状况下的将来最佳收益率。危险值是一个最先进的衡量标准,因为它能够为所有类型的资产进行计算,并思考到多样化的因素。然而,危险值并不是一个最大的损失数字,所以分析师可能会遇到大于危险值的损失。
  3.  对于历史序列的假如
  • 过来的收益率是将来收益率的预测指标,但不能保障历史记录会显示将来最坏和最好的状况,但咱们用几何平均法将价格转化为收益,所以咱们对所有不同的周/月/...收益给予等同的权重,来取得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 pdimport numpy as npimport 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 npimport 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 * exposuresptf\_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,咱们能够通过以下形式定义条件VaR,或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\]*100plt.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模型的不同类型的脉冲响应剖析