公众号:跨界韭菜

0%

VaR模型 - 用方差-协方差计算VaR

前言

上次在VaR模型 - 用历史模拟法计算VaR中粗略介绍了几种计算在险价值(Value at risk)的计算方法,本文介绍第二种计算VaR的方法,用方差-协方差计算VaR。

用方差-协方差计算VaR的思路跟历史模拟法来计算VaR是不一样的,前者是根据股票某时间段的均值(mean),标准差(standard deviation),根据这两个值再重新算出正态分布图,然后然后根据置信区间来确定在险价值;而后者是先计算出某只股票某段时间的整体回报率和波动, 然后根据置信区间的百分比,如10%、5%或 1% 来确定在险价值。

正如我刚刚所提到,用方差-协方差来计算VaR是基于正态分布作为前提,所以这也是缺点之一。

免费注册Tushare.pro账号

首先,我们需要从tushare.pro注册一个账号并调用其API获取股票日线数据。可能大多数的童稚是第一次接触tushare.pro, 那我就直接贴上官方介绍:

Tushare是一个免费提供各类金融数据和区块链数据 , 助力智能投资与创新型投资的python财经数据接口包。拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本面数据。

步骤

  1. 我们首先调用Tushare的API 获取股票数据;
  2. 再通过python计算出其股票价格每日的百分比变化;
  3. 用方差-协方差计算VaR

(一)收益率计算

因为计算股票的历史回报率不是本文的重点,所以我直接就用代码带过,过程如下:

(二)用方差-协方差计算VaR

我们将使用到上面收益率计算中的returns变量。

1. 用历史均值和标准差来确定正态分布图

1
2
3
4
5
6
7
8
9
10
mean = returns.mean()
sigma = returns.std()
tdf, tmean, tsigma = scipy.stats.t.fit(returns)
support = np.linspace(returns.min(), returns.max(), 100)

plt.figure(figsize=(15, 5))
plt.hist(returns,bins=50, density=True)
plt.plot(support, scipy.stats.t.pdf(support, loc=tmean, scale=tsigma, df=tdf), "r-") #stats.norm.pdf正态分布概率密度函数。

plt.title("回报率 (%)", weight='bold')

输出:

2. 计算

我们假设是95%的置信区间,输入值就是0.05. 下面我们主要用到一个函数ppf, stats.norm.ppf正态分布的累计分布函数的逆函数,即下分位点。

1
2
#ppf(q, df, loc=0, scale=1)	Percent point function (inverse of cdf — percentiles).
scipy.stats.norm.ppf(0.05, mean, sigma)

输出:

-0.03220175377167319

解释:用股票600377的方差-协方差得出每日收益率为-3.22%, 这意味着95%的机率这只股票单日的损失不高于3.22%. 如果你投资100万来计算绝对金额,一日5% VaR为0.0322 * 100万 = 3.22万。