Sie sind auf Seite 1von 5

How to Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation

Introduction to Value at Risk


Performance evaluation measures such as the Sharpe ratio, Sortino
ratio focused on lower moments assume normality of the distribution
of asset returns. Value at Risk (VaR) is an attempt to characterise the
fatness of the tail of the asset returns, or the kurtosis. Essentially, VaR
is the V in the statement:
"We are x percent certain that we will not lose more than V dollars in
the next N days."
In other words, VaR would be the response to the question "What's
the loss at this level of probability?"
.

The Multivariate VaR Monte Carlo Simulation

There are several methods of calculating VaR: historical simulation,


model-building and Monte Carlo simulation. Here we focus on the
latter.
The calculation steps are as follows.
1. Calculate the current portolio value
2. Sample once from the multivariate normal distribution for each of
the assets in the portfolio using the Cholesky Decomposition of the
correlation matrix to create correlated normal random variables
3. Calculate the asset prices at the end of the time period
4. Calculate the portfolio value at the end of the time period
5. Subtract step 1 result from step 4 result to get the change in value
of the portfolio, (the 'portfolio delta') over the time period
6. Repeat steps 1 to 5 to build up a distribution of the change in value
of the portfolio

Nyasha Madavo, VBA Developer.net

7. Sort the portfolio deltas from lowest to highest using the Quicksort
algorithm
8. Calculate the percentile required (1 - confidence level)
9. VaR is given by portfolio delta(i) where all the portfolio deltas from
N simulations are in a vector, and i = percentile * N
10. VaRs can be extracted as an array for difference confidence
intervals if required
In the following simplified example, we assume a portfolio of assets
with prices that follow the Black Scholes model assumptions.

Multivariate VaR VBA Code


Function VaR_Sim(Runs As Long, S_t_range As Object, K_range As
Object, r_scalar As Double, _
q_range As Object, sigma_range As Object, t_scalar As Double,
Matrix_range As Object, Confidence As Double) As Double
Application.Calculation = xlCalculationManual
Application.Volatile (False)
Application.ScreenUpdating = False
Dim S_Count As Long, i As Long
Dim S() As Double, k() As Double, r() As Double, q() As Double,
sigma() As Double, t() As Double, a() As Double
Dim Vector_Limits As Long
Dim L_Lower As Variant, epsilon() As Variant
Dim j As Long
Dim Sum_S As Double, Val_at_Risk(i) As Double
Dim RandVars

How To Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation

How to Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation
'------------ ASSUME ALL VECTORS HAVE SAME NUMBER OF
CELLS AS # OF ASSET PRICES, DEFINE LIMITS OF ALL
VECTORS THEN REDECLARE -----Vector_Limits = S_t_range.Rows.Count * S_t_range.Columns.Count
ReDim Preserve S(1 To Vector_Limits)
ReDim Preserve k(1 To Vector_Limits)
ReDim Preserve r(1 To Vector_Limits)
ReDim Preserve q(1 To Vector_Limits)
ReDim Preserve sigma(1 To Vector_Limits)
ReDim Preserve t(1 To Vector_Limits)
ReDim Preserve a(1 To Vector_Limits)

Dim N As Integer
Dim Sum_S0 As Double, Delta() As Double, Percentile As Double
RandVars = WorksheetFunction.Transpose(RandVars)
epsilon = Application.WorksheetFunction.MMult(L_Lower,
RandVars)
For i = 1 To Vector_Limits
S(i) = S_t_range(i)
SumS0 = SumS0 + S(i)
q(i) = q_range(i)
k(i) = K_range(i)
r(i) = r_scalar
t(i) = t_scalar
sigma(i) = sigma_range(i, j)
a(i) = r(i) - q(i) - 0.5 * sigma(i)
S(i) = S(i) * Exp(a(i) + sigma(i) * Sqr(t(i)) * epsilon(i, 1))
Sum_S = Sum_S + S(i)

'----------- DECOMPOSE MATRIX -------------------N = Matrix_range.Columns.Count


ReDim L_Lower(1 To N, 1 To N)
For i = 1 To N
For j = 1 To N
L_Lower(i, j) = Matrix_range(i, j).Value
Next j
Next i

