拓端tecdat|Python風(fēng)險(xiǎn)價(jià)值計(jì)算投資組合VaR(Value at Risk )、期望損失ES(Expecte
原文鏈接:http://tecdat.cn/?p=22788
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
Python計(jì)算獲得多資產(chǎn)投資組合的風(fēng)險(xiǎn)度量。
關(guān)鍵概念
隨著價(jià)格的變動(dòng),投資經(jīng)理所持有的市場(chǎng)價(jià)值也會(huì)發(fā)生變化。后者就是所謂的市場(chǎng)風(fēng)險(xiǎn),衡量它的最流行的方法之一是定義為風(fēng)險(xiǎn)價(jià)值。風(fēng)險(xiǎn)本身被看作是實(shí)際收益和期望收益之間的差異,兩者可能不同。如果它們相等,投資被認(rèn)為是無風(fēng)險(xiǎn)的。同時(shí),它不能有違約風(fēng)險(xiǎn),也不能有再投資風(fēng)險(xiǎn)。請(qǐng)注意,期望收益不是投資者認(rèn)為他們將獲得的收益,而是反映了所有經(jīng)濟(jì)情況下所有可能結(jié)果的平均值。
風(fēng)險(xiǎn)價(jià)值(VaR)告訴你在一個(gè)給定的時(shí)間段內(nèi),在預(yù)先確定的置信水平下,你能損失多少錢。典型的置信度是95%和99%,意味著分析師有95%或99%的信心,損失不會(huì)超過這個(gè)數(shù)字,即5%(或1%)的VaR反映了5%(或1%)最壞情況下的未來最佳收益率。風(fēng)險(xiǎn)值是一個(gè)最先進(jìn)的衡量標(biāo)準(zhǔn),因?yàn)樗梢詾樗蓄愋偷馁Y產(chǎn)進(jìn)行計(jì)算,并考慮到多樣化的因素。然而,風(fēng)險(xiǎn)值并不是一個(gè)最大的損失數(shù)字,所以分析師可能會(huì)遇到大于風(fēng)險(xiǎn)值的損失。
?關(guān)于歷史序列的假設(shè):
過去的收益率是未來收益率的預(yù)測(cè)指標(biāo),但不能保證歷史記錄會(huì)顯示未來最壞和最好的情況,但我們用幾何平均法將價(jià)格轉(zhuǎn)化為收益,所以我們對(duì)所有不同的周/月/...收益給予同等的權(quán)重,來獲得T年內(nèi)投資收益的復(fù)合最終價(jià)值。
如果資產(chǎn)價(jià)格中的期望收益是合理的,那么實(shí)際收益率應(yīng)該圍繞這些預(yù)期呈正態(tài)分布。當(dāng)收益率可以很好地接近于正態(tài)分布時(shí),投資管理就變得更加容易操作了。
定義證明
收益的計(jì)算(PT為最終價(jià)格,P0為初始價(jià)格和股息收益率)。
將價(jià)格動(dòng)態(tài)轉(zhuǎn)換為收益(2),用幾何時(shí)間序列(4)計(jì)算期望收益(3),而不是算術(shù)平均(收益率的波動(dòng)越大,算術(shù)平均和幾何平均之間的差異越大)。
?正態(tài)分布,以波動(dòng)率作為風(fēng)險(xiǎn)的衡量標(biāo)準(zhǔn),即投資的已實(shí)現(xiàn)收益的加權(quán)平均值的方差的平方根(σ^2),權(quán)重等于每種情況的概率ps(6)。
?最后,正如 "投資"(Bodie, Kane, Marcus)中所說,VaR是指在給定的時(shí)間范圍內(nèi),收益分布的左尾概率α和右尾概率1-α累積的最小損失額。
在方差-協(xié)方差方法中,我們使用的是參數(shù)方法,假設(shè)收益是正態(tài)分布。因此,我們只需要計(jì)算兩個(gè)參數(shù),即給定收益的平均值和SD(即標(biāo)準(zhǔn)差)。
后者對(duì)Excel的計(jì)算很有用,我們用Average函數(shù)計(jì)算收益的平均值,然后STDEV將幫助我們計(jì)算標(biāo)準(zhǔn)偏差,最后得出NORMINV將達(dá)到VaR計(jì)算的目標(biāo),VaR(95)和VaR(99)的概率分別為0.05和0.01。
單資產(chǎn)組合VaR
?在Python中,單資產(chǎn)組合VaR計(jì)算沒有那么復(fù)雜。
#VaR計(jì)算在Python中的應(yīng)用
#準(zhǔn)備工作(每個(gè)庫(kù)都要用 "pip install *libraryname*"來預(yù)安裝
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#從雅虎財(cái)經(jīng)下載谷歌數(shù)據(jù)到定義的時(shí)間段內(nèi)
yf.download('GOOG', '2010-01-01', '2019-01-31')
#收益率的計(jì)算
df['return'] = Close.pct_change()
#VaR計(jì)算
VaR_90 = norm.ppf(1-0.9, mean, std_dev)
print('VaR 90%置信度: ', VaR_90)
最終輸出將是這樣的:
雅虎是一個(gè)獲得免費(fèi)金融數(shù)據(jù)的好方法,另一個(gè)途徑是Quandl的API庫(kù)。
為了保持代碼結(jié)構(gòu)的連續(xù)性,我在下面介紹一個(gè)資產(chǎn)類別的樣本,以及一個(gè)多資產(chǎn)的投資組合結(jié)構(gòu),其中包括VaR計(jì)算。
#準(zhǔn)備工作?
import numpy as np
import pandas as pd
#從Quandl API導(dǎo)入銀行數(shù)據(jù)(.4表示收盤價(jià))。
ticker = "WIKI/BAC.4"
quandl.get(ticker,
#以升序方式呈現(xiàn)數(shù)據(jù)
sorted( percentage["Close"])
print ("99.99%的實(shí)際損失不會(huì)超過" ,percentile(order_percentage, .01) * 100)
輸出以及VaR計(jì)算。
多資產(chǎn)投資組合VaR
對(duì)于??多資產(chǎn)類別投資組合:
#將數(shù)據(jù)集擴(kuò)展到5種不同的資產(chǎn),將它們組合成一個(gè)具有替代風(fēng)險(xiǎn)的投資組合。
[ "WIKI/NKE.4", "WIKI/NFLX.4", "WIKI/AMZN.4"]
#收益率的計(jì)算
df.pct_change()
#不同的風(fēng)險(xiǎn)敞口進(jìn)入投資組合
percentage * exposures
ptf_percentage = value_ptf['投資組合的價(jià)值'] 。
np.percentile(ptf_percentage, .01)
print ("99.99%的實(shí)際損失不會(huì)超過:" round(VaR, 2)
print ("預(yù)計(jì)損失將超過" + (ptf_percentage)) + "超過" ptf_percentage)) + "天數(shù)")
?
?
期望損失(Expected Shortfall)
接下來我們討論另一個(gè)基本指標(biāo)的重要性:期望損失(Expected Shortfall)。
在搜索VAR相關(guān)文獻(xiàn)時(shí),你會(huì)發(fā)現(xiàn)有很多關(guān)于VAR作為市場(chǎng)風(fēng)險(xiǎn)衡量標(biāo)準(zhǔn)的批評(píng)意見。你不可避免地看到期望損失(ES)被提出來作為一種替代。
這兩者之間有什么區(qū)別呢?
假設(shè)我們?cè)?9%的置信水平下評(píng)估我們的VAR(或者簡(jiǎn)單地說,潛在的損失),我們將有一系列的損失結(jié)果在1%的尾部,
VAR回答了問題:在1%的尾部,整個(gè)結(jié)果范圍內(nèi)的最小損失是多少?
ES回答了問題:在1%的尾部,整個(gè)結(jié)果范圍內(nèi)的平均損失是多少?
首先,VaR。
VAR
如果X是h天的收益,那么
,其中
。例如,對(duì)于h=10天的收益,
,我們可以從正態(tài)分布中計(jì)算出99%的風(fēng)險(xiǎn)值,如下所示
h = 10. # 為10天
mu_h = 0.1 # 這是10天內(nèi)收益率的平均值 - 10%。
sig = 0.3 # 這是一年內(nèi)收益率的波動(dòng) - 30%。
VaR_n = normppf(1-alpha)*sig_h - mu_h
以上是參數(shù)化的VaR,這意味著我們假設(shè)有一定的收益分布。在使用VAR時(shí),通常會(huì)使用經(jīng)驗(yàn)性的VaR,它不假設(shè)任何分布形狀。在這些情況下,獲得VaR只是一個(gè)簡(jiǎn)單的問題,即獲得必要的百分?jǐn)?shù)。
條件VaR/期望損失EXPECTED SHORTFALL
考慮到VaR,我們可以通過以下方式定義條件VaR,或CVaR或期望損失。
對(duì)這一點(diǎn)的解釋很簡(jiǎn)單?;旧希荴的期望值(平均值)。
如果我們?cè)偌僭O(shè)一個(gè)正態(tài)分布,我們可以應(yīng)用以下公式
其中
是正態(tài)分布,
是標(biāo)準(zhǔn)正態(tài)分布的
四分位數(shù)。
接下來是ES。
# 與上述參數(shù)相同
alpha**-1 * norm.pdf(norm.ppf(alpha))*sig_h - mu_h
我們不一定要假設(shè)正態(tài)分布。
上述假設(shè)為正態(tài)分布,但我們也可以應(yīng)用學(xué)生-T分布。得到等價(jià)公式的推導(dǎo)涉及到了這個(gè)問題。然而,我們可以通過以下公式計(jì)算學(xué)生-T分布下的等效風(fēng)險(xiǎn)值
我們也可以假設(shè)一個(gè)T分布。?
nu = 5 # 自由度,越大,越接近于正態(tài)分布
print("99% CVaR ", (CVaR_t*100,2)
自由度越大,越接近于正態(tài)分布。
# 驗(yàn)證正態(tài)分布和Student-t VAR是一樣的
nu = 10000000 # 自由度,越大,越接近于正態(tài)分布
print("99% VaR", round(VaR_t*100,2))
我們可以用實(shí)際的市場(chǎng)數(shù)據(jù)計(jì)算出類似的結(jié)果。首先,將數(shù)據(jù)擬合為正態(tài)分布和t分布。?
mu_norm, sig_norm = norm.fit(returns
而各自的VaR和ES可以很容易地計(jì)算出來。
繪制具有不同自由度的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之間區(qū)別的圖表如下。
Python確實(shí)是一個(gè)強(qiáng)大的工具,用于計(jì)算和數(shù)據(jù)可視化。它允許你導(dǎo)入幾個(gè)不同的預(yù)包裝庫(kù),大大降低了其他代碼(如C++)的復(fù)雜性。
最受歡迎的見解
1.R語(yǔ)言基于ARMA-GARCH-VaR模型擬合和預(yù)測(cè)實(shí)證研究
2.R語(yǔ)言時(shí)變參數(shù)VAR隨機(jī)模型
3.R語(yǔ)言估計(jì)時(shí)變VAR模型時(shí)間序列的實(shí)證研究
4.R語(yǔ)言基于ARMA-GARCH過程的VAR擬合和預(yù)測(cè)
5.GARCH(1,1),MA以及歷史模擬法的VaR比較
6.R語(yǔ)言用向量自回歸(VAR)進(jìn)行經(jīng)濟(jì)數(shù)據(jù)脈沖響應(yīng)
7.R語(yǔ)言實(shí)現(xiàn)向量自動(dòng)回歸VAR模型
8.R語(yǔ)言隨機(jī)搜索變量選擇SSVS估計(jì)貝葉斯向量自回歸(BVAR)模型
9.R語(yǔ)言VAR模型的不同類型的脈沖響應(yīng)分析