|
举个例子,比如算一个股票投资组合1天的VaR, 先列出各个股票的covariance矩阵,用下面的VBA代码对其进行Cholesky factorization,用这个矩阵配合Norm.S.Inv(rand()) 来模拟各个股票的收益。再算1天后组合的盈亏。重复10000次就能得出投资组合价值变化量的分布。VaR 就取这个分布对应的分位点即可。
Function cholesky(Sigma As Object)
Dim n As Integer
Dim k As Integer
Dim i As Integer
Dim j As Integer
Dim x As Double
Dim a() As Double
Dim M() As Double
n = Sigma.Columns.Count
ReDim a(1 To n, 1 To n)
ReDim M(1 To n, 1 To n)
For i = 1 To n
For j = 1 To n
a(i, j) = Sigma.Cells(i, j).Value
M(i, j) = 0
Next j
Next i
For i = 1 To n
For j = i To n
x = a(i, j)
For k = 1 To (i - 1)
x = x - M(i, k) * M(j, k)
Next k
If j = i Then
M(i, i) = Sqr(x)
Else
M(j, i) = x / M(i, i)
End If
Next j
Next i
cholesky = M
End Function
|