第10章 推斷統(tǒng)計學Python金融大數(shù)據(jù)分析——第10章 推斷統(tǒng)計學 筆記1 Python金融大數(shù)據(jù)分析——第10章 推斷統(tǒng)計學 筆記2 Python金融大數(shù)據(jù)分析——第10章 推斷統(tǒng)計學 筆記3 10.4 風險測度10.4.1 風險價值風險價值(VaR)是最廣泛使用的風險測度之一, 也是飽受爭議的測度之一。從業(yè)人員喜歡其直觀性. 但是許多人對其有限的尾部風險捕捉能力進行廣泛的討論和批評——主要是在理論依據(jù)上。從字面上講, VaR 是一個以貨幣單位(如 美元、歐元、日元)表示的數(shù)字, 表示在給定時間周期中不超過某種置信度(概率)的損失(或者一個投資組合、股票頭寸等)。 考慮一個當日價值為100萬美元的股票頭寸, 在30天( 1個月)內(nèi)、 置信度為99%的情況下 VaR 為 5 萬美元。 這個 VaR 數(shù)字說明, 30天內(nèi)損失不超過 5 萬美元的概率為99% ( 100 個案例中有 99 個)。但是, 它并不說明一旦損失超過 5萬美元, 損失的規(guī)模會達到什么程度——也就是如果最大損失為10萬或者50萬美元時, 這種特定的“高于 VaR 的損失” 概率有多大。它所說明的只是,發(fā)生 5萬美元或者更大損失的概率為 1%。我們再次假定使 Black-Scholes-Merton 設置,考慮如下的參數(shù)化和未來日期 T=30/365(即假定 30 天的一段時期)指數(shù)水平的模擬: import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt
S0 = 100
r = 0.05
sigma = 0.25
T = 30 / 365.
I = 10000
ST = S0 * np.exp((r - 0.5 * sigma ** 2) * T + sigma * np.sqrt(T) * random.standard_normal(I))
# 為了估算VaR數(shù)字,需要模擬的絕對利潤和相對于近日持倉價值的虧損,并加以排序,即從最嚴重的虧損到最大的利潤
R_gbm = np.sort(ST - S0)
plt.hist(R_gbm, bins=50)
plt.xlabel('absolute return')
plt.ylabel('frequency')
plt.grid(True)
幾何布朗運動的絕對收益( 30 日)
 import scipy.stats as scs
percs = [0.01, 0.1, 1., 2.5, 5., 10.]
var = scs.scoreatpercentile(R_gbm, percs)
print("%16s %16s" % ('Confidence Level', 'Value-at-Risk'))
print(33 * '-')
for pair in zip(percs, var):
print("%16.2f %16.3f" % (100 - pair[0], -pair[1]))
# Confidence Level Value-at-Risk
# ---------------------------------
# 99.99 22.079
# 99.90 19.911
# 99.00 15.439
# 97.50 12.929
# 95.00 11.129
# 90.00 8.718
在列表對象 percs 中, 0.1 轉(zhuǎn)換為置信度 100%在1%=99.9% 。在本例中, 置信度為 99.9%的 30 日 VaR 為 22.1 貨幣單位,而89%置信度下為 8.7 個貨幣單位。 # Meron的跳躍擴散 動態(tài)模擬
lamb = 0.75
mu = -0.6
delta = 0.25
M = 50
dt = 30. / 365 / M
rj = lamb * (np.exp(mu + 0.5 * delta ** 2) - 1)
S = np.zeros((M + 1, I))
S[0] = S0
# 為了模擬跳躍擴散,需要生成3組(獨立)隨機數(shù):
sn1 = random.standard_normal((M + 1, I))
sn2 = random.standard_normal((M + 1, I))
poi = random.poisson(lamb * dt, (M + 1, I))
for t in range(1, M + 1, 1):
S[t] = S[t - 1] * (np.exp((r - rj - 0.5 * sigma ** 2) * dt
+ sigma * np.sqrt(dt) * sn1[t])
+ (np.exp(mu + delta * sn2[t]) - 1)
* poi[t])
S[t] = np.maximum(S[t], 0)
R_jd = np.sort(S[-1] - S0)
plt.hist(R_jd, bins=50)
plt.xlabel('value')
plt.ylabel('frequency')
plt.grid(True)
跳躍擴散的絕對收益(30日)
 percs = [0.01, 0.1, 1., 2.5, 5., 10.]
