【matlab學習筆記】風險VaR的計算方法
VaR是英文Value at Risk的縮寫,中文直譯為風險值,是一個統計學上的概念,旨在估計給定金融資產或者資產組合在未來資產價格波動下的潛在損失。目前度量VaR的模型總體上可以分為兩大類:參數模型和非參數模型。參數模型,通過假定收益率分布服從一定的分布來估計VaR。而非參數模型,則不需要對收益率的分布做任何假設,它通過對已有歷史數據的分析、模擬來估計VaR的值。
VaR回答了這個問題:發生損失大於給定VaR的概率小於α,也就是我們可以用1-α的概率爆炸損失不會超過VaR。例如,某公司每天交易的有價證券的日VaR值在95%的置信水平下為50萬美元,這就是說,在正常的市場條件下,在今後24小時內發生大於50萬美元虧損的可能性為5%,或者說該公司能以95%的把握保證在今後24小時內損失不超過50萬美元。這一數據不僅給出了公司市場風險暴露的大小,同時也給出了損失的概率。
用數學公式描述如下:
prob(-Δp>VaR) = α
其中Δp為證券組合在持有期Δt內的損失;α為預先給定的置信度;VaR為在置信度α下處於風險中的價值。計算VaR有多種方法,這裡介紹其中三種,1.參數法;2.歷史模擬法;3.蒙特卡洛模擬法。計算結果用小數表示為證券組合在下一個階段最大損失率。
一.歷史數據法
歷史數據法是根據每種資產的歷史損益數據計算當前組合的損益數據,將 N 個歷史收益 數據從低水平到高水平依次排列,那麼位於(1-α)*N 處的臨界收益值 R* 就是 VaR 的估計值。
範例如下:
1.隨意選取一個證券組合: 中國銀行 601988 1000股
山東黃金 600547 1000股
萬科A 000002 1000股;
提取從2016-8-10向前推500個交易日的前復權收盤價。
採用的數據平台,為國泰安的Quantrader,數據計算軟體為Matlab2014b。提取代碼如下:
clc;clear;
%第一步,提取三個股票在2016-8-10向前500個交易日(截止2014年7月28日)的前復權收盤價
[ factor1,tickerList1, timeList1 ] = PriceAdj(CP,2014-07-28 15:00:00,2016-08-10 15:00:00,{601899,2}, TimeIntervals.DAY01,forward);
[ factor2,tickerList2, timeList2 ] = PriceAdj(CP,2014-07-28 15:00:00,2016-08-10 15:00:00,{600547,2}, TimeIntervals.DAY01,forward);
[ factor3,tickerList3, timeList3 ] = PriceAdj(CP,2014-07-28 15:00:00,2016-08-10 15:00:00,{601988,2}, TimeIntervals.DAY01,forward);
2.按照證券組合權重,計算500個交易日的證券組合市值。然後與2016-8-10日的市值對比,計算收益值。
%第二步,計算證券組合的市值
value = 1000*factor1 + 1000*factor2 + 1000*factor3;
%第三步,對證券組合市值排序,並計算相對於2016-8-10日市值的盈虧
[V,N] = sort(value);
V2 = V - value(end);
3.按照證券組合市值由小到大排列,依照α=5%的置信度,選擇5%*500 = 25名處的臨界收益值就是VaR的估計值。
%得到第25名的盈虧值,即為VaR值
VaR = V2(25);
4.得到VaR 值為-30196,表示有95%的可能性,該證券組合的最大虧損值為30196元,VaR 值為0.5874.
二.歷史數據模擬法
1.第一步和第二步與方法1相同。
2.按照證券組合的權重,計算在這500個交易日內,該證券組合的市值。並計算從1~500天,證券組合市值的變化比率。由此得出證券組合每天價值變化的概率分布圖,分布中對應的5%的分位數,對應於500個計算市值的第25個價值變化,VaR的估計剛好對應於第5個百分比分位數對應的損失。則我們有95%的把我,證券組合對應的損失會小於我們的VaR估計值。
%第三步,計算該500個交易日的變化比率,由低到高排列,得到第25位排名的變化率
value1 =value(1:499);value2 = value(2:500);
rate =(value2-value1)./value1; %計算從第2天到第500天市值變化的比率
[rate1,N]= sort(rate); %將市值變化的比率從小到大排列,並賦值rate1
hist(rate1,15); %繪製市值變化率的直方圖
time =datestr(timeList1(2:end),29);
ylabel(變化率數量);
xlabel(組合市值變化率);
title(組合市值變化率直方圖);
%得到排名第25的變化率,即為在5%置信度時,市值虧損的最大比率
var= rate1(25);
得到收益率直方圖如下:
%第四步,計算在5%置信度時,以2016-8-10市值為基準,2016-8-11最大損失值
VaR =value(end)* var;
三.蒙特卡洛模擬法
在上述例子中,我們採用了歷史數據法和歷史數據模擬法計算VaR值。通常,為了更準確的預測var值,我們還可以採用蒙特卡洛模擬法。蒙特卡羅模擬假設股票的價格變動服從某種隨機過程的形態,可以用計算機來模擬,產生若干次可能價格的路徑,並以此構建期貨的報酬分配,進而估計其風險值。選擇價格隨機過程,最常用的模型是幾何布朗運動(Geometric Brownian Motion),即隨機行走模型。其表達式為:
dSt=μStdt+σStdWt
這裡Wt是一個維納過程,或者說是布朗運動,而μ(漂移百分比) 和σ(波動百分比)則是常量。
1.和方法1和方法2一樣,首先構建證券組合。為了方便對比,我們採用和前兩個方法構建一樣的證券組合。
2.計算第2~500天的收益率,然後得到收益率序列的均值u和方差vol。以該均值-方差為基準,構造一個隨機遊走的變數wt。採用蒙特卡洛模擬1000次,每次模擬200個交易日的收益率,得到日均收益率。
%計算從第2天到第500天市值的日收益率
value0 =value(1:499);value2 = value(2:500);
rate0 = (value2-value0)./value0;
%第三步,計算日收益率均值和方差
u =mean(rate0);
vol =std(rate0);
s0 =value(end); %資產初始值
%第四步,採用蒙特卡洛模擬1000次
rand(state,0);
randn(state,0);
y = 200;
k =1000;
for i=1:1:k
s = s0;
for j = 1:1:y-1
s = s + s*(u+vol*randn(1,1));
end
value4(i) = s;
end
rate =(value4 - s0)/(s0*y); %計算模擬的日收益率
rate1 =sort(rate);
var =rate1(k*0.05); %計算在置信度為0.05的情況下的VaR值
3.得到var序列,繪製直方圖。在置信度為0.05的情況下,var 值為 -0.0016,計算所得VaR值為82元。
推薦閱讀:
※歐式股票期權看漲看跌期權的價格下限怎麼證明?
※如何下載股票歷史數據?
※學金融有沒有必要學數學分析和高等代數等高深的數學知識?
※金融學知識框架(含知識框架學習法介紹)
※本科階段怎麼寫出有質量的經濟學論文?