一、知識點介紹
1.1 歷史模擬法
我們在之前有用到Delta-Normal的GARCH和RiskMetrics方法來計算aR和ES,假設的是殘差滿足正態分布,對殘差進行二次相關序列的建模並擬合殘差,能夠得到未來的預測值。而這裡說的歷史模擬法和蒙特卡羅模擬法跟上面有點不太一樣,所基於的前提跟GARCH和RiskMetrics方法認為殘差存在著二次自相關不同,本節所涉及到的兩種方法也是認為歷史可以預測未來(即趨勢存在著一定的平穩性),歷史模擬法認為歷史的分布和未來的分布是一致的,因此歷史所計算出來的aR和ES可以用來代替未來的aR和ES。有點像電影《土撥鼠之日》不斷重複的一天。
1.2 蒙特卡羅模擬法
跟歷史模擬法不同,蒙特卡羅模擬法認為的是標準化殘差是滿足某種分布的(比如說學生t分布),它跟《土撥鼠之日》有些不同,並不是每天的簡單重複,有點類似於《楚門的世界》,每天都會有向前一點點的變化,而在這個波動率的變化當中,這裡的一點點變化就是標準化殘差沿著學生t分布在變動。在這裡我有必要解釋下標準化殘差的概念,其實一開始對這個概念也是糊裡糊塗的,但是後來看到代碼的實現,其實發現跟標準化正態分布的數據點有點類似。實際上我們在刻畫殘差的時候,假設說沒有其他無關的擾動,數據的數值變動(也就是殘差)是完全遵循我們模型算出來的總體標準差sigma的變動的,如果是正態分布,我們應該能看到所有數據點都整整齊齊排在正態分布的曲線上(注意跟數據點出現的順序無關,並且樣本要足夠大),但實際上不可能這麼理想,本身模擬出來sigma也要變動,並且這個變動(err)我們假設是滿足t 學生分布的,那麼殘差=sigama * err,這裡的err是均值為0,標準差為1,自由度為df的標準的t分布,相當於t分布的err其實是一個標準,sigma*err相當於是一個線性的作用(思考利率一定的情況下,本金越多,收益當然越大)。我們繪製一下自由度為4的t分布圖。
cure(dt(x,df=4),from=-3, to=3, las='1', main='t distribution', cex.main=0.8)
二、數據處理
2.1 歷史模擬法
2.1.1 讀取數據
dd
從返回的結果來看,數據一共有7列,有1258行。接下來,我們以收盤價計算出收益率的大小,同樣是對數取差。
dd
2.1.2 計算aR值
#接下來我重新命名下改為loss,並每個值都轉換成百分比的值loss
接下來我們知道了單日aR的值是2.072488%,也就是在95%置信水平下的波動率不會超過這個值,這個是單日的,如果是多日的,則要乘以sqrt(T),然後再乘以投資金額就可以了。當然也可以用5天為一個滾動窗口,求平均值以及求這個5天窗口形成的數據的分位數aR值,這樣就不用乘以sqrt(T),但結果應該是有差別的。
2.1.3 計算ES值
ES是指當損失大於aR以後的損失均值,因此我們通過排序把95%置信區間以後的最大數篩選出來,然後求算術平均就可以了。
sloss
所計算的單日頭寸ES為2.942944%。
2.2 蒙特卡羅模擬法
我們接下來試著用代碼來建模預測步驟如下:
建立GARCH模型,預測出均值和方差方程
進行蒙特卡羅模擬其中蒙特卡羅模擬計算aR和ES的方法思路如下:
最終得到的數據點分布還是按照之前的95%分位點的方法去取得aR以及計算尾部均值ES。
2.2.1 建立GARCH模型
在這裡我們加多一個參數distribution.model='std'表明標準化殘差是滿足t分布的。
spec3
我們之後還要用到這些參數來計算當天的方差->經過標準化t 學生分布轉化後的殘差->計算出當天的損失率的值->計算出5天損失率的總和我們先把這些參數都存儲起來
mu
2.2.2 進行蒙特卡羅模擬
接下來要初始化一開始的數據值
#設置天數為一周,也就是5天t
#以init為起點,進行nround輪迭代for (j in 1:nround){ lt
#計算aR值aR2
idxaR2]#篩選出大於aR2值的索引ES3
以另外一種方法列印出ES的均值與排列後的尾部均值是一致的,說明結果比較靠譜。結果表明,用蒙特卡羅模擬法得到一周的aR值和尾部均值ES為4.376929%和5.841472%。也就是說在95%的置信水平下,未來一周最大損失率不超過4.376929%,萬一發生95%外的損失均值為5.841472%。
三、總結
本文介紹了歷史模擬法和蒙特卡羅模擬法計算aR和ES的實現,歷史模擬法比較好理解,但是蒙特卡羅模擬法的流程需要花點心思研究下,並且不同模型的前提是不同的,要模型成立的前提條件決定使用什麼樣的模型。