hi
I have a rather unusual question: I downloaded a function code of vba.
this function program is about monte calro sumiration of value at risk.
but actually i cant use thisfunction code.i understand only sub code. dose anyone have any idea how to use thisp program practically?
Any help would be most apreciated!
Many thanx and best regards
'Written by P.Urbani based on a spreadsheet by Carol Alexander.
'This function will produce a Monte Carlo Value at Risk simulation.
'The inputs are:
'VC - Variance Co Variance matrix
'PosnWeights - The actual posn values
'Iterations - Number of simulations to perform recomend (3000+)
'CL - The Confidence Level required typically 0.95,0.97 or 0.99
't - The holding period (same units as source data)
Function MC_Var(VC As Variant, PosnWeights As Variant, Iterations As Variant, CL As Variant, time As Variant) As Variant
Dim X, i, j As Variant
X = VC.Columns.Count
'STEP ONE READ IN VC
Dim matrix As Variant
ReDim matrix(X, X)
For k = 1 To X
For l = 1 To X
matrix(k, l) = VC(k, l)
Next l
Next k
'STEP TWO PERFROM CHOLESKY DECOMPOSITION ON VC MATRIX
Dim CMAT() As Variant
Dim a() As Variant
Dim M() As Variant
Dim y As Single
ReDim CMAT(X, X)
ReDim a(X, X)
ReDim M(X, X)
For i = 1 To X
For j = 1 To X
a(i, j) = matrix(i, j)
M(i, j) = 0
Next j
Next i
For i = 1 To X
For j = i To X
y = a(i, j)
For O = 1 To (i - 1)
y = y - M(i, O) * M(j, O)
Next O
If j = i Then
M(i, i) = Sqr(y)
Else
M(j, i) = y / M(i, i)
End If
Next j
Next i
CMAT = M
'STEP THREE TRANSPOSE CMAT
Dim Temparr3() As Variant
ReDim Temparr3(X, X)
Temparr3 = Application.WorksheetFunct
ion.Transp
ose(CMAT)
'STEP FOUR GENERATE (1 x X) VECTOR OF RANDOM STD NORMAL DEVIATES
'STEP FIVE MULTIPLY RND VECTOR BY TRANSPOSE OF CHOLESKY MATRIX
Dim RMAT() As Variant
Dim PLMAT() As Variant
Dim WVMAT() As Variant
Dim Temparr() As Variant
Dim Temparr6() As Variant
S = Iterations
ReDim RMAT(1, X)
ReDim WVMAT(1, X)
ReDim PLMAT(S, 1)
ReDim Temparr6(1, 1)
t = time
t = Sqr(t)
For p = 1 To S - 1 '(use this to loop around entire process)
For q = 1 To X
'Application.Volatile
e = Application.WorksheetFunct
ion.NormSI
nv(Rnd())
RMAT(1, q) = e * t
Next q
'for normaly distributed use Application.WorksheetFunct
ion.NormIn
v(Rnd(),mu
,sigma)
'for random letters use Chr(65 + Int(26 * Rnd))
'for std normal use Application.WorksheetFunct
ion.NormSI
nv(Rnd())
'STEP SIX MULTIPLY RMAT BY TRANSPOSE OF CMAT TO GET WVMAT
TEMPARR4 = Application.WorksheetFunct
ion.MMult(
RMAT, Temparr3)
WVMAT = TEMPARR4
'STEP SEVEN MULITPLY WVMAT BY TRANSPOSE OF POSNWEIGHTS TO GET P&LMAT
Dim Temparr5() As Variant
ReDim Temparr5(1, X)
Temparr5 = Application.WorksheetFunct
ion.Transp
ose(PosnWe
ights)
Temparr6 = Application.WorksheetFunct
ion.MMult(
WVMAT, Temparr5)
PLMAT(p, 1) = Temparr6(1)
Next p
'STEP EIGHT SORT P&L VALUES
'ReDim HOLD(1, 1) As Variant
'ReDim SRTD(S, 1) As Variant
'ReDim BTAR(f, 1) As Variant
'R = S
'For h = 1 To R - 1
'HOLD(h, 1) = PLMAT(h, 1)
'Next h
'sort
'For i = 1 To R - 1
' For j = i + 1 To R - 1
' If HOLD(j) >= HOLD(i) Then
' SRTD = HOLD(i) ' swap routine
' HOLD(i) = HOLD(j)
' HOLD(j) = SRTD
' 'Put below target values into new array
' If j < f Then
' BTAR(j) = HOLD
' End If
' End If
' Next j
'Next i
'TAKE 1-CL PERCENTILE = VaR
Dim final() As Variant
ReDim final(1, 1)
final(1, 1) = Application.WorksheetFunct
ion.Percen
tile(PLMAT
, CL)
'AVERAGE OF VALUES BEYOND VaR = Conditional VaR
MC_Var = final 'PLMAT(S - 1, 1)
End Function