var = scs.scoreatpercentile(R_jd, percs)
print("%16s %16s" % ('Confidence Level', 'Value-at-Risk'))
print(33 * '-')
for pair in zip(percs, var):
print("%16.2f %16.3f" % (100 - pair[0], -pair[1]))
# Confidence Level Value-at-Risk
# ---------------------------------
# 99.99 79.703
# 99.90 72.507
# 99.00 57.857
# 97.50 50.096
# 95.00 33.371
# 90.00 9.386
對于這種過程和參數(shù)化,置信度 90%的 30日VaR 相差很少,但是在 99.9%置信度下與幾何布朗運動相比高出 3 倍多( 79.703對22.079 貨幣單位)。這說明標準 VaR 測度在捕捉金融市場經(jīng)常遇到的尾部風險方面的問題。最后以圖形方式展示兩種情況的 VaR 測度以便比較。在典型置信度范圍內(nèi)的 VaR 測度表現(xiàn)完全不同: # 幾何布朗運動和跳躍擴散的風險價值
percs = list(np.arange(0.0, 10.1, 0.1))
gbm_var = scs.scoreatpercentile(R_gbm, percs)
jd_var = scs.scoreatpercentile(R_jd, percs)
plt.plot(percs, gbm_var, 'b', lw=1.5, label='GBM')
plt.plot(percs, jd_var, 'r', lw=1.5, label='JD')
plt.legend(loc=4)
plt.xlabel('100 - confidence level [%]')
plt.ylabel('value-at-risk')
plt.grid(True)
plt.ylim(ymax=0.0)
幾何布朗運動和跳躍擴散的風險價值
 10.4.2 信用價值調(diào)整其他重要的風險測度是信用風險價值(CVaR)和從CVaR中派生而來的信用價值調(diào)整(CVA)。粗略地講, CVaR 是對手方可能無法履行其義務所引發(fā)風險(例如, 對手方破產(chǎn))的一個測度。在這種情況下, 有兩個主要的假設:違約概率 和 (平均)損失水平。 舉個具體的例子, 我們再次考慮Black-Scholes-Merton 的基準設置: # Black-Scholes-Merton 的基準設置,參數(shù):
S0 = 100.
r = 0.05
sigma = 0.2
T = 1.
I = 100000
ST = S0 * np.exp((r - 0.5 * sigma ** 2) * T + sigma * np.sqrt(T) * random.standard_normal(I))
# 固定(平均)損失水平
L = 0.5
# 對手方違約(每年)概率
p = 0.01
# 使用泊松分布, 違約的方案可以用如下代碼生成, 考慮了違約只能發(fā)生-次的事實
D = random.poisson(p * T, I)
D = np.where(D > 1, 1, D)
# 如果沒有違約,未來指數(shù)水平的風險中立價值應該等于資產(chǎn)當日現(xiàn)值(取決于數(shù)值誤差造成的差異):
np.exp(-r * T) * 1 / I * np.sum(ST)
# 99.982104037870357
# 假定條件下CVaR的值
CVaR = np.exp(-r * T) * 1 / I * np.sum(L * D * ST)
CVaR
# 0.52398128347827266
# 經(jīng)過信用風險調(diào)整之后的資產(chǎn)現(xiàn)值
S0_CVA = np.exp(-r * T) * 1 / I * np.sum((1 - L * D) * ST)
S0_CVA
# 99.458122754392079
# 這應該(大約)等于CVaR價值減去當前資產(chǎn)價值
S0_adj = S0 - CVaR
S0_adj
# 99.476018716521722
np.count_nonzero(L * D * ST)
# 1052
在這個特殊的模擬示例中,假定違約概率為1%、10萬次模擬下,由于信用風險引起大約1000次虧損。 plt.hist(L * D * ST, bins=50)
plt.xlabel('loss')
plt.ylabel('frequency')
plt.grid(True)
plt.ylim(ymax=175)
由于風險中立預期違約引起的虧損(股票)
上圖展示了由于違約引起虧損的完整頻率分布。 當然, 在大部分情況下(10萬例中的99 000例), 沒有發(fā)現(xiàn)虧損。 現(xiàn)在考慮歐式看漲期權(quán)的情況: K = 100 # 行權(quán)價100
hT = np.maximum(ST - K, 0)
C0 = np.exp(-r * T) * 1 / I * np.sum(hT)
C0
# 10.466594304488577
# 行權(quán)價100時的價值大約為10.5個貨幣單位
CVaR = np.exp(-r * T) * 1 / I * np.sum(L * D * hT)
CVaR
# 0.054095276121378301
# 在相同的違約概率和損失水平假設下, CVaR大約為5分
S0_CVA = np.exp(-r * T) * 1 / I * np.sum((1 - L * D) * hT)
S0_CVA
# 10.412499028367199
# 調(diào)整后的期權(quán)價值大約低了5分
np.count_nonzero(L * D * hT) # number of losses
# 572
np.count_nonzero(D) # number of defaults
# 1052
I - np.count_nonzero(hT) # zero payoff
# 44079
# 和常規(guī)資產(chǎn)相比, 期權(quán)有不同的特性。
# 我們只看到略低于 500 次回違約引起的虧損。
# 但是仍然有大約1000次違約。
# 這一結(jié)果源于這樣的事實:期權(quán)到期日時的收益為0的概率很大。
plt.hist(L * D * hT, bins=50)
plt.xlabel('loos')
plt.ylabel('frequency')
plt.grid(True)
plt.ylim(ymax=350)
由于風險中立預期違約引起的虧損(看漲期權(quán))
 ^_^
|