Next i
Delta(j) = Sum_S - Sum_S0

L_Lower = cholesky(Matrix_range)

Next j

ReDim Preserve Val_at_Risk(1 To Runs)


ReDim Preserve Delta(1 To Runs)

'Sort the Deltas and select the Delta corresponding to the percentile
Delta = quicksort(Delta)
Percentile = 1 - Confidence
Val_at_Risk = Delta(Round(Percentile * Runs, 0))
VaR_Sim = Val_at_Risk

'----------- GET PARAMETERS AND FILL VECTORS -------------------For j = 1 To Runs


Sum_S = 0
RandVars = Fill_epsilon(Vector_Limits)

Nyasha Madavo, VBA Developer.net

Application.Calculation = xlCalculationAutomatic

How To Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation

How to Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation
End Function

Application.Volatile (True)
Application.ScreenUpdating = True

Function Fill_epsilon(ByVal Vector_Limit As Long) As Variant

Next Steps
Dim i As Long
Dim epsilon() As Double
ReDim Preserve epsilon(1 To Vector_Limit)
For i = 1 To Vector_Limit
epsilon(i) = WorksheetFunction.NormSInv(Rnd)
Next i
Fill_epsilon = epsilon
End Function

Here we've essentially assumed homogeneity of the assets and


assumed that stock prices follow the assumptions of the Black
Scholes model. We've assumed lognormality assumptions as well as
the remaining Black Scholes assumptions such as interest rate and
volatility remaining constant, which would need to be re-appraised.

How VBA Developer.net Can Save You Time and


money
You can get complete Excel apps from VBA Developer.net containing
the code in this document, customisation, VBA development of any
Excel, Access and Outlook apps, as well as C# and C++ add-ins and
technical documentation.

Visit VBA Developer.net

Examples of VBA documents from VBA


Developer.net
How to build a Black Scholes VBA Option Pricer
How to build a Black Scholes C# Option Pricer
How to Code a Multivariate Value at Risk (VaR) VBA Monte

Nyasha Madavo, VBA Developer.net

How To Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation

How to Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation
Carlo Simulation
How to build a Black Scholes VBA Option Pricer for FX
Options
How to build a Black Scholes VBA Option Pricer for Equity
Options

How To Code the Newton-Raphson Method in Excel VBA


How to Model Volatility Smiles, Volatility Term Structure and
the Volatility Surface in Excel VBA
How To Write Use Cases for a Portfolio Reporting VBA Tool

How to build a Black Scholes VBA Option Pricer using Monte


Carlo Simulation
How to build a Black Scholes VBA Option Pricer for Binary
Options

How To Write a User Interface Model For a Portfolio Reporting


VBA Tool
How To Create a Semantic Object Model For a Portfolio
Reporting VBA Tool

How to build a Black Scholes VBA Option Pricer for Equity


Barrier Options

How To Normalise a Database For VBA Apps

How to build a Black Scholes VBA Option Pricer for Exotic


Asian Options

How To Create a Database using SQL Scripts for a Portfolio


Reporting VBA App

How to build a Black Scholes VBA Option Pricer for Exotic


Lookback Options

How to Write Stored Procedures in SQL/Access/VBA for a


Portfolio Reporting VBA App

How to build an Equity Option Pricer using the Binomial Tree


in Excel VBA

How to Use Cursors in SQL for a Portfolio Reporting VBA


Tool

How to code a Choleskey Decomposition in VBA (Numerical


Methods for Excel)

How to Move Data from Access to Excel with SQL for a


Portfolio Reporting VBA App

3 ways to sort in VBA

Nyasha Madavo, VBA Developer.net

How To Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation

How to Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation
Portfolio Reporting VBA Tool: Inserting Data into SQL/Access
Databases from Excel
Portfolio Reporting VBA Tool: Connecting Excel with SQL &
Access Databases
How To Design Classes For an Option Pricer in VBA: UML
Concepts
How To Design Classes for Object Orientated VBA
Programming

Nyasha Madavo, VBA Developer.net

How To Code a Multivariate Value at Risk (VaR) VBA Monte Carlo Simulation

Das könnte Ihnen auch gefallen