原文鏈接:http://tecdat.cn/?p=17758
什么是風險價值(VaR)?
風險價值(VaR)用於嘗試量化指定時間范圍內公司或投資組合中的財務風險水平。VaR提供了一段時間內投資組合的最大損失的估計,您可以在各種置信度水平上進行計算。
估計投資組合的風險對於長期資本增長和風險管理非常重要,尤其是在大型公司或機構內部。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模型擬合和預測實證研究
